Changelog in Linux kernel 5.15.165

 
ACPI: battery: create alarm sysfs attribute atomically [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Sun Jun 9 09:27:16 2024 +0200

    ACPI: battery: create alarm sysfs attribute atomically
    
    [ Upstream commit a231eed10ed5a290129fda36ad7bcc263c53ff7d ]
    
    Let the power supply core register the attribute.
    This ensures that the attribute is created before the device is
    announced to userspace, avoid a race condition.
    
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: SBS: manage alarm sysfs attribute through psy core [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Sun Jun 9 13:13:28 2024 +0200

    ACPI: SBS: manage alarm sysfs attribute through psy core
    
    [ Upstream commit 6bad28cfc30988a845fb3f59a99f4b8a4ce8fe95 ]
    
    Let the power supply core register the attribute.
    
    This ensures that the attribute is created before the device is
    announced to userspace, avoiding a race condition.
    
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
af_packet: Handle outgoing VLAN packets without hardware offloading [+ + +]
Author: Chengen Du <chengen.du@canonical.com>
Date:   Sat Jul 13 19:47:35 2024 +0800

    af_packet: Handle outgoing VLAN packets without hardware offloading
    
    commit 79eecf631c14e7f4057186570ac20e2cfac3802e upstream.
    
    The issue initially stems from libpcap. The ethertype will be overwritten
    as the VLAN TPID if the network interface lacks hardware VLAN offloading.
    In the outbound packet path, if hardware VLAN offloading is unavailable,
    the VLAN tag is inserted into the payload but then cleared from the sk_buff
    struct. Consequently, this can lead to a false negative when checking for
    the presence of a VLAN tag, causing the packet sniffing outcome to lack
    VLAN tag information (i.e., TCI-TPID). As a result, the packet capturing
    tool may be unable to parse packets as expected.
    
    The TCI-TPID is missing because the prb_fill_vlan_info() function does not
    modify the tp_vlan_tci/tp_vlan_tpid values, as the information is in the
    payload and not in the sk_buff struct. The skb_vlan_tag_present() function
    only checks vlan_all in the sk_buff struct. In cooked mode, the L2 header
    is stripped, preventing the packet capturing tool from determining the
    correct TCI-TPID value. Additionally, the protocol in SLL is incorrect,
    which means the packet capturing tool cannot parse the L3 header correctly.
    
    Link: https://github.com/the-tcpdump-group/libpcap/issues/1105
    Link: https://lore.kernel.org/netdev/20240520070348.26725-1-chengen.du@canonical.com/T/#u
    Fixes: 393e52e33c6c ("packet: deliver VLAN TCI to userspace")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chengen Du <chengen.du@canonical.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20240713114735.62360-1-chengen.du@canonical.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ALSA: hda/hdmi: Yet more pin fix for HP EliteDesk 800 G4 [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Aug 6 08:49:16 2024 +0200

    ALSA: hda/hdmi: Yet more pin fix for HP EliteDesk 800 G4
    
    commit 176fd1511dd9086ab4fa9323cb232177c6235288 upstream.
    
    HP EliteDesk 800 G4 (PCI SSID 103c:83e2) is another Kabylake machine
    where BIOS misses the HDMI pin initializations.  Add the quirk entry.
    
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240806064918.11132-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Add quirk for Acer Aspire E5-574G [+ + +]
Author: Mavroudis Chatzilazaridis <mavchatz@protonmail.com>
Date:   Sun Jul 28 12:36:04 2024 +0000

    ALSA: hda/realtek: Add quirk for Acer Aspire E5-574G
    
    commit 3c0b6f924e1259ade38587ea719b693f6f6f2f3e upstream.
    
    ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST fixes combo jack detection and
    limits the internal microphone boost that causes clipping on this model.
    
    Signed-off-by: Mavroudis Chatzilazaridis <mavchatz@protonmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240728123601.144017-1-mavchatz@protonmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda: Add HP MP9 G4 Retail System AMS to force connect list [+ + +]
Author: Steven 'Steve' Kendall <skend@chromium.org>
Date:   Tue Aug 6 00:08:24 2024 +0000

    ALSA: hda: Add HP MP9 G4 Retail System AMS to force connect list
    
    commit 7e1e206b99f4b3345aeb49d94584a420b7887f1d upstream.
    
    In recent HP UEFI firmware (likely v2.15 and above, tested on 2.27),
    these pins are incorrectly set for HDMI/DP audio. Tested on
    HP MP9 G4 Retail System AMS. Tested audio with two monitors connected
    via DisplayPort.
    
    Link: https://forum.manjaro.org/t/intel-cannon-lake-pch-cavs-conexant-cx20632-no-sound-at-hdmi-or-displayport/133494
    Link: https://bbs.archlinux.org/viewtopic.php?id=270523
    Signed-off-by: Steven 'Steve' Kendall <skend@chromium.org>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240806-hdmi-audio-hp-wrongpins-v2-1-d9eb4ad41043@chromium.org
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda: conexant: Fix headset auto detect fail in the polling mode [+ + +]
Author: songxiebing <songxiebing@kylinos.cn>
Date:   Fri Jul 26 18:07:26 2024 +0800

    ALSA: hda: conexant: Fix headset auto detect fail in the polling mode
    
    [ Upstream commit e60dc98122110594d0290845160f12916192fc6d ]
    
    The previous fix (7aeb25908648) only handles the unsol_event reporting
    during interrupts and does not include the polling mode used to set
    jackroll_ms, so now we are replacing it with
    snd_hda_jack_detect_enable_callback.
    
    Fixes: 7aeb25908648 ("ALSA: hda/conexant: Fix headset auto detect fail in cx8070 and SN6140")
    Co-developed-by: bo liu <bo.liu@senarytech.com>
    Signed-off-by: bo liu <bo.liu@senarytech.com>
    Signed-off-by: songxiebing <songxiebing@kylinos.cn>
    Link: https://patch.msgid.link/20240726100726.50824-1-soxiebing@163.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: line6: Fix racy access to midibuf [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Aug 5 15:01:28 2024 +0200

    ALSA: line6: Fix racy access to midibuf
    
    commit 15b7a03205b31bc5623378c190d22b7ff60026f1 upstream.
    
    There can be concurrent accesses to line6 midibuf from both the URB
    completion callback and the rawmidi API access.  This could be a cause
    of KMSAN warning triggered by syzkaller below (so put as reported-by
    here).
    
    This patch protects the midibuf call of the former code path with a
    spinlock for avoiding the possible races.
    
    Reported-by: syzbot+78eccfb8b3c9a85fc6c5@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/00000000000000949c061df288c5@google.com
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240805130129.10872-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Add a quirk for Sonix HD USB Camera [+ + +]
Author: wangdicheng <wangdicheng@kylinos.cn>
Date:   Mon Jul 22 16:48:22 2024 +0800

    ALSA: usb-audio: Add a quirk for Sonix HD USB Camera
    
    commit 21451dfd853e7d8e6e3fbd7ef1fbdb2f2ead12f5 upstream.
    
    Sonix HD USB Camera does not support reading the sample rate which leads
    to many lines of "cannot get freq at ep 0x84".
    This patch adds the USB ID to quirks.c and avoids those error messages.
    
    (snip)
    [1.789698] usb 3-3: new high-speed USB device number 2 using xhci_hcd
    [1.984121] usb 3-3: New USB device found, idVendor=0c45, idProduct=6340, bcdDevice= 0.00
    [1.984124] usb 3-3: New USB device strings: Mfr=2, Product=1, SerialNumber=0
    [1.984127] usb 3-3: Product: USB 2.0 Camera
    [1.984128] usb 3-3: Manufacturer: Sonix Technology Co., Ltd.
    [5.440957] usb 3-3: 3:1: cannot get freq at ep 0x84
    [12.130679] usb 3-3: 3:1: cannot get freq at ep 0x84
    [12.175065] usb 3-3: 3:1: cannot get freq at ep 0x84
    
    Signed-off-by: wangdicheng <wangdicheng@kylinos.cn>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240722084822.31620-1-wangdich9700@163.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Correct surround channels in UAC1 channel map [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Jul 31 16:19:41 2024 +0200

    ALSA: usb-audio: Correct surround channels in UAC1 channel map
    
    commit b7b7e1ab7619deb3b299b5e5c619c3e6f183a12d upstream.
    
    USB-audio driver puts SNDRV_CHMAP_SL and _SR as left and right
    surround channels for UAC1 channel map, respectively.  But they should
    have been SNDRV_CHMAP_RL and _RR; the current value *_SL and _SR are
    rather "side" channels, not "surround".  I guess I took those
    mistakenly when I read the spec mentioning "surround left".
    
    This patch corrects those entries to be the right channels.
    
    Suggested-by: Sylvain BERTRAND <sylvain.bertrand@legeek.net>
    Closes: https://lore.kernel.orgZ/qIyJD8lhd8hFhlC@freedom
    Fixes: 04324ccc75f9 ("ALSA: usb-audio: add channel map support")
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240731142018.24750-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Fix microphone sound on HD webcam. [+ + +]
Author: wangdicheng <wangdicheng@kylinos.cn>
Date:   Fri Jul 19 10:09:06 2024 +0800

    ALSA: usb-audio: Fix microphone sound on HD webcam.
    
    commit 74dba240881820b46b9b1c62ef4de3bfff47fbd4 upstream.
    
    I own an external usb Webcam, HD webcam, which had low mic volume and
    inconsistent sound quality. Video works as expected.
    
    (snip)
    [   95.473820][ 1] [   T73] usb 5-2.2: new high-speed USB device number 7 using xhci_hcd
    [   95.773974][ 1] [   T73] usb 5-2.2: New USB device found, idVendor=1bcf, idProduct=2281, bcdDevice= 0.05
    [   95.783445][ 1] [   T73] usb 5-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [   95.791872][ 1] [   T73] usb 5-2.2: Product: HD webcam
    [   95.797001][ 1] [   T73] usb 5-2.2: Manufacturer: Sunplus IT Co
    [   95.802996][ 1] [   T73] usb 5-2.2: SerialNumber: 20200513
    [   96.092610][ 2] [ T3680] usb 5-2.2: Warning! Unlikely big volume range (=4096), cval->res is probably wrong.
    [   96.102436][ 2] [ T3680] usb 5-2.2: [5] FU [Mic Capture Volume] ch = 1, val = 0/4096/1
    
    Set up quirk cval->res to 16 for 256 levels,
    Set GET_SAMPLE_RATE quirk flag to stop trying to get the sample rate.
    Confirmed that happened anyway later due to the backoff mechanism,
    After 3 failures.
    
    All audio stream on device interfaces share the same values,
    apart from wMaxPacketSize and tSamFreq :
    
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        3
          bAlternateSetting       4
          bNumEndpoints           1
          bInterfaceClass         1 Audio
    
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       4
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol      0
      iInterface              0
      AudioStreaming Interface Descriptor:
        bLength                 7
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           3
        bDelay                  1 frames
        wFormatTag         0x0001 PCM
      AudioStreaming Interface Descriptor:
        bLength                11
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bNrChannels             1
        bSubframeSize           2
        bBitResolution         16
        bSamFreqType            1 Discrete
        tSamFreq[ 0]        48000
      Endpoint Descriptor:
        bLength                 9
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x0064  1x 100 bytes
        bInterval               4
        bRefresh                0
        bSynchAddress           0
        AudioStreaming Endpoint Descriptor:
          bLength                 7
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x01
            Sampling Frequency
          bLockDelayUnits         0 Undefined
          wLockDelay         0x0000
    (snip)
    
    Testing patch provides consistent good sound recording quality and volume range.
    
    (snip)
    [   95.473820][ 1] [   T73] usb 5-2.2: new high-speed USB device number 7 using xhci_hcd
    [   95.773974][ 1] [   T73] usb 5-2.2: New USB device found, idVendor=1bcf, idProduct=2281, bcdDevice= 0.05
    [   95.783445][ 1] [   T73] usb 5-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [   95.791872][ 1] [   T73] usb 5-2.2: Product: HD webcam
    [   95.797001][ 1] [   T73] usb 5-2.2: Manufacturer: Sunplus IT Co
    [   95.802996][ 1] [   T73] usb 5-2.2: SerialNumber: 20200513
    [   96.110630][ 3] [ T3680] usbcore: registered new interface driver snd-usb-audio
    [   96.114329][ 7] [ T3677] usb 5-2.2: Found UVC 1.00 device HD webcam (1bcf:2281)
    [   96.167555][ 7] [ T3677] usbcore: registered new interface driver uvcvideo
    
    Signed-off-by: wangdicheng <wangdicheng@kylinos.cn>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240719020906.8078-1-wangdich9700@163.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Move HD Webcam quirk to the right place [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Jul 22 10:06:04 2024 +0200

    ALSA: usb-audio: Move HD Webcam quirk to the right place
    
    commit 7010d9464f7ca3ee2d75095ea2e642a9009a41ff upstream.
    
    The quirk_flags_table[] is sorted in the USB ID order, while the last
    fix was put at a wrong position.  Adjust the entry at the right
    position.
    
    Fixes: 74dba2408818 ("ALSA: usb-audio: Fix microphone sound on HD webcam.")
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240722080605.23481-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Re-add ScratchAmp quirk entries [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Aug 8 10:18:01 2024 +0200

    ALSA: usb-audio: Re-add ScratchAmp quirk entries
    
    [ Upstream commit 03898691d42e0170e7d00f07cbe21ce0e9f3a8fa ]
    
    At the code refactoring of USB-audio quirk handling, I assumed that
    the quirk entries of Stanton ScratchAmp devices were only about the
    device name, and moved them completely into the rename table.
    But it seems that the device requires the quirk entry so that it's
    probed by the driver itself.
    
    This re-adds back the quirk entries of ScratchAmp, but in a
    minimalistic manner.
    
    Fixes: 5436f59bc5bc ("ALSA: usb-audio: Move device rename and profile quirks to an internal table")
    Link: https://patch.msgid.link/20240808081803.22300-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
apparmor: Fix null pointer deref when receiving skb during sock creation [+ + +]
Author: Xiao Liang <shaw.leon@gmail.com>
Date:   Sat Sep 2 08:48:38 2023 +0800

    apparmor: Fix null pointer deref when receiving skb during sock creation
    
    [ Upstream commit fce09ea314505a52f2436397608fa0a5d0934fb1 ]
    
    The panic below is observed when receiving ICMP packets with secmark set
    while an ICMP raw socket is being created. SK_CTX(sk)->label is updated
    in apparmor_socket_post_create(), but the packet is delivered to the
    socket before that, causing the null pointer dereference.
    Drop the packet if label context is not set.
    
        BUG: kernel NULL pointer dereference, address: 000000000000004c
        #PF: supervisor read access in kernel mode
        #PF: error_code(0x0000) - not-present page
        PGD 0 P4D 0
        Oops: 0000 [#1] PREEMPT SMP NOPTI
        CPU: 0 PID: 407 Comm: a.out Not tainted 6.4.12-arch1-1 #1 3e6fa2753a2d75925c34ecb78e22e85a65d083df
        Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/28/2020
        RIP: 0010:aa_label_next_confined+0xb/0x40
        Code: 00 00 48 89 ef e8 d5 25 0c 00 e9 66 ff ff ff 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 66 0f 1f 00 0f 1f 44 00 00 89 f0 <8b> 77 4c 39 c6 7e 1f 48 63 d0 48 8d 14 d7 eb 0b 83 c0 01 48 83 c2
        RSP: 0018:ffffa92940003b08 EFLAGS: 00010246
        RAX: 0000000000000000 RBX: 0000000000000000 RCX: 000000000000000e
        RDX: ffffa92940003be8 RSI: 0000000000000000 RDI: 0000000000000000
        RBP: ffff8b57471e7800 R08: ffff8b574c642400 R09: 0000000000000002
        R10: ffffffffbd820eeb R11: ffffffffbeb7ff00 R12: ffff8b574c642400
        R13: 0000000000000001 R14: 0000000000000001 R15: 0000000000000000
        FS:  00007fb092ea7640(0000) GS:ffff8b577bc00000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 000000000000004c CR3: 00000001020f2005 CR4: 00000000007706f0
        PKRU: 55555554
        Call Trace:
         <IRQ>
         ? __die+0x23/0x70
         ? page_fault_oops+0x171/0x4e0
         ? exc_page_fault+0x7f/0x180
         ? asm_exc_page_fault+0x26/0x30
         ? aa_label_next_confined+0xb/0x40
         apparmor_secmark_check+0xec/0x330
         security_sock_rcv_skb+0x35/0x50
         sk_filter_trim_cap+0x47/0x250
         sock_queue_rcv_skb_reason+0x20/0x60
         raw_rcv+0x13c/0x210
         raw_local_deliver+0x1f3/0x250
         ip_protocol_deliver_rcu+0x4f/0x2f0
         ip_local_deliver_finish+0x76/0xa0
         __netif_receive_skb_one_core+0x89/0xa0
         netif_receive_skb+0x119/0x170
         ? __netdev_alloc_skb+0x3d/0x140
         vmxnet3_rq_rx_complete+0xb23/0x1010 [vmxnet3 56a84f9c97178c57a43a24ec073b45a9d6f01f3a]
         vmxnet3_poll_rx_only+0x36/0xb0 [vmxnet3 56a84f9c97178c57a43a24ec073b45a9d6f01f3a]
         __napi_poll+0x28/0x1b0
         net_rx_action+0x2a4/0x380
         __do_softirq+0xd1/0x2c8
         __irq_exit_rcu+0xbb/0xf0
         common_interrupt+0x86/0xa0
         </IRQ>
         <TASK>
         asm_common_interrupt+0x26/0x40
        RIP: 0010:apparmor_socket_post_create+0xb/0x200
        Code: 08 48 85 ff 75 a1 eb b1 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 0f 1f 44 00 00 41 54 <55> 48 89 fd 53 45 85 c0 0f 84 b2 00 00 00 48 8b 1d 80 56 3f 02 48
        RSP: 0018:ffffa92940ce7e50 EFLAGS: 00000286
        RAX: ffffffffbc756440 RBX: 0000000000000000 RCX: 0000000000000001
        RDX: 0000000000000003 RSI: 0000000000000002 RDI: ffff8b574eaab740
        RBP: 0000000000000001 R08: 0000000000000000 R09: 0000000000000000
        R10: ffff8b57444cec70 R11: 0000000000000000 R12: 0000000000000003
        R13: 0000000000000002 R14: ffff8b574eaab740 R15: ffffffffbd8e4748
         ? __pfx_apparmor_socket_post_create+0x10/0x10
         security_socket_post_create+0x4b/0x80
         __sock_create+0x176/0x1f0
         __sys_socket+0x89/0x100
         __x64_sys_socket+0x17/0x20
         do_syscall_64+0x5d/0x90
         ? do_syscall_64+0x6c/0x90
         ? do_syscall_64+0x6c/0x90
         ? do_syscall_64+0x6c/0x90
         entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    Fixes: ab9f2115081a ("apparmor: Allow filtering based on secmark policy")
    Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

apparmor: use kvfree_sensitive to free data->data [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Thu Feb 1 17:24:48 2024 +0300

    apparmor: use kvfree_sensitive to free data->data
    
    commit 2bc73505a5cd2a18a7a542022722f136c19e3b87 upstream.
    
    Inside unpack_profile() data->data is allocated using kvmemdup() so it
    should be freed with the corresponding kvfree_sensitive().
    
    Also add missing data->data release for rhashtable insertion failure path
    in unpack_profile().
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Fixes: e025be0f26d5 ("apparmor: support querying extended trusted helper extra data")
    Cc: stable@vger.kernel.org
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: Add Neoverse-V2 part [+ + +]
Author: Besar Wicaksono <bwicaksono@nvidia.com>
Date:   Fri Aug 9 11:09:22 2024 +0100

    arm64: Add Neoverse-V2 part
    
    [ Upstream commit f4d9d9dcc70b96b5e5d7801bd5fbf8491b07b13d ]
    
    Add the part number and MIDR for Neoverse-V2
    
    Signed-off-by: Besar Wicaksono <bwicaksono@nvidia.com>
    Reviewed-by: James Clark <james.clark@arm.com>
    Link: https://lore.kernel.org/r/20240109192310.16234-2-bwicaksono@nvidia.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: barrier: Restore spec_bar() macro [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:23 2024 +0100

    arm64: barrier: Restore spec_bar() macro
    
    [ Upstream commit ebfc726eae3f31bdb5fae1bbd74ef235d71046ca ]
    
    Upcoming errata workarounds will need to use SB from C code. Restore the
    spec_bar() macro so that we can use SB.
    
    This is effectively a revert of commit:
    
      4f30ba1cce36d413 ("arm64: barrier: Remove spec_bar() macro")
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240508081400.235362-2-mark.rutland@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Mark: fix conflict ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cpufeature: Fix the visibility of compat hwcaps [+ + +]
Author: Amit Daniel Kachhap <amit.kachhap@arm.com>
Date:   Thu Nov 3 13:52:32 2022 +0530

    arm64: cpufeature: Fix the visibility of compat hwcaps
    
    commit 85f1506337f0c79a4955edfeee86a18628e3735f upstream.
    
    Commit 237405ebef58 ("arm64: cpufeature: Force HWCAP to be based on the
    sysreg visible to user-space") forced the hwcaps to use sanitised
    user-space view of the id registers. However, the ID register structures
    used to select few compat cpufeatures (vfp, crc32, ...) are masked and
    hence such hwcaps do not appear in /proc/cpuinfo anymore for PER_LINUX32
    personality.
    
    Add the ID register structures explicitly and set the relevant entry as
    visible. As these ID registers are now of type visible so make them
    available in 64-bit userspace by making necessary changes in register
    emulation logic and documentation.
    
    While at it, update the comment for structure ftr_generic_32bits[] which
    lists the ID register that use it.
    
    Fixes: 237405ebef58 ("arm64: cpufeature: Force HWCAP to be based on the sysreg visible to user-space")
    Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
    Reviewed-by: James Morse <james.morse@arm.com>
    Signed-off-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
    Link: https://lore.kernel.org/r/20221103082232.19189-1-amit.kachhap@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: cpufeature: Force HWCAP to be based on the sysreg visible to user-space [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Fri Aug 9 11:09:21 2024 +0100

    arm64: cpufeature: Force HWCAP to be based on the sysreg visible to user-space
    
    [ Upstream commit 237405ebef580a7352a52129b2465c117145eafa ]
    
    arm64 advertises hardware features to user-space via HWCAPs, and by
    emulating access to the CPUs id registers. The cpufeature code has a
    sanitised system-wide view of an id register, and a sanitised user-space
    view of an id register, where some features use their 'safe' value
    instead of the hardware value.
    
    It is currently possible for a HWCAP to be advertised where the user-space
    view of the id register does not show the feature as supported.
    Erratum workaround need to remove both the HWCAP, and the feature from
    the user-space view of the id register. This involves duplicating the
    code, and spreading it over cpufeature.c and cpu_errata.c.
    
    Make the HWCAP code use the user-space view of id registers. This ensures
    the values never diverge, and allows erratum workaround to remove HWCAP
    by modifying the user-space view of the id register.
    
    Signed-off-by: James Morse <james.morse@arm.com>
    Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20220909165938.3931307-2-james.morse@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: fixup lack of 'width' parameter ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Cortex-A720 definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:28 2024 +0100

    arm64: cputype: Add Cortex-A720 definitions
    
    [ Upstream commit add332c40328cf06fe35e4b3cde8ec315c4629e5 ]
    
    Add cputype definitions for Cortex-A720. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table A-186 ("MIDR_EL1 bit descriptions")
    in issue 0002-05 of the Cortex-A720 TRM, which can be found at:
    
      https://developer.arm.com/documentation/102530/0002/?lang=en
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240603111812.1514101-3-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Cortex-A725 definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:33 2024 +0100

    arm64: cputype: Add Cortex-A725 definitions
    
    [ Upstream commit 9ef54a384526911095db465e77acc1cb5266b32c ]
    
    Add cputype definitions for Cortex-A725. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in the Cortex-A725 TRM:
    
      https://developer.arm.com/documentation/107652/0001/
    
    ... in table A-247 ("MIDR_EL1 bit descriptions").
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20240801101803.1982459-3-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Cortex-X1C definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:32 2024 +0100

    arm64: cputype: Add Cortex-X1C definitions
    
    [ Upstream commit 58d245e03c324d083a0ec3b9ab8ebd46ec9848d7 ]
    
    Add cputype definitions for Cortex-X1C. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in the Cortex-X1C TRM:
    
      https://developer.arm.com/documentation/101968/0002/
    
    ... in section B2.107 ("MIDR_EL1, Main ID Register, EL1").
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20240801101803.1982459-2-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Cortex-X3 definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:27 2024 +0100

    arm64: cputype: Add Cortex-X3 definitions
    
    [ Upstream commit be5a6f238700f38b534456608588723fba96c5ab ]
    
    Add cputype definitions for Cortex-X3. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table A-263 ("MIDR_EL1 bit descriptions")
    in issue 07 of the Cortex-X3 TRM, which can be found at:
    
      https://developer.arm.com/documentation/101593/0102/?lang=en
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240603111812.1514101-2-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Cortex-X4 definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:24 2024 +0100

    arm64: cputype: Add Cortex-X4 definitions
    
    [ Upstream commit 02a0a04676fa7796d9cbc9eb5ca120aaa194d2dd ]
    
    Add cputype definitions for Cortex-X4. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table B-249 ("MIDR_EL1 bit descriptions")
    in issue 0002-05 of the Cortex-X4 TRM, which can be found at:
    
      https://developer.arm.com/documentation/102484/0002/?lang=en
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240508081400.235362-3-mark.rutland@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Mark: fix conflict (dealt with upstream via a later merge) ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Cortex-X925 definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:29 2024 +0100

    arm64: cputype: Add Cortex-X925 definitions
    
    [ Upstream commit fd2ff5f0b320f418288e7a1f919f648fbc8a0dfc ]
    
    Add cputype definitions for Cortex-X925. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table A-285 ("MIDR_EL1 bit descriptions")
    in issue 0001-05 of the Cortex-X925 TRM, which can be found at:
    
      https://developer.arm.com/documentation/102807/0001/?lang=en
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240603111812.1514101-4-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Neoverse-V3 definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:25 2024 +0100

    arm64: cputype: Add Neoverse-V3 definitions
    
    [ Upstream commit 0ce85db6c2141b7ffb95709d76fc55a27ff3cdc1 ]
    
    Add cputype definitions for Neoverse-V3. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table B-249 ("MIDR_EL1 bit descriptions")
    in issue 0001-04 of the Neoverse-V3 TRM, which can be found at:
    
      https://developer.arm.com/documentation/107734/0001/?lang=en
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240508081400.235362-4-mark.rutland@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: amlogic: gx: correct hdmi clocks [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Wed Jun 26 17:27:30 2024 +0200

    arm64: dts: amlogic: gx: correct hdmi clocks
    
    [ Upstream commit 0602ba0dcd0e76067a0b7543e92b2de3fb231073 ]
    
    The clocks provided to HDMI tx are not consistent between gx and g12:
    * gx receives the peripheral clock as 'isfr' while g12 receives it as
      'iahb'
    * g12 gets the HDMI system clock as 'isfr' but gx does not even get it.
      It surely needs that clock since the driver is directly poking around
      the clock controller's registers for that clock.
    
    Align gx SoCs with g12 and provide:
     * the HDMI peripheral clock as 'iahb'
     * the HDMI system clock as 'isfr'
    
    Fixes: 6939db7e0dbf ("ARM64: dts: meson-gx: Add support for HDMI output")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20240626152733.1350376-2-jbrunet@baylibre.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: mediatek: mt7622: fix "emmc" pinctrl mux [+ + +]
Author: Rafał Miłecki <rafal@milecki.pl>
Date:   Tue Jun 4 09:49:16 2024 +0200

    arm64: dts: mediatek: mt7622: fix "emmc" pinctrl mux
    
    [ Upstream commit aebba1030a5766cdf894ed4ab0cac7aed5aee9c1 ]
    
    Value "emmc_rst" is a group name and should be part of the "groups"
    property.
    
    This fixes:
    arch/arm64/boot/dts/mediatek/mt7622-rfb1.dtb: pinctrl@10211000: emmc-pins-default:mux:function: ['emmc', 'emmc_rst'] is too long
            from schema $id: http://devicetree.org/schemas/pinctrl/mediatek,mt7622-pinctrl.yaml#
    arch/arm64/boot/dts/mediatek/mt7622-bananapi-bpi-r64.dtb: pinctrl@10211000: emmc-pins-default:mux:function: ['emmc', 'emmc_rst'] is too long
            from schema $id: http://devicetree.org/schemas/pinctrl/mediatek,mt7622-pinctrl.yaml#
    
    Fixes: 3725ba3f5574 ("arm64: dts: mt7622: add pinctrl related device nodes")
    Fixes: 0b6286dd96c0 ("arm64: dts: mt7622: add bananapi BPI-R64 board")
    Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://lore.kernel.org/r/20240604074916.7929-1-zajec5@gmail.com
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: mediatek: mt8183-kukui-jacuzzi: Add ports node for anx7625 [+ + +]
Author: Chen-Yu Tsai <wenst@chromium.org>
Date:   Wed Jan 31 16:39:29 2024 +0800

    arm64: dts: mediatek: mt8183-kukui-jacuzzi: Add ports node for anx7625
    
    [ Upstream commit 4055416e6c51347e7dd5784065263fe0ced0bb7d ]
    
    The anx7625 binding requires a "ports" node as a container for the
    "port" nodes. The jacuzzi dtsi file is missing it.
    
    Add a "ports" node under the anx7625 node, and move the port related
    nodes and properties under it.
    
    Fixes: cabc71b08eb5 ("arm64: dts: mt8183: Add kukui-jacuzzi-damu board")
    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://lore.kernel.org/r/20240131083931.3970388-1-wenst@chromium.org
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: mediatek: mt8183-kukui: Drop bogus output-enable property [+ + +]
Author: Chen-Yu Tsai <wenst@chromium.org>
Date:   Fri Apr 12 15:56:12 2024 +0800

    arm64: dts: mediatek: mt8183-kukui: Drop bogus output-enable property
    
    [ Upstream commit e9a9055fdcdc1e5a27cef118c5b4f09cdd2fa28e ]
    
    The "output-enable" property is set on uart1's RTS pin. This is bogus
    because the hardware does not actually have a controllable output
    buffer. Secondly, the implementation incorrectly treats this property
    as a request to switch the pin to GPIO output. This does not fit the
    intended semantic of "output-enable" and it does not have any affect
    either because the pin is muxed to the UART function, not the GPIO
    function.
    
    Drop the property.
    
    Fixes: cd894e274b74 ("arm64: dts: mt8183: Add krane-sku176 board")
    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    Link: https://lore.kernel.org/r/20240412075613.1200048-1-wenst@chromium.org
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: ipq8074: Disable SS instance in Parkmode for USB [+ + +]
Author: Krishna Kurapati <quic_kriskura@quicinc.com>
Date:   Thu Jul 4 20:58:42 2024 +0530

    arm64: dts: qcom: ipq8074: Disable SS instance in Parkmode for USB
    
    [ Upstream commit dc6ba95c6c4400a84cca5b419b34ae852a08cfb5 ]
    
    For Gen-1 targets like IPQ8074, it is seen that stressing out the
    controller in host mode results in HC died error:
    
     xhci-hcd.12.auto: xHCI host not responding to stop endpoint command
     xhci-hcd.12.auto: xHCI host controller not responding, assume dead
     xhci-hcd.12.auto: HC died; cleaning up
    
    And at this instant only restarting the host mode fixes it. Disable
    SuperSpeed instance in park mode for IPQ8074 to mitigate this issue.
    
    Cc: stable@vger.kernel.org
    Fixes: 5e09bc51d07b ("arm64: dts: ipq8074: enable USB support")
    Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Link: https://lore.kernel.org/r/20240704152848.3380602-3-quic_kriskura@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8996: correct #clock-cells for QMP PHY nodes [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Mon Jun 20 10:19:34 2022 +0300

    arm64: dts: qcom: msm8996: correct #clock-cells for QMP PHY nodes
    
    commit b874fff9a7683df30e5aff16d5a85b1f8a43aa5d upstream.
    
    The commit 82d61e19fccb ("arm64: dts: qcom: msm8996: Move '#clock-cells'
    to QMP PHY child node") moved the '#clock-cells' properties to the child
    nodes. However it missed the fact that the property must have been set
    to <0> (as all pipe clocks use of_clk_hw_simple_get as the xlate
    function. Also the mentioned commit didn't add '#clock-cells' properties
    to second and third PCIe PHY nodes. Correct both these mistakes:
    
    - Set '#clock-cells' to <0>,
    - Add the property to pciephy_1 and pciephy_2 nodes.
    
    Fixes: 82d61e19fccb ("arm64: dts: qcom: msm8996: Move '#clock-cells' to QMP PHY child node")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
    Link: https://lore.kernel.org/r/20220620071936.1558906-3-dmitry.baryshkov@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: qcom: msm8996: Move '#clock-cells' to QMP PHY child node [+ + +]
Author: Shawn Guo <shawn.guo@linaro.org>
Date:   Wed Sep 29 11:42:46 2021 +0800

    arm64: dts: qcom: msm8996: Move '#clock-cells' to QMP PHY child node
    
    [ Upstream commit 82d61e19fccbf2fe7c018765b3799791916e7f31 ]
    
    '#clock-cells' is a required property of QMP PHY child node, not itself.
    Move it to fix the dtbs_check warnings.
    
    There are only '#clock-cells' removal from SM8350 QMP PHY nodes, because
    child nodes already have the property.
    
    Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
    Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
    Link: https://lore.kernel.org/r/20210929034253.24570-4-shawn.guo@linaro.org
    Stable-dep-of: 0046325ae520 ("arm64: dts: qcom: msm8998: Disable SS instance in Parkmode for USB")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8996: specify UFS core_clk frequencies [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Mon Apr 8 03:04:31 2024 +0300

    arm64: dts: qcom: msm8996: specify UFS core_clk frequencies
    
    [ Upstream commit 02f838b7f8cdfb7a96b7f08e7f6716f230bdecba ]
    
    Follow the example of other platforms and specify core_clk frequencies
    in the frequency table in addition to the core_clk_src frequencies. The
    driver should be setting the leaf frequency instead of some interim
    clock freq.
    
    Suggested-by: Nitin Rawat <quic_nitirawa@quicinc.com>
    Fixes: 57fc67ef0d35 ("arm64: dts: qcom: msm8996: Add ufs related nodes")
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20240408-msm8996-fix-ufs-v4-1-ee1a28bf8579@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8998: Disable SS instance in Parkmode for USB [+ + +]
Author: Krishna Kurapati <quic_kriskura@quicinc.com>
Date:   Thu Jul 4 20:58:43 2024 +0530

    arm64: dts: qcom: msm8998: Disable SS instance in Parkmode for USB
    
    [ Upstream commit 0046325ae52079b46da13a7f84dd7b2a6f7c38f8 ]
    
    For Gen-1 targets like MSM8998, it is seen that stressing out the
    controller in host mode results in HC died error:
    
     xhci-hcd.12.auto: xHCI host not responding to stop endpoint command
     xhci-hcd.12.auto: xHCI host controller not responding, assume dead
     xhci-hcd.12.auto: HC died; cleaning up
    
    And at this instant only restarting the host mode fixes it. Disable
    SuperSpeed instance in park mode for MSM8998 to mitigate this issue.
    
    Cc: stable@vger.kernel.org
    Fixes: 026dad8f5873 ("arm64: dts: qcom: msm8998: Add USB-related nodes")
    Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Link: https://lore.kernel.org/r/20240704152848.3380602-4-quic_kriskura@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8998: drop USB PHY clock index [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Tue Jul 5 13:40:24 2022 +0200

    arm64: dts: qcom: msm8998: drop USB PHY clock index
    
    [ Upstream commit ed9cbbcb8c6a1925db7995214602c6a8983ff870 ]
    
    The QMP USB PHY provides a single clock so drop the redundant clock
    index.
    
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
    Link: https://lore.kernel.org/r/20220705114032.22787-7-johan+linaro@kernel.org
    Stable-dep-of: 0046325ae520 ("arm64: dts: qcom: msm8998: Disable SS instance in Parkmode for USB")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: msm8998: switch USB QMP PHY to new style of bindings [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Fri Aug 25 00:19:46 2023 +0300

    arm64: dts: qcom: msm8998: switch USB QMP PHY to new style of bindings
    
    [ Upstream commit b7efebfeb2e8ad8187cdabba5f0212ba2e6c1069 ]
    
    Change the USB QMP PHY to use newer style of QMP PHY bindings (single
    resource region, no per-PHY subnodes).
    
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20230824211952.1397699-11-dmitry.baryshkov@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Stable-dep-of: 0046325ae520 ("arm64: dts: qcom: msm8998: Disable SS instance in Parkmode for USB")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sdm845: add power-domain to UFS PHY [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Wed May 1 19:19:32 2024 +0300

    arm64: dts: qcom: sdm845: add power-domain to UFS PHY
    
    [ Upstream commit fd39ae8b9bc10419b1e4b849cdbc6755a967ade1 ]
    
    The UFS PHY is powered on via the UFS_PHY_GDSC power domain. Add
    corresponding power-domain the the PHY node.
    
    Fixes: cc16687fbd74 ("arm64: dts: qcom: sdm845: add UFS controller")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Link: https://lore.kernel.org/r/20240501-qcom-phy-fixes-v1-6-f1fd15c33fb3@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sm8250: add power-domain to UFS PHY [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Wed May 1 19:19:35 2024 +0300

    arm64: dts: qcom: sm8250: add power-domain to UFS PHY
    
    [ Upstream commit 154ed5ea328d8a97a4ef5d1447e6f06d11fe2bbe ]
    
    The UFS PHY is powered on via the UFS_PHY_GDSC power domain. Add
    corresponding power-domain the the PHY node.
    
    Fixes: b7e2fba06622 ("arm64: dts: qcom: sm8250: Add UFS controller and PHY")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Link: https://lore.kernel.org/r/20240501-qcom-phy-fixes-v1-9-f1fd15c33fb3@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: qcom: sm8250: switch UFS QMP PHY to new style of bindings [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Tue Dec 5 06:25:50 2023 +0300

    arm64: dts: qcom: sm8250: switch UFS QMP PHY to new style of bindings
    
    [ Upstream commit ba865bdcc688932980b8e5ec2154eaa33cd4a981 ]
    
    Change the UFS QMP PHY to use newer style of QMP PHY bindings (single
    resource region, no per-PHY subnodes).
    
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20231205032552.1583336-8-dmitry.baryshkov@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Stable-dep-of: 154ed5ea328d ("arm64: dts: qcom: sm8250: add power-domain to UFS PHY")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: rockchip: Increase VOP clk rate on RK3328 [+ + +]
Author: Jonas Karlman <jonas@kwiboo.se>
Date:   Sat Jun 15 17:03:52 2024 +0000

    arm64: dts: rockchip: Increase VOP clk rate on RK3328
    
    [ Upstream commit 0f2ddb128fa20f8441d903285632f2c69e90fae1 ]
    
    The VOP on RK3328 needs to run at a higher rate in order to produce a
    proper 3840x2160 signal.
    
    Change to use 300MHz for VIO clk and 400MHz for VOP clk, same rates used
    by vendor 4.4 kernel.
    
    Fixes: 52e02d377a72 ("arm64: dts: rockchip: add core dtsi file for RK3328 SoCs")
    Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
    Link: https://lore.kernel.org/r/20240615170417.3134517-2-jonas@kwiboo.se
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: errata: Add workaround for Arm errata 3194386 and 3312417 [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:26 2024 +0100

    arm64: errata: Add workaround for Arm errata 3194386 and 3312417
    
    [ Upstream commit 7187bb7d0b5c7dfa18ca82e9e5c75e13861b1d88 ]
    
    Cortex-X4 and Neoverse-V3 suffer from errata whereby an MSR to the SSBS
    special-purpose register does not affect subsequent speculative
    instructions, permitting speculative store bypassing for a window of
    time. This is described in their Software Developer Errata Notice (SDEN)
    documents:
    
    * Cortex-X4 SDEN v8.0, erratum 3194386:
      https://developer.arm.com/documentation/SDEN-2432808/0800/
    
    * Neoverse-V3 SDEN v6.0, erratum 3312417:
      https://developer.arm.com/documentation/SDEN-2891958/0600/
    
    To workaround these errata, it is necessary to place a speculation
    barrier (SB) after MSR to the SSBS special-purpose register. This patch
    adds the requisite SB after writes to SSBS within the kernel, and hides
    the presence of SSBS from EL0 such that userspace software which cares
    about SSBS will manipulate this via prctl(PR_GET_SPECULATION_CTRL, ...).
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240508081400.235362-5-mark.rutland@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Mark: fix conflicts & renames, drop unneeded cpucaps.h, fold in user_feature_fixup() ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: errata: Expand speculative SSBS workaround [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:31 2024 +0100

    arm64: errata: Expand speculative SSBS workaround
    
    [ Upstream commit 75b3c43eab594bfbd8184ec8ee1a6b820950819a ]
    
    A number of Arm Ltd CPUs suffer from errata whereby an MSR to the SSBS
    special-purpose register does not affect subsequent speculative
    instructions, permitting speculative store bypassing for a window of
    time.
    
    We worked around this for Cortex-X4 and Neoverse-V3, in commit:
    
      7187bb7d0b5c7dfa ("arm64: errata: Add workaround for Arm errata 3194386 and 3312417")
    
    ... as per their Software Developer Errata Notice (SDEN) documents:
    
    * Cortex-X4 SDEN v8.0, erratum 3194386:
      https://developer.arm.com/documentation/SDEN-2432808/0800/
    
    * Neoverse-V3 SDEN v6.0, erratum 3312417:
      https://developer.arm.com/documentation/SDEN-2891958/0600/
    
    Since then, similar errata have been published for a number of other Arm Ltd
    CPUs, for which the mitigation is the same. This is described in their
    respective SDEN documents:
    
    * Cortex-A710 SDEN v19.0, errataum 3324338
      https://developer.arm.com/documentation/SDEN-1775101/1900/?lang=en
    
    * Cortex-A720 SDEN v11.0, erratum 3456091
      https://developer.arm.com/documentation/SDEN-2439421/1100/?lang=en
    
    * Cortex-X2 SDEN v19.0, erratum 3324338
      https://developer.arm.com/documentation/SDEN-1775100/1900/?lang=en
    
    * Cortex-X3 SDEN v14.0, erratum 3324335
      https://developer.arm.com/documentation/SDEN-2055130/1400/?lang=en
    
    * Cortex-X925 SDEN v8.0, erratum 3324334
      https://developer.arm.com/documentation/109108/800/?lang=en
    
    * Neoverse-N2 SDEN v17.0, erratum 3324339
      https://developer.arm.com/documentation/SDEN-1982442/1700/?lang=en
    
    * Neoverse-V2 SDEN v9.0, erratum 3324336
      https://developer.arm.com/documentation/SDEN-2332927/900/?lang=en
    
    Note that due to shared design lineage, some CPUs share the same erratum
    number.
    
    Add these to the existing mitigation under CONFIG_ARM64_ERRATUM_3194386.
    As listing all of the erratum IDs in the runtime description would be
    unwieldy, this is reduced to:
    
            "SSBS not fully self-synchronizing"
    
    ... matching the description of the errata in all of the SDENs.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240603111812.1514101-6-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: fix conflicts and renames ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: errata: Expand speculative SSBS workaround (again) [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:34 2024 +0100

    arm64: errata: Expand speculative SSBS workaround (again)
    
    [ Upstream commit adeec61a4723fd3e39da68db4cc4d924e6d7f641 ]
    
    A number of Arm Ltd CPUs suffer from errata whereby an MSR to the SSBS
    special-purpose register does not affect subsequent speculative
    instructions, permitting speculative store bypassing for a window of
    time.
    
    We worked around this for a number of CPUs in commits:
    
    * 7187bb7d0b5c7dfa ("arm64: errata: Add workaround for Arm errata 3194386 and 3312417")
    * 75b3c43eab594bfb ("arm64: errata: Expand speculative SSBS workaround")
    
    Since then, similar errata have been published for a number of other Arm
    Ltd CPUs, for which the same mitigation is sufficient. This is described
    in their respective Software Developer Errata Notice (SDEN) documents:
    
    * Cortex-A76 (MP052) SDEN v31.0, erratum 3324349
      https://developer.arm.com/documentation/SDEN-885749/3100/
    
    * Cortex-A77 (MP074) SDEN v19.0, erratum 3324348
      https://developer.arm.com/documentation/SDEN-1152370/1900/
    
    * Cortex-A78 (MP102) SDEN v21.0, erratum 3324344
      https://developer.arm.com/documentation/SDEN-1401784/2100/
    
    * Cortex-A78C (MP138) SDEN v16.0, erratum 3324346
      https://developer.arm.com/documentation/SDEN-1707916/1600/
    
    * Cortex-A78C (MP154) SDEN v10.0, erratum 3324347
      https://developer.arm.com/documentation/SDEN-2004089/1000/
    
    * Cortex-A725 (MP190) SDEN v5.0, erratum 3456106
      https://developer.arm.com/documentation/SDEN-2832921/0500/
    
    * Cortex-X1 (MP077) SDEN v21.0, erratum 3324344
      https://developer.arm.com/documentation/SDEN-1401782/2100/
    
    * Cortex-X1C (MP136) SDEN v16.0, erratum 3324346
      https://developer.arm.com/documentation/SDEN-1707914/1600/
    
    * Neoverse-N1 (MP050) SDEN v32.0, erratum 3324349
      https://developer.arm.com/documentation/SDEN-885747/3200/
    
    * Neoverse-V1 (MP076) SDEN v19.0, erratum 3324341
      https://developer.arm.com/documentation/SDEN-1401781/1900/
    
    Note that due to the manner in which Arm develops IP and tracks errata,
    some CPUs share a common erratum number and some CPUs have multiple
    erratum numbers for the same HW issue.
    
    On parts without SB, it is necessary to use ISB for the workaround. The
    spec_bar() macro used in the mitigation will expand to a "DSB SY; ISB"
    sequence in this case, which is sufficient on all affected parts.
    
    Enable the existing mitigation by adding the relevant MIDRs to
    erratum_spec_ssbs_list. The list is sorted alphanumerically (involving
    moving Neoverse-V3 after Neoverse-V2) so that this is easy to audit and
    potentially extend again in future. The Kconfig text is also updated to
    clarify the set of affected parts and the mitigation.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Acked-by: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240801101803.1982459-4-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: fix conflicts in silicon-errata.rst ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: errata: Unify speculative SSBS errata logic [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Aug 9 11:09:30 2024 +0100

    arm64: errata: Unify speculative SSBS errata logic
    
    [ Upstream commit ec768766608092087dfb5c1fc45a16a6f524dee2 ]
    
    Cortex-X4 erratum 3194386 and Neoverse-V3 erratum 3312417 are identical,
    with duplicate Kconfig text and some unsightly ifdeffery. While we try
    to share code behind CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS, having
    separate options results in a fair amount of boilerplate code, and this
    will only get worse as we expand the set of affected CPUs.
    
    To reduce this boilerplate, unify the two behind a common Kconfig
    option. This removes the duplicate text and Kconfig logic, and removes
    the need for the intermediate ARM64_WORKAROUND_SPECULATIVE_SSBS option.
    The set of affected CPUs is described as a list so that this can easily
    be extended.
    
    I've used ARM64_ERRATUM_3194386 (matching the Neoverse-V3 erratum ID) as
    the common option, matching the way we use ARM64_ERRATUM_1319367 to
    cover Cortex-A57 erratum 1319537 and Cortex-A72 erratum 1319367.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240603111812.1514101-5-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: fix conflicts & renames, drop unneeded cpucaps.h ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: dts: imx6qdl-kontron-samx6i: fix board reset [+ + +]
Author: Michael Walle <mwalle@kernel.org>
Date:   Mon Jun 17 11:13:31 2024 +0200

    ARM: dts: imx6qdl-kontron-samx6i: fix board reset
    
    [ Upstream commit b972d6b3b46345023aee56a95df8e2c137aa4ee4 ]
    
    On i.MX6 the board is reset by the watchdog. But in turn to do a
    complete board reset, we have to assert the WDOG_B output which is
    routed also to the CPLD which then do a complete power-cycle of the
    board.
    
    Fixes: 2125212785c9 ("ARM: dts: imx6qdl-kontron-samx6i: add Kontron SMARC SoM Support")
    Signed-off-by: Michael Walle <mwalle@kernel.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx6qdl-kontron-samx6i: fix PCIe reset polarity [+ + +]
Author: Michael Walle <mwalle@kernel.org>
Date:   Mon Jun 17 11:13:38 2024 +0200

    ARM: dts: imx6qdl-kontron-samx6i: fix PCIe reset polarity
    
    [ Upstream commit df35c6e9027cf9affe699e632a48082ab1bbba4c ]
    
    The PCIe reset line is active low. Fix it.
    
    Fixes: 2a51f9dae13d ("ARM: dts: imx6qdl-kontron-samx6i: Add iMX6-based Kontron SMARC-sAMX6i module")
    Signed-off-by: Michael Walle <mwalle@kernel.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx6qdl-kontron-samx6i: fix PHY reset [+ + +]
Author: Michael Walle <mwalle@kernel.org>
Date:   Mon Jun 17 11:13:30 2024 +0200

    ARM: dts: imx6qdl-kontron-samx6i: fix PHY reset
    
    [ Upstream commit edfea889a049abe80f0d55c0365bf60fbade272f ]
    
    The PHY reset line is connected to both the SoC (GPIO1_25) and
    the CPLD. We must not use the GPIO1_25 as it will drive against
    the output buffer of the CPLD. Instead there is another GPIO
    (GPIO2_01), an input to the CPLD, which will tell the CPLD to
    assert the PHY reset line.
    
    Fixes: 2a51f9dae13d ("ARM: dts: imx6qdl-kontron-samx6i: Add iMX6-based Kontron SMARC-sAMX6i module")
    Fixes: 5694eed98cca ("ARM: dts: imx6qdl-kontron-samx6i: move phy reset into phy-node")
    Signed-off-by: Michael Walle <mwalle@kernel.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx6qdl-kontron-samx6i: fix phy-mode [+ + +]
Author: Michael Walle <mwalle@kernel.org>
Date:   Mon Jun 17 11:13:29 2024 +0200

    ARM: dts: imx6qdl-kontron-samx6i: fix phy-mode
    
    commit 0df3c7d7a73d75153090637392c0b73a63cdc24a upstream.
    
    The i.MX6 cannot add any RGMII delays. The PHY has to add both the RX
    and TX delays on the RGMII interface. Fix the interface mode. While at
    it, use the new phy-connection-type property name.
    
    Fixes: 5694eed98cca ("ARM: dts: imx6qdl-kontron-samx6i: move phy reset into phy-node")
    Signed-off-by: Michael Walle <mwalle@kernel.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ARM: dts: imx6qdl-kontron-samx6i: fix SPI0 chip selects [+ + +]
Author: Michael Walle <mwalle@kernel.org>
Date:   Mon Jun 17 11:13:33 2024 +0200

    ARM: dts: imx6qdl-kontron-samx6i: fix SPI0 chip selects
    
    [ Upstream commit 74e1c956a68a65d642447d852e95b3fbb69bebaa ]
    
    There is a comment in the imx6q variant dtsi claiming that these
    modules will have one more chip select than the imx6dl variant.
    This is wrong. Ordinary GPIOs are used for chip selects and both
    variants of the module share the very same PCB and both have this
    GPIO routed to the SPI0_CS1# pin of the SMARC connector.
    
    Fix it by moving the third chip select description to the common dtsi.
    
    Fixes: 2125212785c9 ("ARM: dts: imx6qdl-kontron-samx6i: add Kontron SMARC SoM Support")
    Signed-off-by: Michael Walle <mwalle@kernel.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx6qdl-kontron-samx6i: move phy reset into phy-node [+ + +]
Author: Marco Felsch <m.felsch@pengutronix.de>
Date:   Tue Jul 26 15:05:20 2022 +0200

    ARM: dts: imx6qdl-kontron-samx6i: move phy reset into phy-node
    
    [ Upstream commit 5694eed98cca5c164ebb5b831b65b4c9eee4b2d5 ]
    
    Add ethernet-phy node so we can drop the deprecated fec phy-reset-gpios
    property. The reset-assert-us value is taken from the existing logic
    since the fec driver will add an 1ms assert delay per default if
    phy-reset-gpios is used and phy-reset-duration is not specified.
    
    Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Stable-dep-of: edfea889a049 ("ARM: dts: imx6qdl-kontron-samx6i: fix PHY reset")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: pxa: spitz: use gpio descriptors for audio [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Sep 11 16:43:59 2019 +0200

    ARM: pxa: spitz: use gpio descriptors for audio
    
    [ Upstream commit 726d8c965bae2d7468445d990849e281dca8cbf7 ]
    
    The audio driver should not use a hardwired gpio number
    from the header. Change it to use a lookup table.
    
    Acked-by: Mark Brown <broonie@kernel.org>
    Cc: alsa-devel@alsa-project.org
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Stable-dep-of: 78ab3d352f29 ("ARM: spitz: fix GPIO assignment for backlight")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: spitz: fix GPIO assignment for backlight [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Fri Jun 28 11:08:41 2024 -0700

    ARM: spitz: fix GPIO assignment for backlight
    
    [ Upstream commit 78ab3d352f2982bf3f7e506bfbaba7afee1ed8a9 ]
    
    GPIOs controlling backlight on Spitz and Akita are coming from GPIO
    expanders, not the pxa27xx-gpio block, correct it.
    
    Additionally GPIO lookup tables operate with pin numbers rather than
    legacy GPIO numbers, fix that as well. Use raw numbers instead of legacy
    GPIO names to avoid confusion.
    
    Fixes: ee0c8e494cc3 ("backlight: corgi: Convert to use GPIO descriptors")
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Link: https://lore.kernel.org/r/20240628180852.1738922-2-dmitry.torokhov@gmail.com
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: codecs: wcd938x-sdw: Correct Soundwire ports mask [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Fri Jul 26 16:10:42 2024 +0200

    ASoC: codecs: wcd938x-sdw: Correct Soundwire ports mask
    
    [ Upstream commit 3f6fb03dae9c7dfba7670858d29e03c8faaa89fe ]
    
    Device has up to WCD938X_MAX_SWR_PORTS number of ports and the array
    assigned to prop.src_dpn_prop and prop.sink_dpn_prop has
    0..WCD938X_MAX_SWR_PORTS-1 elements.  On the other hand, GENMASK(high,
    low) creates an inclusive mask between <high, low>, so we need the mask
    from 0 up to WCD938X_MAX_SWR_PORTS-1.
    
    Theoretically, too wide mask could cause an out of bounds read in
    sdw_get_slave_dpn_prop() in stream.c, however only in the case of buggy
    driver, e.g. adding incorrect number of ports via
    sdw_stream_add_slave().
    
    Fixes: 16572522aece ("ASoC: codecs: wcd938x-sdw: add SoundWire driver")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://patch.msgid.link/20240726-asoc-wcd-wsa-swr-ports-genmask-v1-2-d4d7a8b56f05@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: codecs: wsa881x: Correct Soundwire ports mask [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Fri Jul 26 16:10:44 2024 +0200

    ASoC: codecs: wsa881x: Correct Soundwire ports mask
    
    [ Upstream commit eb11c3bb64ad0a05aeacdb01039863aa2aa3614b ]
    
    Device has up to WSA881X_MAX_SWR_PORTS number of ports and the array
    assigned to prop.sink_dpn_prop has 0..WSA881X_MAX_SWR_PORTS-1 elements.
    On the other hand, GENMASK(high, low) creates an inclusive mask between
    <high, low>, so we need the mask from 0 up to WSA881X_MAX_SWR_PORTS-1.
    
    Theoretically, too wide mask could cause an out of bounds read in
    sdw_get_slave_dpn_prop() in stream.c, however only in the case of buggy
    driver, e.g. adding incorrect number of ports via
    sdw_stream_add_slave().
    
    Fixes: a0aab9e1404a ("ASoC: codecs: add wsa881x amplifier support")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://patch.msgid.link/20240726-asoc-wcd-wsa-swr-ports-genmask-v1-4-d4d7a8b56f05@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: Intel: use soc_intel_is_byt_cr() only when IOSF_MBI is reachable [+ + +]
Author: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date:   Mon Jul 22 10:30:02 2024 +0200

    ASoC: Intel: use soc_intel_is_byt_cr() only when IOSF_MBI is reachable
    
    [ Upstream commit 9931f7d5d251882a147cc5811060097df43e79f5 ]
    
    the Intel kbuild bot reports a link failure when IOSF_MBI is built-in
    but the Merrifield driver is configured as a module. The
    soc-intel-quirks.h is included for Merrifield platforms, but IOSF_MBI
    is not selected for that platform.
    
    ld.lld: error: undefined symbol: iosf_mbi_read
    >>> referenced by atom.c
    >>>               sound/soc/sof/intel/atom.o:(atom_machine_select) in archive vmlinux.a
    
    This patch forces the use of the fallback static inline when IOSF_MBI is not reachable.
    
    Fixes: 536cfd2f375d ("ASoC: Intel: use common helpers to detect CPUs")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202407160704.zpdhJ8da-lkp@intel.com/
    Suggested-by: Takashi Iwai <tiwai@suse.de>
    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/20240722083002.10800-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: max98088: Check for clk_prepare_enable() error [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Fri Jun 28 16:05:34 2024 +0800

    ASoC: max98088: Check for clk_prepare_enable() error
    
    [ Upstream commit 1a70579723fde3624a72dfea6e79e55be6e36659 ]
    
    clk_prepare_enable() may fail, so we should better check its return
    value and propagate it in the case of error.
    
    Fixes: 62a7fc32a628 ("ASoC: max98088: Add master clock handling")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Link: https://patch.msgid.link/20240628080534.843815-1-nichen@iscas.ac.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: meson: axg-fifo: fix irq scheduling issue with PREEMPT_RT [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Wed Aug 7 18:27:03 2024 +0200

    ASoC: meson: axg-fifo: fix irq scheduling issue with PREEMPT_RT
    
    [ Upstream commit 5003d0ce5c7da3a02c0aff771f516f99731e7390 ]
    
    With PREEMPT_RT enabled a spinlock_t becomes a sleeping lock.
    
    This is usually not a problem with spinlocks used in IRQ context since
    IRQ handlers get threaded. However, if IRQF_ONESHOT is set, the primary
    handler won't be force-threaded and runs always in hardirq context. This is
    a problem because spinlock_t requires a preemptible context on PREEMPT_RT.
    
    In this particular instance, regmap mmio uses spinlock_t to protect the
    register access and IRQF_ONESHOT is set on the IRQ. In this case, it is
    actually better to do everything in threaded handler and it solves the
    problem with PREEMPT_RT.
    
    Reported-by: Arseniy Krasnov <avkrasnov@salutedevices.com>
    Closes: https://lore.kernel.org/linux-amlogic/20240729131652.3012327-1-avkrasnov@salutedevices.com
    Suggested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Fixes: b11d26660dff ("ASoC: meson: axg-fifo: use threaded irq to check periods")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://patch.msgid.link/20240807162705.4024136-1-jbrunet@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error [+ + +]
Author: Igor Pylypiv <ipylypiv@google.com>
Date:   Tue Jul 2 02:47:31 2024 +0000

    ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error
    
    commit 28ab9769117ca944cb6eb537af5599aa436287a4 upstream.
    
    SAT-5 revision 8 specification removed the text about the ANSI INCITS
    431-2007 compliance which was requiring SCSI/ATA Translation (SAT) to
    return descriptor format sense data for the ATA PASS-THROUGH commands
    regardless of the setting of the D_SENSE bit.
    
    Let's honor the D_SENSE bit for ATA PASS-THROUGH commands while
    generating the "ATA PASS-THROUGH INFORMATION AVAILABLE" sense data.
    
    SAT-5 revision 7
    ================
    
    12.2.2.8 Fixed format sense data
    
    Table 212 shows the fields returned in the fixed format sense data
    (see SPC-5) for ATA PASS-THROUGH commands. SATLs compliant with ANSI
    INCITS 431-2007, SCSI/ATA Translation (SAT) return descriptor format
    sense data for the ATA PASS-THROUGH commands regardless of the setting
    of the D_SENSE bit.
    
    SAT-5 revision 8
    ================
    
    12.2.2.8 Fixed format sense data
    
    Table 211 shows the fields returned in the fixed format sense data
    (see SPC-5) for ATA PASS-THROUGH commands.
    
    Cc: stable@vger.kernel.org # 4.19+
    Reported-by: Niklas Cassel <cassel@kernel.org>
    Closes: https://lore.kernel.org/linux-ide/Zn1WUhmLglM4iais@ryzen.lan
    Reviewed-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Link: https://lore.kernel.org/r/20240702024735.1152293-4-ipylypiv@google.com
    Signed-off-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binder: fix hang of unregistered readers [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Thu Jul 11 20:14:51 2024 +0000

    binder: fix hang of unregistered readers
    
    commit 31643d84b8c3d9c846aa0e20bc033e46c68c7e7d upstream.
    
    With the introduction of binder_available_for_proc_work_ilocked() in
    commit 1b77e9dcc3da ("ANDROID: binder: remove proc waitqueue") a binder
    thread can only "wait_for_proc_work" after its thread->looper has been
    marked as BINDER_LOOPER_STATE_{ENTERED|REGISTERED}.
    
    This means an unregistered reader risks waiting indefinitely for work
    since it never gets added to the proc->waiting_threads. If there are no
    further references to its waitqueue either the task will hang. The same
    applies to readers using the (e)poll interface.
    
    I couldn't find the rationale behind this restriction. So this patch
    restores the previous behavior of allowing unregistered threads to
    "wait_for_proc_work". Note that an error message for this scenario,
    which had previously become unreachable, is now re-enabled.
    
    Fixes: 1b77e9dcc3da ("ANDROID: binder: remove proc waitqueue")
    Cc: stable@vger.kernel.org
    Cc: Martijn Coenen <maco@google.com>
    Cc: Arve Hjønnevåg <arve@google.com>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Link: https://lore.kernel.org/r/20240711201452.2017543-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binfmt_flat: Fix corruption when not offsetting data start [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Wed Aug 7 12:51:23 2024 -0700

    binfmt_flat: Fix corruption when not offsetting data start
    
    [ Upstream commit 3eb3cd5992f7a0c37edc8d05b4c38c98758d8671 ]
    
    Commit 04d82a6d0881 ("binfmt_flat: allow not offsetting data start")
    introduced a RISC-V specific variant of the FLAT format which does
    not allocate any space for the (obsolete) array of shared library
    pointers. However, it did not disable the code which initializes the
    array, resulting in the corruption of sizeof(long) bytes before the DATA
    segment, generally the end of the TEXT segment.
    
    Introduce MAX_SHARED_LIBS_UPDATE which depends on the state of
    CONFIG_BINFMT_FLAT_NO_DATA_START_OFFSET to guard the initialization of
    the shared library pointer region so that it will only be initialized
    if space is reserved for it.
    
    Fixes: 04d82a6d0881 ("binfmt_flat: allow not offsetting data start")
    Co-developed-by: Stefan O'Rear <sorear@fastmail.com>
    Signed-off-by: Stefan O'Rear <sorear@fastmail.com>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Acked-by: Greg Ungerer <gerg@linux-m68k.org>
    Link: https://lore.kernel.org/r/20240807195119.it.782-kees@kernel.org
    Signed-off-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
block: cleanup bio_integrity_prep [+ + +]
Author: Jinyoung Choi <j-young.choi@samsung.com>
Date:   Tue Jul 25 14:18:39 2023 +0900

    block: cleanup bio_integrity_prep
    
    [ Upstream commit 51d74ec9b62f5813767a60226acaf943e26e7d7a ]
    
    If a problem occurs in the process of creating an integrity payload, the
    status of bio is always BLK_STS_RESOURCE.
    
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Jinyoung Choi <j-young.choi@samsung.com>
    Reviewed-by: "Martin K. Petersen" <martin.petersen@oracle.com>
    Link: https://lore.kernel.org/r/20230725051839epcms2p8e4d20ad6c51326ad032e8406f59d0aaa@epcms2p8
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: 899ee2c3829c ("block: initialize integrity buffer to zero before writing it to media")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

block: initialize integrity buffer to zero before writing it to media [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Thu Jun 13 10:48:11 2024 +0200

    block: initialize integrity buffer to zero before writing it to media
    
    [ Upstream commit 899ee2c3829c5ac14bfc7d3c4a5846c0b709b78f ]
    
    Metadata added by bio_integrity_prep is using plain kmalloc, which leads
    to random kernel memory being written media.  For PI metadata this is
    limited to the app tag that isn't used by kernel generated metadata,
    but for non-PI metadata the entire buffer leaks kernel memory.
    
    Fix this by adding the __GFP_ZERO flag to allocations for writes.
    
    Fixes: 7ba1ba12eeef ("block: Block layer data integrity support")
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: Kanchan Joshi <joshi.k@samsung.com>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Link: https://lore.kernel.org/r/20240613084839.1044015-2-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

block: refactor to use helper [+ + +]
Author: Nitesh Shetty <nj.shetty@samsung.com>
Date:   Wed Jul 19 17:46:08 2023 +0530

    block: refactor to use helper
    
    [ Upstream commit 8f63fef5867fb5e8c29d9c14b6d739bfc1869d32 ]
    
    Reduce some code by making use of bio_integrity_bytes().
    
    Signed-off-by: Nitesh Shetty <nj.shetty@samsung.com>
    Reviewed-by: "Martin K. Petersen" <martin.petersen@oracle.com>
    Link: https://lore.kernel.org/r/20230719121608.32105-1-nj.shetty@samsung.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: 899ee2c3829c ("block: initialize integrity buffer to zero before writing it to media")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: btusb: Add Realtek RTL8852BE support ID 0x13d3:0x3591 [+ + +]
Author: WangYuli <wangyuli@uniontech.com>
Date:   Sat Jun 22 12:09:59 2024 +0800

    Bluetooth: btusb: Add Realtek RTL8852BE support ID 0x13d3:0x3591
    
    commit 473a89b4ed7fd52a419340f7c540d5c8fc96fc75 upstream.
    
    Add the support ID(0x13d3, 0x3591) to usb_device_id table for
    Realtek RTL8852BE.
    
    The device table is as follows:
    
    T:  Bus=01 Lev=02 Prnt=03 Port=00 Cnt=01 Dev#=  5 Spd=12   MxCh= 0
    D:  Ver= 1.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=13d3 ProdID=3591 Rev= 0.00
    S:  Manufacturer=Realtek
    S:  Product=Bluetooth Radio
    S:  SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: WangYuli <wangyuli@uniontech.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Erpeng Xu <xuerpeng@uniontech.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: btusb: Add RTL8852BE device 0489:e125 to device tables [+ + +]
Author: Hilda Wu <hildawu@realtek.com>
Date:   Mon Jun 17 17:05:18 2024 +0800

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

Bluetooth: l2cap: always unlock channel in l2cap_conless_channel() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Wed Jul 31 12:19:36 2024 +0300

    Bluetooth: l2cap: always unlock channel in l2cap_conless_channel()
    
    [ Upstream commit c531e63871c0b50c8c4e62c048535a08886fba3e ]
    
    Add missing call to 'l2cap_chan_unlock()' on receive error handling
    path in 'l2cap_conless_channel()'.
    
    Fixes: a24cce144b98 ("Bluetooth: Fix reference counting of global L2CAP channels")
    Reported-by: syzbot+45ac74737e866894acb0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=45ac74737e866894acb0
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bna: adjust 'name' buf size of bna_tcb and bna_ccb structures [+ + +]
Author: Alexey Kodanev <aleksei.kodanev@bell-sw.com>
Date:   Mon Jul 8 10:50:08 2024 +0000

    bna: adjust 'name' buf size of bna_tcb and bna_ccb structures
    
    [ Upstream commit c9741a03dc8e491e57b95fba0058ab46b7e506da ]
    
    To have enough space to write all possible sprintf() args. Currently
    'name' size is 16, but the first '%s' specifier may already need at
    least 16 characters, since 'bnad->netdev->name' is used there.
    
    For '%d' specifiers, assume that they require:
     * 1 char for 'tx_id + tx_info->tcb[i]->id' sum, BNAD_MAX_TXQ_PER_TX is 8
     * 2 chars for 'rx_id + rx_info->rx_ctrl[i].ccb->id', BNAD_MAX_RXP_PER_RX
       is 16
    
    And replace sprintf with snprintf.
    
    Detected using the static analysis tool - Svace.
    
    Fixes: 8b230ed8ec96 ("bna: Brocade 10Gb Ethernet device driver")
    Signed-off-by: Alexey Kodanev <aleksei.kodanev@bell-sw.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>

 
bnxt_re: Fix imm_data endianness [+ + +]
Author: Jack Wang <jinpu.wang@ionos.com>
Date:   Wed Jul 10 14:21:02 2024 +0200

    bnxt_re: Fix imm_data endianness
    
    [ Upstream commit 95b087f87b780daafad1dbb2c84e81b729d5d33f ]
    
    When map a device between servers with MLX and BCM RoCE nics, RTRS
    server complain about unknown imm type, and can't map the device,
    
    After more debug, it seems bnxt_re wrongly handle the
    imm_data, this patch fixed the compat issue with MLX for us.
    
    In off list discussion, Selvin confirmed HW is working in little endian format
    and all data needs to be converted to LE while providing.
    
    This patch fix the endianness for imm_data
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
    Link: https://lore.kernel.org/r/20240710122102.37569-1-jinpu.wang@ionos.com
    Acked-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, events: Use prog to emit ksymbol event for main program [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Sun Jul 14 14:55:33 2024 +0800

    bpf, events: Use prog to emit ksymbol event for main program
    
    [ Upstream commit 0be9ae5486cd9e767138c13638820d240713f5f1 ]
    
    Since commit 0108a4e9f358 ("bpf: ensure main program has an extable"),
    prog->aux->func[0]->kallsyms is left as uninitialized. For BPF programs
    with subprogs, the symbol for the main program is missing just as shown
    in the output of perf script below:
    
     ffffffff81284b69 qp_trie_lookup_elem+0xb9 ([kernel.kallsyms])
     ffffffffc0011125 bpf_prog_a4a0eb0651e6af8b_lookup_qp_trie+0x5d (bpf...)
     ffffffff8127bc2b bpf_for_each_array_elem+0x7b ([kernel.kallsyms])
     ffffffffc00110a1 +0x25 ()
     ffffffff8121a89a trace_call_bpf+0xca ([kernel.kallsyms])
    
    Fix it by always using prog instead prog->aux->func[0] to emit ksymbol
    event for the main program. After the fix, the output of perf script
    will be correct:
    
     ffffffff81284b96 qp_trie_lookup_elem+0xe6 ([kernel.kallsyms])
     ffffffffc001382d bpf_prog_a4a0eb0651e6af8b_lookup_qp_trie+0x5d (bpf...)
     ffffffff8127bc2b bpf_for_each_array_elem+0x7b ([kernel.kallsyms])
     ffffffffc0013779 bpf_prog_245c55ab25cfcf40_qp_trie_lookup+0x25 (bpf...)
     ffffffff8121a89a trace_call_bpf+0xca ([kernel.kallsyms])
    
    Fixes: 0108a4e9f358 ("bpf: ensure main program has an extable")
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Yonghong Song <yonghong.song@linux.dev>
    Reviewed-by: Krister Johansen <kjlx@templeofstupid.com>
    Reviewed-by: Jiri Olsa <jolsa@kernel.org>
    Link: https://lore.kernel.org/bpf/20240714065533.1112616-1-houtao@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: annotate BTF show functions with __printf [+ + +]
Author: Alan Maguire <alan.maguire@oracle.com>
Date:   Thu Jul 11 19:23:21 2024 +0100

    bpf: annotate BTF show functions with __printf
    
    [ Upstream commit b3470da314fd8018ee237e382000c4154a942420 ]
    
    -Werror=suggest-attribute=format warns about two functions
    in kernel/bpf/btf.c [1]; add __printf() annotations to silence
    these warnings since for CONFIG_WERROR=y they will trigger
    build failures.
    
    [1] https://lore.kernel.org/bpf/a8b20c72-6631-4404-9e1f-0410642d7d20@gmail.com/
    
    Fixes: 31d0bc81637d ("bpf: Move to generic BTF show support, apply it to seq files/strings")
    Reported-by: Mirsad Todorovac <mtodorovac69@gmail.com>
    Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
    Tested-by: Mirsad Todorovac <mtodorovac69@yahoo.com>
    Link: https://lore.kernel.org/r/20240711182321.963667-1-alan.maguire@oracle.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Eliminate remaining "make W=1" warnings in kernel/bpf/btf.o [+ + +]
Author: Alan Maguire <alan.maguire@oracle.com>
Date:   Fri Jul 12 10:28:59 2024 +0100

    bpf: Eliminate remaining "make W=1" warnings in kernel/bpf/btf.o
    
    [ Upstream commit 2454075f8e2915cebbe52a1195631bc7efe2b7e1 ]
    
    As reported by Mirsad [1] we still see format warnings in kernel/bpf/btf.o
    at W=1 warning level:
    
      CC      kernel/bpf/btf.o
    ./kernel/bpf/btf.c: In function ‘btf_type_seq_show_flags’:
    ./kernel/bpf/btf.c:7553:21: warning: assignment left-hand side might be a candidate for a format attribute [-Wsuggest-attribute=format]
     7553 |         sseq.showfn = btf_seq_show;
          |                     ^
    ./kernel/bpf/btf.c: In function ‘btf_type_snprintf_show’:
    ./kernel/bpf/btf.c:7604:31: warning: assignment left-hand side might be a candidate for a format attribute [-Wsuggest-attribute=format]
     7604 |         ssnprintf.show.showfn = btf_snprintf_show;
          |                               ^
    
    Combined with CONFIG_WERROR=y these can halt the build.
    
    The fix (annotating the structure field with __printf())
    suggested by Mirsad resolves these. Apologies I missed this last time.
    No other W=1 warnings were observed in kernel/bpf after this fix.
    
    [1] https://lore.kernel.org/bpf/92c9d047-f058-400c-9c7d-81d4dc1ef71b@gmail.com/
    
    Fixes: b3470da314fd ("bpf: annotate BTF show functions with __printf")
    Reported-by: Mirsad Todorovac <mtodorovac69@gmail.com>
    Suggested-by: Mirsad Todorovac <mtodorovac69@gmail.com>
    Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20240712092859.1390960-1-alan.maguire@oracle.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix a segment issue when downgrading gso_size [+ + +]
Author: Fred Li <dracodingfly@gmail.com>
Date:   Fri Jul 19 10:46:53 2024 +0800

    bpf: Fix a segment issue when downgrading gso_size
    
    [ Upstream commit fa5ef655615a01533035c6139248c5b33aa27028 ]
    
    Linearize the skb when downgrading gso_size because it may trigger a
    BUG_ON() later when the skb is segmented as described in [1,2].
    
    Fixes: 2be7e212d5419 ("bpf: add bpf_skb_adjust_room helper")
    Signed-off-by: Fred Li <dracodingfly@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/all/20240626065555.35460-2-dracodingfly@gmail.com [1]
    Link: https://lore.kernel.org/all/668d5cf1ec330_1c18c32947@willemb.c.googlers.com.notmuch [2]
    Link: https://lore.kernel.org/bpf/20240719024653.77006-1-dracodingfly@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: kprobe: remove unused declaring of bpf_kprobe_override [+ + +]
Author: Menglong Dong <menglong8.dong@gmail.com>
Date:   Mon Aug 5 14:01:21 2024 +0900

    bpf: kprobe: remove unused declaring of bpf_kprobe_override
    
    [ Upstream commit 0e8b53979ac86eddb3fd76264025a70071a25574 ]
    
    After the commit 66665ad2f102 ("tracing/kprobe: bpf: Compare instruction
    pointer with original one"), "bpf_kprobe_override" is not used anywhere
    anymore, and we can remove it now.
    
    Link: https://lore.kernel.org/all/20240710085939.11520-1-dongml2@chinatelecom.cn/
    
    Fixes: 66665ad2f102 ("tracing/kprobe: bpf: Compare instruction pointer with original one")
    Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: fix bitmap leak when loading free space cache on duplicate entry [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Wed Jul 3 15:40:59 2024 +0100

    btrfs: fix bitmap leak when loading free space cache on duplicate entry
    
    [ Upstream commit 320d8dc612660da84c3b70a28658bb38069e5a9a ]
    
    If we failed to link a free space entry because there's already a
    conflicting entry for the same offset, we free the free space entry but
    we don't free the associated bitmap that we had just allocated before.
    Fix that by freeing the bitmap before freeing the entry.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: fix corruption after buffer fault in during direct IO append write [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Jul 26 11:12:52 2024 +0100

    btrfs: fix corruption after buffer fault in during direct IO append write
    
    commit 939b656bc8ab203fdbde26ccac22bcb7f0985be5 upstream.
    
    During an append (O_APPEND write flag) direct IO write if the input buffer
    was not previously faulted in, we can corrupt the file in a way that the
    final size is unexpected and it includes an unexpected hole.
    
    The problem happens like this:
    
    1) We have an empty file, with size 0, for example;
    
    2) We do an O_APPEND direct IO with a length of 4096 bytes and the input
       buffer is not currently faulted in;
    
    3) We enter btrfs_direct_write(), lock the inode and call
       generic_write_checks(), which calls generic_write_checks_count(), and
       that function sets the iocb position to 0 with the following code:
    
            if (iocb->ki_flags & IOCB_APPEND)
                    iocb->ki_pos = i_size_read(inode);
    
    4) We call btrfs_dio_write() and enter into iomap, which will end up
       calling btrfs_dio_iomap_begin() and that calls
       btrfs_get_blocks_direct_write(), where we update the i_size of the
       inode to 4096 bytes;
    
    5) After btrfs_dio_iomap_begin() returns, iomap will attempt to access
       the page of the write input buffer (at iomap_dio_bio_iter(), with a
       call to bio_iov_iter_get_pages()) and fail with -EFAULT, which gets
       returned to btrfs at btrfs_direct_write() via btrfs_dio_write();
    
    6) At btrfs_direct_write() we get the -EFAULT error, unlock the inode,
       fault in the write buffer and then goto to the label 'relock';
    
    7) We lock again the inode, do all the necessary checks again and call
       again generic_write_checks(), which calls generic_write_checks_count()
       again, and there we set the iocb's position to 4K, which is the current
       i_size of the inode, with the following code pointed above:
    
            if (iocb->ki_flags & IOCB_APPEND)
                    iocb->ki_pos = i_size_read(inode);
    
    8) Then we go again to btrfs_dio_write() and enter iomap and the write
       succeeds, but it wrote to the file range [4K, 8K), leaving a hole in
       the [0, 4K) range and an i_size of 8K, which goes against the
       expectations of having the data written to the range [0, 4K) and get an
       i_size of 4K.
    
    Fix this by not unlocking the inode before faulting in the input buffer,
    in case we get -EFAULT or an incomplete write, and not jumping to the
    'relock' label after faulting in the buffer - instead jump to a location
    immediately before calling iomap, skipping all the write checks and
    relocking. This solves this problem and it's fine even in case the input
    buffer is memory mapped to the same file range, since only holding the
    range locked in the inode's io tree can cause a deadlock, it's safe to
    keep the inode lock (VFS lock), as was fixed and described in commit
    51bd9563b678 ("btrfs: fix deadlock due to page faults during direct IO
    reads and writes").
    
    A sample reproducer provided by a reporter is the following:
    
       $ cat test.c
       #ifndef _GNU_SOURCE
       #define _GNU_SOURCE
       #endif
    
       #include <fcntl.h>
       #include <stdio.h>
       #include <sys/mman.h>
       #include <sys/stat.h>
       #include <unistd.h>
    
       int main(int argc, char *argv[])
       {
           if (argc < 2) {
               fprintf(stderr, "Usage: %s <test file>\n", argv[0]);
               return 1;
           }
    
           int fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC | O_DIRECT |
                         O_APPEND, 0644);
           if (fd < 0) {
               perror("creating test file");
               return 1;
           }
    
           char *buf = mmap(NULL, 4096, PROT_READ,
                            MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
           ssize_t ret = write(fd, buf, 4096);
           if (ret < 0) {
               perror("pwritev2");
               return 1;
           }
    
           struct stat stbuf;
           ret = fstat(fd, &stbuf);
           if (ret < 0) {
               perror("stat");
               return 1;
           }
    
           printf("size: %llu\n", (unsigned long long)stbuf.st_size);
           return stbuf.st_size == 4096 ? 0 : 1;
       }
    
    A test case for fstests will be sent soon.
    
    Reported-by: Hanna Czenczek <hreitz@redhat.com>
    Link: https://lore.kernel.org/linux-btrfs/0b841d46-12fe-4e64-9abb-871d8d0de271@redhat.com/
    Fixes: 8184620ae212 ("btrfs: fix lost file sync on direct IO write with nowait and dsync iocb")
    CC: stable@vger.kernel.org # 6.1+
    Tested-by: Hanna Czenczek <hreitz@redhat.com>
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix double inode unlock for direct IO sync writes [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Aug 2 09:38:51 2024 +0100

    btrfs: fix double inode unlock for direct IO sync writes
    
    commit e0391e92f9ab4fb3dbdeb139c967dcfa7ac4b115 upstream.
    
    If we do a direct IO sync write, at btrfs_sync_file(), and we need to skip
    inode logging or we get an error starting a transaction or an error when
    flushing delalloc, we end up unlocking the inode when we shouldn't under
    the 'out_release_extents' label, and then unlock it again at
    btrfs_direct_write().
    
    Fix that by checking if we have to skip inode unlocking under that label.
    
    Reported-by: syzbot+7dbbb74af6291b5a5a8b@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/linux-btrfs/000000000000dfd631061eaeb4bc@google.com/
    Fixes: 939b656bc8ab ("btrfs: fix corruption after buffer fault in during direct IO append write")
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: fix incorrect kmalloc size of pagevec mempool [+ + +]
Author: ethanwu <ethanwu@synology.com>
Date:   Thu Jul 11 14:47:56 2024 +0800

    ceph: fix incorrect kmalloc size of pagevec mempool
    
    [ Upstream commit 03230edb0bd831662a7c08b6fef66b2a9a817774 ]
    
    The kmalloc size of pagevec mempool is incorrectly calculated.
    It misses the size of page pointer and only accounts the number for the array.
    
    Fixes: a0102bda5bc0 ("ceph: move sb->wb_pagevec_pool to be a global mempool")
    Signed-off-by: ethanwu <ethanwu@synology.com>
    Reviewed-by: Xiubo Li <xiubli@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
char: tpm: Fix possible memory leak in tpm_bios_measurements_open() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Thu Jun 27 15:31:09 2024 +0900

    char: tpm: Fix possible memory leak in tpm_bios_measurements_open()
    
    commit 5d8e2971e817bb64225fc0b6327a78752f58a9aa upstream.
    
    In tpm_bios_measurements_open(), get_device() is called on the device
    embedded in struct tpm_chip. In the error path, however, put_device() is
    not called. This results in a reference count leak, which prevents the
    device from being properly released. This commit makes sure to call
    put_device() when the seq_open() call fails.
    
    Cc: stable@vger.kernel.org # +v4.18
    Fixes: 9b01b5356629 ("tpm: Move shared eventlog functions to common.c")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: davinci: da8xx-cfgchip: Initialize clk_init_data before use [+ + +]
Author: Bastien Curutchet <bastien.curutchet@bootlin.com>
Date:   Thu Jul 18 13:55:34 2024 +0200

    clk: davinci: da8xx-cfgchip: Initialize clk_init_data before use
    
    commit a83b22754e351f13fb46596c85f667dc33da71ec upstream.
    
    The flag attribute of the struct clk_init_data isn't initialized before
    the devm_clk_hw_register() call. This can lead to unexpected behavior
    during registration.
    
    Initialize the entire clk_init_data to zero at declaration.
    
    Cc: stable@vger.kernel.org
    Fixes: 58e1e2d2cd89 ("clk: davinci: cfgchip: Add TI DA8XX USB PHY clocks")
    Signed-off-by: Bastien Curutchet <bastien.curutchet@bootlin.com>
    Reviewed-by: David Lechner <david@lechnology.com>
    Link: https://lore.kernel.org/r/20240718115534.41513-1-bastien.curutchet@bootlin.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: qcom: branch: Add helper functions for setting retain bits [+ + +]
Author: Konrad Dybcio <konrad.dybcio@linaro.org>
Date:   Wed Feb 8 10:13:31 2023 +0100

    clk: qcom: branch: Add helper functions for setting retain bits
    
    [ Upstream commit b594e6f6605311785171b8d4600fe96e35625530 ]
    
    Most Qualcomm branch clocks come with a pretty usual set of bits that
    can enable memory retention by means of not turning off parts of the
    memory logic. Add them to the common header file and introduce helper
    functions for setting them instead of using magic writes.
    
    Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20230208091340.124641-2-konrad.dybcio@linaro.org
    Stable-dep-of: f38467b5a920 ("clk: qcom: gcc-sc7280: Update force mem core bit for UFS ICE clock")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: gcc-sc7280: Update force mem core bit for UFS ICE clock [+ + +]
Author: Taniya Das <quic_tdas@quicinc.com>
Date:   Fri May 31 15:21:41 2024 +0530

    clk: qcom: gcc-sc7280: Update force mem core bit for UFS ICE clock
    
    [ Upstream commit f38467b5a920be1473710428a93c4e54b6f8a0c1 ]
    
    Update the force mem core bit for UFS ICE clock to force the core on signal
    to remain active during halt state of the clk. When retention bit of the
    clock is set the memories of the subsystem will retain the logic across
    power states.
    
    Fixes: a3cc092196ef ("clk: qcom: Add Global Clock controller (GCC) driver for SC7280")
    Signed-off-by: Taniya Das <quic_tdas@quicinc.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20240531095142.9688-3-quic_tdas@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clocksource/drivers/sh_cmt: Address race condition for clock events [+ + +]
Author: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Date:   Tue Jul 2 21:02:30 2024 +0200

    clocksource/drivers/sh_cmt: Address race condition for clock events
    
    [ Upstream commit db19d3aa77612983a02bd223b3f273f896b243cf ]
    
    There is a race condition in the CMT interrupt handler. In the interrupt
    handler the driver sets a driver private flag, FLAG_IRQCONTEXT. This
    flag is used to indicate any call to set_next_event() should not be
    directly propagated to the device, but instead cached. This is done as
    the interrupt handler itself reprograms the device when needed before it
    completes and this avoids this operation to take place twice.
    
    It is unclear why this design was chosen, my suspicion is to allow the
    struct clock_event_device.event_handler callback, which is called while
    the FLAG_IRQCONTEXT is set, can update the next event without having to
    write to the device twice.
    
    Unfortunately there is a race between when the FLAG_IRQCONTEXT flag is
    set and later cleared where the interrupt handler have already started to
    write the next event to the device. If set_next_event() is called in
    this window the value is only cached in the driver but not written. This
    leads to the board to misbehave, or worse lockup and produce a splat.
    
       rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
       rcu:     0-...!: (0 ticks this GP) idle=f5e0/0/0x0 softirq=519/519 fqs=0 (false positive?)
       rcu:     (detected by 1, t=6502 jiffies, g=-595, q=77 ncpus=2)
       Sending NMI from CPU 1 to CPUs 0:
       NMI backtrace for cpu 0
       CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.10.0-rc5-arm64-renesas-00019-g74a6f86eaf1c-dirty #20
       Hardware name: Renesas Salvator-X 2nd version board based on r8a77965 (DT)
       pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
       pc : tick_check_broadcast_expired+0xc/0x40
       lr : cpu_idle_poll.isra.0+0x8c/0x168
       sp : ffff800081c63d70
       x29: ffff800081c63d70 x28: 00000000580000c8 x27: 00000000bfee5610
       x26: 0000000000000027 x25: 0000000000000000 x24: 0000000000000000
       x23: ffff00007fbb9100 x22: ffff8000818f1008 x21: ffff8000800ef07c
       x20: ffff800081c79ec0 x19: ffff800081c70c28 x18: 0000000000000000
       x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffffc2c717d8
       x14: 0000000000000000 x13: ffff000009c18080 x12: ffff8000825f7fc0
       x11: 0000000000000000 x10: ffff8000818f3cd4 x9 : 0000000000000028
       x8 : ffff800081c79ec0 x7 : ffff800081c73000 x6 : 0000000000000000
       x5 : 0000000000000000 x4 : ffff7ffffe286000 x3 : 0000000000000000
       x2 : ffff7ffffe286000 x1 : ffff800082972900 x0 : ffff8000818f1008
       Call trace:
        tick_check_broadcast_expired+0xc/0x40
        do_idle+0x9c/0x280
        cpu_startup_entry+0x34/0x40
        kernel_init+0x0/0x11c
        do_one_initcall+0x0/0x260
        __primary_switched+0x80/0x88
       rcu: rcu_preempt kthread timer wakeup didn't happen for 6501 jiffies! g-595 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402
       rcu:     Possible timer handling issue on cpu=0 timer-softirq=262
       rcu: rcu_preempt kthread starved for 6502 jiffies! g-595 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402 ->cpu=0
       rcu:     Unless rcu_preempt kthread gets sufficient CPU time, OOM is now expected behavior.
       rcu: RCU grace-period kthread stack dump:
       task:rcu_preempt     state:I stack:0     pid:15    tgid:15    ppid:2      flags:0x00000008
       Call trace:
        __switch_to+0xbc/0x100
        __schedule+0x358/0xbe0
        schedule+0x48/0x148
        schedule_timeout+0xc4/0x138
        rcu_gp_fqs_loop+0x12c/0x764
        rcu_gp_kthread+0x208/0x298
        kthread+0x10c/0x110
        ret_from_fork+0x10/0x20
    
    The design have been part of the driver since it was first merged in
    early 2009. It becomes increasingly harder to trigger the issue the
    older kernel version one tries. It only takes a few boots on v6.10-rc5,
    while hundreds of boots are needed to trigger it on v5.10.
    
    Close the race condition by using the CMT channel lock for the two
    competing sections. The channel lock was added to the driver after its
    initial design.
    
    Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Link: https://lore.kernel.org/r/20240702190230.3825292-1-niklas.soderlund+renesas@ragnatech.se
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clocksource: Fix brown-bag boolean thinko in cs_watchdog_read() [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Fri Aug 2 08:46:15 2024 -0700

    clocksource: Fix brown-bag boolean thinko in cs_watchdog_read()
    
    [ Upstream commit f2655ac2c06a15558e51ed6529de280e1553c86e ]
    
    The current "nretries > 1 || nretries >= max_retries" check in
    cs_watchdog_read() will always evaluate to true, and thus pr_warn(), if
    nretries is greater than 1.  The intent is instead to never warn on the
    first try, but otherwise warn if the successful retry was the last retry.
    
    Therefore, change that "||" to "&&".
    
    Fixes: db3a34e17433 ("clocksource: Retry clock read if long delays detected")
    Reported-by: Borislav Petkov <bp@alien8.de>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20240802154618.4149953-2-paulmck@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clocksource: Reduce the default clocksource_watchdog() retries to 2 [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Thu Nov 18 14:14:37 2021 -0500

    clocksource: Reduce the default clocksource_watchdog() retries to 2
    
    [ Upstream commit 1a5620671a1b6fd9cc08761677d050f1702f910c ]
    
    With the previous patch, there is an extra watchdog read in each retry.
    Now the total number of clocksource reads is increased to 4 per iteration.
    In order to avoid increasing the clock skew check overhead, the default
    maximum number of retries is reduced from 3 to 2 to maintain the same 12
    clocksource reads in the worst case.
    
    Suggested-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Stable-dep-of: f2655ac2c06a ("clocksource: Fix brown-bag boolean thinko in cs_watchdog_read()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clocksource: Scale the watchdog read retries automatically [+ + +]
Author: Feng Tang <feng.tang@intel.com>
Date:   Wed Feb 21 14:08:59 2024 +0800

    clocksource: Scale the watchdog read retries automatically
    
    [ Upstream commit 2ed08e4bc53298db3f87b528cd804cb0cce066a9 ]
    
    On a 8-socket server the TSC is wrongly marked as 'unstable' and disabled
    during boot time on about one out of 120 boot attempts:
    
        clocksource: timekeeping watchdog on CPU227: wd-tsc-wd excessive read-back delay of 153560ns vs. limit of 125000ns,
        wd-wd read-back delay only 11440ns, attempt 3, marking tsc unstable
        tsc: Marking TSC unstable due to clocksource watchdog
        TSC found unstable after boot, most likely due to broken BIOS. Use 'tsc=unstable'.
        sched_clock: Marking unstable (119294969739, 159204297)<-(125446229205, -5992055152)
        clocksource: Checking clocksource tsc synchronization from CPU 319 to CPUs 0,99,136,180,210,542,601,896.
        clocksource: Switched to clocksource hpet
    
    The reason is that for platform with a large number of CPUs, there are
    sporadic big or huge read latencies while reading the watchog/clocksource
    during boot or when system is under stress work load, and the frequency and
    maximum value of the latency goes up with the number of online CPUs.
    
    The cCurrent code already has logic to detect and filter such high latency
    case by reading the watchdog twice and checking the two deltas. Due to the
    randomness of the latency, there is a low probabilty that the first delta
    (latency) is big, but the second delta is small and looks valid. The
    watchdog code retries the readouts by default twice, which is not
    necessarily sufficient for systems with a large number of CPUs.
    
    There is a command line parameter 'max_cswd_read_retries' which allows to
    increase the number of retries, but that's not user friendly as it needs to
    be tweaked per system. As the number of required retries is proportional to
    the number of online CPUs, this parameter can be calculated at runtime.
    
    Scale and enlarge the number of retries according to the number of online
    CPUs and remove the command line parameter completely.
    
    [ tglx: Massaged change log and comments ]
    
    Signed-off-by: Feng Tang <feng.tang@intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Jin Wang <jin1.wang@intel.com>
    Tested-by: Paul E. McKenney <paulmck@kernel.org>
    Reviewed-by: Waiman Long <longman@redhat.com>
    Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
    Link: https://lore.kernel.org/r/20240221060859.1027450-1-feng.tang@intel.com
    Stable-dep-of: f2655ac2c06a ("clocksource: Fix brown-bag boolean thinko in cs_watchdog_read()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
coresight: Fix ref leak when of_coresight_parse_endpoint() fails [+ + +]
Author: James Clark <james.clark@linaro.org>
Date:   Wed May 29 14:36:26 2024 +0100

    coresight: Fix ref leak when of_coresight_parse_endpoint() fails
    
    [ Upstream commit 7fcb9cb2fe47294e16067c3cfd25332c8662a115 ]
    
    of_graph_get_next_endpoint() releases the reference to the previous
    endpoint on each iteration, but when parsing fails the loop exits
    early meaning the last reference is never dropped.
    
    Fix it by dropping the refcount in the exit condition.
    
    Fixes: d375b356e687 ("coresight: Fix support for sparsely populated ports")
    Signed-off-by: James Clark <james.clark@arm.com>
    Reported-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20240529133626.90080-1-james.clark@arm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
decompress_bunzip2: fix rare decompression failure [+ + +]
Author: Ross Lagerwall <ross.lagerwall@citrix.com>
Date:   Wed Jul 17 17:20:16 2024 +0100

    decompress_bunzip2: fix rare decompression failure
    
    commit bf6acd5d16057d7accbbb1bf7dc6d8c56eeb4ecc upstream.
    
    The decompression code parses a huffman tree and counts the number of
    symbols for a given bit length.  In rare cases, there may be >= 256
    symbols with a given bit length, causing the unsigned char to overflow.
    This causes a decompression failure later when the code tries and fails to
    find the bit length for a given symbol.
    
    Since the maximum number of symbols is 258, use unsigned short instead.
    
    Link: https://lkml.kernel.org/r/20240717162016.1514077-1-ross.lagerwall@citrix.com
    Fixes: bc22c17e12c1 ("bzip2/lzma: library support for gzip, bzip2 and lzma decompression")
    Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
    Cc: Alain Knaff <alain@knaff.lu>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dev/parport: fix the array out-of-bounds risk [+ + +]
Author: tuhaowen <tuhaowen@uniontech.com>
Date:   Mon Jul 8 16:04:30 2024 +0800

    dev/parport: fix the array out-of-bounds risk
    
    commit ab11dac93d2d568d151b1918d7b84c2d02bacbd5 upstream.
    
    Fixed array out-of-bounds issues caused by sprintf
    by replacing it with snprintf for safer data copying,
    ensuring the destination buffer is not overflowed.
    
    Below is the stack trace I encountered during the actual issue:
    
    [ 66.575408s] [pid:5118,cpu4,QThread,4]Kernel panic - not syncing: stack-protector:
    Kernel stack is corrupted in: do_hardware_base_addr+0xcc/0xd0 [parport]
    [ 66.575408s] [pid:5118,cpu4,QThread,5]CPU: 4 PID: 5118 Comm:
    QThread Tainted: G S W O 5.10.97-arm64-desktop #7100.57021.2
    [ 66.575439s] [pid:5118,cpu4,QThread,6]TGID: 5087 Comm: EFileApp
    [ 66.575439s] [pid:5118,cpu4,QThread,7]Hardware name: HUAWEI HUAWEI QingYun
    PGUX-W515x-B081/SP1PANGUXM, BIOS 1.00.07 04/29/2024
    [ 66.575439s] [pid:5118,cpu4,QThread,8]Call trace:
    [ 66.575469s] [pid:5118,cpu4,QThread,9] dump_backtrace+0x0/0x1c0
    [ 66.575469s] [pid:5118,cpu4,QThread,0] show_stack+0x14/0x20
    [ 66.575469s] [pid:5118,cpu4,QThread,1] dump_stack+0xd4/0x10c
    [ 66.575500s] [pid:5118,cpu4,QThread,2] panic+0x1d8/0x3bc
    [ 66.575500s] [pid:5118,cpu4,QThread,3] __stack_chk_fail+0x2c/0x38
    [ 66.575500s] [pid:5118,cpu4,QThread,4] do_hardware_base_addr+0xcc/0xd0 [parport]
    
    Signed-off-by: tuhaowen <tuhaowen@uniontech.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20240708080430.8221-1-tuhaowen@uniontech.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
devres: Fix devm_krealloc() wasting memory [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Tue Jul 2 22:51:50 2024 +0800

    devres: Fix devm_krealloc() wasting memory
    
    commit c884e3249f753dcef7a2b2023541ac1dc46b318e upstream.
    
    Driver API devm_krealloc() calls alloc_dr() with wrong argument
    @total_new_size, so causes more memory to be allocated than required
    fix this memory waste by using @new_size as the argument for alloc_dr().
    
    Fixes: f82485722e5d ("devres: provide devm_krealloc()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/1719931914-19035-2-git-send-email-quic_zijuhu@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

devres: Fix memory leakage caused by driver API devm_free_percpu() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Tue Jul 2 22:51:51 2024 +0800

    devres: Fix memory leakage caused by driver API devm_free_percpu()
    
    commit bd50a974097bb82d52a458bd3ee39fb723129a0c upstream.
    
    It will cause memory leakage when use driver API devm_free_percpu()
    to free memory allocated by devm_alloc_percpu(), fixed by using
    devres_release() instead of devres_destroy() within devm_free_percpu().
    
    Fixes: ff86aae3b411 ("devres: add devm_alloc_percpu()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/1719931914-19035-3-git-send-email-quic_zijuhu@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dma: fix call order in dmam_free_coherent [+ + +]
Author: Lance Richardson <rlance@google.com>
Date:   Thu Jul 18 14:38:24 2024 +0000

    dma: fix call order in dmam_free_coherent
    
    [ Upstream commit 28e8b7406d3a1f5329a03aa25a43aa28e087cb20 ]
    
    dmam_free_coherent() frees a DMA allocation, which makes the
    freed vaddr available for reuse, then calls devres_destroy()
    to remove and free the data structure used to track the DMA
    allocation. Between the two calls, it is possible for a
    concurrent task to make an allocation with the same vaddr
    and add it to the devres list.
    
    If this happens, there will be two entries in the devres list
    with the same vaddr and devres_destroy() can free the wrong
    entry, triggering the WARN_ON() in dmam_match.
    
    Fix by destroying the devres entry before freeing the DMA
    allocation.
    
    Tested:
      kokonut //net/encryption
        http://sponge2/b9145fe6-0f72-4325-ac2f-a84d81075b03
    
    Fixes: 9ac7849e35f7 ("devres: device resource management")
    Signed-off-by: Lance Richardson <rlance@google.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dmaengine: ti: k3-udma: Fix BCHAN count with UHC and HC channels [+ + +]
Author: Vignesh Raghavendra <vigneshr@ti.com>
Date:   Fri Jun 7 23:41:03 2024 +0530

    dmaengine: ti: k3-udma: Fix BCHAN count with UHC and HC channels
    
    [ Upstream commit 372f8b3621294173f539b32976e41e6e12f5decf ]
    
    Unlike other channel counts in CAPx registers, BCDMA BCHAN CNT doesn't
    include UHC and HC BC channels. So include them explicitly to arrive at
    total BC channel in the instance.
    
    Fixes: 8844898028d4 ("dmaengine: ti: k3-udma: Add support for BCDMA channel TPL handling")
    Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
    Signed-off-by: Jai Luthra <j-luthra@ti.com>
    Tested-by: Jayesh Choudhary <j-choudhary@ti.com>
    Link: https://lore.kernel.org/r/20240607-bcdma_chan_cnt-v2-1-bf1a55529d91@ti.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
driver core: Fix uevent_show() vs driver detach race [+ + +]
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Fri Jul 12 12:42:09 2024 -0700

    driver core: Fix uevent_show() vs driver detach race
    
    commit 15fffc6a5624b13b428bb1c6e9088e32a55eb82c upstream.
    
    uevent_show() wants to de-reference dev->driver->name. There is no clean
    way for a device attribute to de-reference dev->driver unless that
    attribute is defined via (struct device_driver).dev_groups. Instead, the
    anti-pattern of taking the device_lock() in the attribute handler risks
    deadlocks with code paths that remove device attributes while holding
    the lock.
    
    This deadlock is typically invisible to lockdep given the device_lock()
    is marked lockdep_set_novalidate_class(), but some subsystems allocate a
    local lockdep key for @dev->mutex to reveal reports of the form:
    
     ======================================================
     WARNING: possible circular locking dependency detected
     6.10.0-rc7+ #275 Tainted: G           OE    N
     ------------------------------------------------------
     modprobe/2374 is trying to acquire lock:
     ffff8c2270070de0 (kn->active#6){++++}-{0:0}, at: __kernfs_remove+0xde/0x220
    
     but task is already holding lock:
     ffff8c22016e88f8 (&cxl_root_key){+.+.}-{3:3}, at: device_release_driver_internal+0x39/0x210
    
     which lock already depends on the new lock.
    
     the existing dependency chain (in reverse order) is:
    
     -> #1 (&cxl_root_key){+.+.}-{3:3}:
            __mutex_lock+0x99/0xc30
            uevent_show+0xac/0x130
            dev_attr_show+0x18/0x40
            sysfs_kf_seq_show+0xac/0xf0
            seq_read_iter+0x110/0x450
            vfs_read+0x25b/0x340
            ksys_read+0x67/0xf0
            do_syscall_64+0x75/0x190
            entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
     -> #0 (kn->active#6){++++}-{0:0}:
            __lock_acquire+0x121a/0x1fa0
            lock_acquire+0xd6/0x2e0
            kernfs_drain+0x1e9/0x200
            __kernfs_remove+0xde/0x220
            kernfs_remove_by_name_ns+0x5e/0xa0
            device_del+0x168/0x410
            device_unregister+0x13/0x60
            devres_release_all+0xb8/0x110
            device_unbind_cleanup+0xe/0x70
            device_release_driver_internal+0x1c7/0x210
            driver_detach+0x47/0x90
            bus_remove_driver+0x6c/0xf0
            cxl_acpi_exit+0xc/0x11 [cxl_acpi]
            __do_sys_delete_module.isra.0+0x181/0x260
            do_syscall_64+0x75/0x190
            entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The observation though is that driver objects are typically much longer
    lived than device objects. It is reasonable to perform lockless
    de-reference of a @driver pointer even if it is racing detach from a
    device. Given the infrequency of driver unregistration, use
    synchronize_rcu() in module_remove_driver() to close any potential
    races.  It is potentially overkill to suffer synchronize_rcu() just to
    handle the rare module removal racing uevent_show() event.
    
    Thanks to Tetsuo Handa for the debug analysis of the syzbot report [1].
    
    Fixes: c0a40097f0bc ("drivers: core: synchronize really_probe() and dev_uevent()")
    Reported-by: syzbot+4762dd74e32532cda5ff@syzkaller.appspotmail.com
    Reported-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Closes: http://lore.kernel.org/5aa5558f-90a4-4864-b1b1-5d6784c5607d@I-love.SAKURA.ne.jp [1]
    Link: http://lore.kernel.org/669073b8ea479_5fffa294c1@dwillia2-xfh.jf.intel.com.notmuch
    Cc: stable@vger.kernel.org
    Cc: Ashish Sangwan <a.sangwan@samsung.com>
    Cc: Namjae Jeon <namjae.jeon@samsung.com>
    Cc: Dirk Behme <dirk.behme@de.bosch.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Rafael J. Wysocki <rafael@kernel.org>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Link: https://lore.kernel.org/r/172081332794.577428.9738802016494057132.stgit@dwillia2-xfh.jf.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drivers: soc: xilinx: check return status of get_api_version() [+ + +]
Author: Jay Buddhabhatti <jay.buddhabhatti@amd.com>
Date:   Wed May 15 04:23:45 2024 -0700

    drivers: soc: xilinx: check return status of get_api_version()
    
    [ Upstream commit 9b003e14801cf85a8cebeddc87bc9fc77100fdce ]
    
    Currently return status is not getting checked for get_api_version
    and because of that for x86 arch we are getting below smatch error.
    
        CC      drivers/soc/xilinx/zynqmp_power.o
    drivers/soc/xilinx/zynqmp_power.c: In function 'zynqmp_pm_probe':
    drivers/soc/xilinx/zynqmp_power.c:295:12: warning: 'pm_api_version' is
    used uninitialized [-Wuninitialized]
        295 |         if (pm_api_version < ZYNQMP_PM_VERSION)
            |            ^
        CHECK   drivers/soc/xilinx/zynqmp_power.c
    drivers/soc/xilinx/zynqmp_power.c:295 zynqmp_pm_probe() error:
    uninitialized symbol 'pm_api_version'.
    
    So, check return status of pm_get_api_version and return error in case
    of failure to avoid checking uninitialized pm_api_version variable.
    
    Fixes: b9b3a8be28b3 ("firmware: xilinx: Remove eemi ops for get_api_version")
    Signed-off-by: Jay Buddhabhatti <jay.buddhabhatti@amd.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240515112345.24673-1-jay.buddhabhatti@amd.com
    Signed-off-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Add null checker before passing variables [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Tue Jun 4 16:33:18 2024 -0600

    drm/amd/display: Add null checker before passing variables
    
    [ Upstream commit 8092aa3ab8f7b737a34b71f91492c676a843043a ]
    
    Checks null pointer before passing variables to functions.
    
    This fixes 3 NULL_RETURNS issues reported by Coverity.
    
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Check for NULL pointer [+ + +]
Author: Sung Joon Kim <sungjoon.kim@amd.com>
Date:   Mon Jul 8 19:29:49 2024 -0400

    drm/amd/display: Check for NULL pointer
    
    commit 4ab68e168ae1695f7c04fae98930740aaf7c50fa upstream.
    
    [why & how]
    Need to make sure plane_state is initialized
    before accessing its members.
    
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Xi (Alex) Liu <xi.liu@amd.com>
    Signed-off-by: Sung Joon Kim <sungjoon.kim@amd.com>
    Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 295d91cbc700651782a60572f83c24861607b648)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm: Fix aldebaran pcie speed reporting [+ + +]
Author: Lijo Lazar <lijo.lazar@amd.com>
Date:   Thu May 9 14:14:10 2024 +0530

    drm/amd/pm: Fix aldebaran pcie speed reporting
    
    [ Upstream commit b6420021e17e262c57bb289d0556ee181b014f9c ]
    
    Fix the field definitions for LC_CURRENT_DATA_RATE.
    
    Fixes: c05d1c401572 ("drm/amd/swsmu: add aldebaran smu13 ip support (v3)")
    Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
    Reviewed-by: Asad Kamal <asad.kamal@amd.com>
    Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu/pm: Fix the null pointer dereference for smu7 [+ + +]
Author: Ma Jun <Jun.Ma2@amd.com>
Date:   Fri May 10 15:01:59 2024 +0800

    drm/amdgpu/pm: Fix the null pointer dereference for smu7
    
    [ Upstream commit c02c1960c93eede587576625a1221205a68a904f ]
    
    optimize the code to avoid pass a null pointer (hwmgr->backend)
    to function smu7_update_edc_leakage_table.
    
    Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
    Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu/pm: Fix the null pointer dereference in apply_state_adjust_rules [+ + +]
Author: Ma Jun <Jun.Ma2@amd.com>
Date:   Thu May 9 15:51:35 2024 +0800

    drm/amdgpu/pm: Fix the null pointer dereference in apply_state_adjust_rules
    
    [ Upstream commit d19fb10085a49b77578314f69fff21562f7cd054 ]
    
    Check the pointer value to fix potential null pointer
    dereference
    
    Acked-by: Yang Wang<kevinyang.wang@amd.com>
    Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu/sdma5.2: Update wptr registers as well as doorbell [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Tue Jul 9 17:54:11 2024 -0400

    drm/amdgpu/sdma5.2: Update wptr registers as well as doorbell
    
    commit a03ebf116303e5d13ba9a2b65726b106cb1e96f6 upstream.
    
    We seem to have a case where SDMA will sometimes miss a doorbell
    if GFX is entering the powergating state when the doorbell comes in.
    To workaround this, we can update the wptr via MMIO, however,
    this is only safe because we disallow gfxoff in begin_ring() for
    SDMA 5.2 and then allow it again in end_ring().
    
    Enable this workaround while we are root causing the issue with
    the HW team.
    
    Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/3440
    Tested-by: Friedrich Vock <friedrich.vock@gmx.de>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    (cherry picked from commit f2ac52634963fc38e4935e11077b6f7854e5d700)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Check if NBIO funcs are NULL in amdgpu_device_baco_exit [+ + +]
Author: Friedrich Vock <friedrich.vock@gmx.de>
Date:   Tue May 14 09:06:38 2024 +0200

    drm/amdgpu: Check if NBIO funcs are NULL in amdgpu_device_baco_exit
    
    [ Upstream commit 0cdb3f9740844b9d95ca413e3fcff11f81223ecf ]
    
    The special case for VM passthrough doesn't check adev->nbio.funcs
    before dereferencing it. If GPUs that don't have an NBIO block are
    passed through, this leads to a NULL pointer dereference on startup.
    
    Signed-off-by: Friedrich Vock <friedrich.vock@gmx.de>
    Fixes: 1bece222eabe ("drm/amdgpu: Clear doorbell interrupt status for Sienna Cichlid")
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: Christian König <christian.koenig@amd.com>
    Acked-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: Fix the null pointer dereference to ras_manager [+ + +]
Author: Ma Jun <Jun.Ma2@amd.com>
Date:   Sat May 11 15:48:02 2024 +0800

    drm/amdgpu: Fix the null pointer dereference to ras_manager
    
    [ Upstream commit 4c11d30c95576937c6c35e6f29884761f2dddb43 ]
    
    Check ras_manager before using it
    
    Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
    Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/bridge: analogix_dp: properly handle zero sized AUX transactions [+ + +]
Author: Lucas Stach <l.stach@pengutronix.de>
Date:   Mon Mar 18 21:39:23 2024 +0100

    drm/bridge: analogix_dp: properly handle zero sized AUX transactions
    
    commit e82290a2e0e8ec5e836ecad1ca025021b3855c2d upstream.
    
    Address only transactions without any data are valid and should not
    be flagged as short transactions. Simply return the message size when
    no transaction errors occured.
    
    CC: stable@vger.kernel.org
    Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240318203925.2837689-1-l.stach@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/client: fix null pointer dereference in drm_client_modeset_probe [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Fri Aug 2 12:47:36 2024 +0800

    drm/client: fix null pointer dereference in drm_client_modeset_probe
    
    commit 113fd6372a5bb3689aba8ef5b8a265ed1529a78f upstream.
    
    In drm_client_modeset_probe(), the return value of drm_mode_duplicate() is
    assigned to modeset->mode, which will lead to a possible NULL pointer
    dereference on failure of drm_mode_duplicate(). Add a check to avoid npd.
    
    Cc: stable@vger.kernel.org
    Fixes: cf13909aee05 ("drm/fb-helper: Move out modeset config code")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240802044736.1570345-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/dp_mst: Fix all mstb marked as not probed after suspend/resume [+ + +]
Author: Wayne Lin <Wayne.Lin@amd.com>
Date:   Wed Jun 26 16:48:23 2024 +0800

    drm/dp_mst: Fix all mstb marked as not probed after suspend/resume
    
    [ Upstream commit d63d81094d208abb20fc444514b2d9ec2f4b7c4e ]
    
    [Why]
    After supend/resume, with topology unchanged, observe that
    link_address_sent of all mstb are marked as false even the topology probing
    is done without any error.
    
    It is caused by wrongly also include "ret == 0" case as a probing failure
    case.
    
    [How]
    Remove inappropriate checking conditions.
    
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: Harry Wentland <hwentlan@amd.com>
    Cc: Jani Nikula <jani.nikula@intel.com>
    Cc: Imre Deak <imre.deak@intel.com>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: stable@vger.kernel.org
    Fixes: 37dfdc55ffeb ("drm/dp_mst: Cleanup drm_dp_send_link_address() a bit")
    Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240626084825.878565-2-Wayne.Lin@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/etnaviv: fix DMA direction handling for cached RW buffers [+ + +]
Author: Lucas Stach <l.stach@pengutronix.de>
Date:   Fri Jun 21 19:11:06 2024 +0200

    drm/etnaviv: fix DMA direction handling for cached RW buffers
    
    [ Upstream commit 58979ad6330a70450ed78837be3095107d022ea9 ]
    
    The dma sync operation needs to be done with DMA_BIDIRECTIONAL when
    the BO is prepared for both read and write operations.
    
    Fixes: a8c21a5451d8 ("drm/etnaviv: add initial etnaviv DRM driver")
    Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
    Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
    Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/gma500: fix null pointer dereference in cdv_intel_lvds_get_modes [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Tue Jul 9 19:33:11 2024 +0800

    drm/gma500: fix null pointer dereference in cdv_intel_lvds_get_modes
    
    commit cb520c3f366c77e8d69e4e2e2781a8ce48d98e79 upstream.
    
    In cdv_intel_lvds_get_modes(), the return value of drm_mode_duplicate()
    is assigned to mode, which will lead to a NULL pointer dereference on
    failure of drm_mode_duplicate(). Add a check to avoid npd.
    
    Cc: stable@vger.kernel.org
    Fixes: 6a227d5fd6c4 ("gma500: Add support for Cedarview")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240709113311.37168-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/gma500: fix null pointer dereference in psb_intel_lvds_get_modes [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Tue Jul 9 17:20:11 2024 +0800

    drm/gma500: fix null pointer dereference in psb_intel_lvds_get_modes
    
    commit 2df7aac81070987b0f052985856aa325a38debf6 upstream.
    
    In psb_intel_lvds_get_modes(), the return value of drm_mode_duplicate() is
    assigned to mode, which will lead to a possible NULL pointer dereference
    on failure of drm_mode_duplicate(). Add a check to avoid npd.
    
    Cc: stable@vger.kernel.org
    Fixes: 89c78134cc54 ("gma500: Add Poulsbo support")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240709092011.3204970-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/dp: Reset intel_dp->link_trained before retraining the link [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Mon Jul 8 22:00:24 2024 +0300

    drm/i915/dp: Reset intel_dp->link_trained before retraining the link
    
    commit d13e2a6e95e6b87f571c837c71a3d05691def9bb upstream.
    
    Regularly retraining a link during an atomic commit happens with the
    given pipe/link already disabled and hence intel_dp->link_trained being
    false. Ensure this also for retraining a DP SST link via direct calls to
    the link training functions (vs. an actual commit as for DP MST). So far
    nothing depended on this, however the next patch will depend on
    link_trained==false for changing the LTTPR mode to non-transparent.
    
    Cc: <stable@vger.kernel.org> # v5.15+
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240708190029.271247-2-imre.deak@intel.com
    (cherry picked from commit a4d5ce61765c08ab364aa4b327f6739b646e6cfa)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/gem: Fix Virtual Memory mapping boundaries calculation [+ + +]
Author: Andi Shyti <andi.shyti@linux.intel.com>
Date:   Fri Aug 2 10:38:50 2024 +0200

    drm/i915/gem: Fix Virtual Memory mapping boundaries calculation
    
    commit 8bdd9ef7e9b1b2a73e394712b72b22055e0e26c3 upstream.
    
    Calculating the size of the mapped area as the lesser value
    between the requested size and the actual size does not consider
    the partial mapping offset. This can cause page fault access.
    
    Fix the calculation of the starting and ending addresses, the
    total size is now deduced from the difference between the end and
    start addresses.
    
    Additionally, the calculations have been rewritten in a clearer
    and more understandable form.
    
    Fixes: c58305af1835 ("drm/i915: Use remap_io_mapping() to prefault all PTE in a single pass")
    Reported-by: Jann Horn <jannh@google.com>
    Co-developed-by: Chris Wilson <chris.p.wilson@linux.intel.com>
    Signed-off-by: Chris Wilson <chris.p.wilson@linux.intel.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: Matthew Auld <matthew.auld@intel.com>
    Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Cc: <stable@vger.kernel.org> # v4.9+
    Reviewed-by: Jann Horn <jannh@google.com>
    Reviewed-by: Jonathan Cavitt <Jonathan.cavitt@intel.com>
    [Joonas: Add Requires: tag]
    Requires: 60a2066c5005 ("drm/i915/gem: Adjust vma offset for framebuffer mmap offset")
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240802083850.103694-3-andi.shyti@linux.intel.com
    (cherry picked from commit 97b6784753da06d9d40232328efc5c5367e53417)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/gt: Do not consider preemption during execlists_dequeue for gen8 [+ + +]
Author: Nitin Gote <nitin.r.gote@intel.com>
Date:   Thu Jul 11 22:02:08 2024 +0530

    drm/i915/gt: Do not consider preemption during execlists_dequeue for gen8
    
    commit 65564157ae64cec0f527583f96e32f484f730f92 upstream.
    
    We're seeing a GPU hang issue on a CHV platform, which was caused by commit
    bac24f59f454 ("drm/i915/execlists: Enable coarse preemption boundaries for
    Gen8").
    
    The Gen8 platform only supports timeslicing and doesn't have a preemption
    mechanism, as its engines do not have a preemption timer.
    
    Commit 751f82b353a6 ("drm/i915/gt: Only disable preemption on Gen8 render
    engines") addressed this issue only for render engines. This patch extends
    that fix by ensuring that preemption is not considered for all engines on
    Gen8 platforms.
    
    v4:
     - Use the correct Fixes tag (Rodrigo Vivi)
     - Reworded commit log (Andi Shyti)
    
    v3:
     - Inside need_preempt(), condition of can_preempt() is not required
       as simplified can_preempt() is enough. (Chris Wilson)
    
    v2: Simplify can_preempt() function (Tvrtko Ursulin)
    
    Fixes: 751f82b353a6 ("drm/i915/gt: Only disable preemption on gen8 render engines")
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11396
    Suggested-by: Andi Shyti <andi.shyti@intel.com>
    Signed-off-by: Nitin Gote <nitin.r.gote@intel.com>
    Cc: Chris Wilson <chris.p.wilson@linux.intel.com>
    CC: <stable@vger.kernel.org> # v5.12+
    Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
    Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240711163208.1355736-1-nitin.r.gote@intel.com
    (cherry picked from commit 7df0be6e6280c6fca01d039864bb123e5e36604b)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/mediatek: Add DRM_MODE_ROTATE_0 to rotation property [+ + +]
Author: Hsiao Chien Sung <shawn.sung@mediatek.com>
Date:   Thu Jun 20 00:38:48 2024 +0800

    drm/mediatek: Add DRM_MODE_ROTATE_0 to rotation property
    
    [ Upstream commit 74608d8feefd1675388f23362aac8df4ac3af931 ]
    
    Always add DRM_MODE_ROTATE_0 to rotation property to meet
    IGT's (Intel GPU Tools) requirement.
    
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
    Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20240620-igt-v3-8-a9d62d2e2c7e@mediatek.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/mediatek: Add missing plane settings when async update [+ + +]
Author: Hsiao Chien Sung <shawn.sung@mediatek.com>
Date:   Thu Jun 20 00:38:41 2024 +0800

    drm/mediatek: Add missing plane settings when async update
    
    [ Upstream commit 86b89dc669c400576dc23aa923bcf302f99e8e3a ]
    
    Fix an issue that plane coordinate was not saved when
    calling async update.
    
    Fixes: 920fffcc8912 ("drm/mediatek: update cursors by using async atomic update")
    
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
    Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20240620-igt-v3-1-a9d62d2e2c7e@mediatek.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/meson: fix canvas release in bind function [+ + +]
Author: Yao Zi <ziyao@disroot.org>
Date:   Wed Jul 3 15:58:27 2024 +0000

    drm/meson: fix canvas release in bind function
    
    [ Upstream commit a695949b2e9bb6b6700a764c704731a306c4bebf ]
    
    Allocated canvases may not be released on the error exit path of
    meson_drv_bind_master(), leading to resource leaking. Rewrite exit path
    to release canvases on error.
    
    Fixes: 2bf6b5b0e374 ("drm/meson: exclusively use the canvas provider module")
    Signed-off-by: Yao Zi <ziyao@disroot.org>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20240703155826.10385-2-ziyao@disroot.org
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240703155826.10385-2-ziyao@disroot.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/mgag200: Set DDC timeout in milliseconds [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Mon May 13 14:51:06 2024 +0200

    drm/mgag200: Set DDC timeout in milliseconds
    
    commit ecde5db1598aecab54cc392282c15114f526f05f upstream.
    
    Compute the i2c timeout in jiffies from a value in milliseconds. The
    original values of 2 jiffies equals 2 milliseconds if HZ has been
    configured to a value of 1000. This corresponds to 2.2 milliseconds
    used by most other DRM drivers. Update mgag200 accordingly.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
    Fixes: 414c45310625 ("mgag200: initial g200se driver (v2)")
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Maxime Ripard <mripard@kernel.org>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Jocelyn Falempe <jfalempe@redhat.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v3.5+
    Link: https://patchwork.freedesktop.org/patch/msgid/20240513125620.6337-2-tzimmermann@suse.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/nouveau: prime: fix refcount underflow [+ + +]
Author: Danilo Krummrich <dakr@kernel.org>
Date:   Thu Jul 18 18:58:46 2024 +0200

    drm/nouveau: prime: fix refcount underflow
    
    [ Upstream commit a9bf3efc33f1fbf88787a277f7349459283c9b95 ]
    
    Calling nouveau_bo_ref() on a nouveau_bo without initializing it (and
    hence the backing ttm_bo) leads to a refcount underflow.
    
    Instead of calling nouveau_bo_ref() in the unwind path of
    drm_gem_object_init(), clean things up manually.
    
    Fixes: ab9ccb96a6e6 ("drm/nouveau: use prime helpers")
    Reviewed-by: Ben Skeggs <bskeggs@nvidia.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240718165959.3983-2-dakr@kernel.org
    (cherry picked from commit 1b93f3e89d03cfc576636e195466a0d728ad8de5)
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panel: boe-tv101wum-nl6: Check for errors on the NOP in prepare() [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Fri May 17 14:36:38 2024 -0700

    drm/panel: boe-tv101wum-nl6: Check for errors on the NOP in prepare()
    
    [ Upstream commit 6320b9199dd99622668649c234d4e8a99e44a9c8 ]
    
    The mipi_dsi_dcs_nop() function returns an error but we weren't
    checking it in boe_panel_prepare(). Add a check. This is highly
    unlikely to matter in practice. If the NOP failed then likely later
    MIPI commands would fail too.
    
    Found by code inspection.
    
    Fixes: 812562b8d881 ("drm/panel: boe-tv101wum-nl6: Fine tune the panel power sequence")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20240517143643.3.Ibffbaa5b4999ac0e55f43bf353144433b099d727@changeid
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240517143643.3.Ibffbaa5b4999ac0e55f43bf353144433b099d727@changeid
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/panel: boe-tv101wum-nl6: If prepare fails, disable GPIO before regulators [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Fri May 17 14:36:37 2024 -0700

    drm/panel: boe-tv101wum-nl6: If prepare fails, disable GPIO before regulators
    
    [ Upstream commit 587c48f622374e5d47b1d515c6006a4df4dee882 ]
    
    The enable GPIO should clearly be set low before turning off
    regulators. That matches both the inverse order that things were
    enabled and also the order in unprepare().
    
    Fixes: a869b9db7adf ("drm/panel: support for boe tv101wum-nl6 wuxga dsi video mode panel")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20240517143643.2.Ieac346cd0f1606948ba39ceea06b55359fe972b6@changeid
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240517143643.2.Ieac346cd0f1606948ba39ceea06b55359fe972b6@changeid
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panfrost: Mark simple_ondemand governor as softdep [+ + +]
Author: Dragan Simic <dsimic@manjaro.org>
Date:   Mon Jun 17 22:17:48 2024 +0200

    drm/panfrost: Mark simple_ondemand governor as softdep
    
    commit 80f4e62730a91572b7fdc657f7bb747e107ae308 upstream.
    
    Panfrost DRM driver uses devfreq to perform DVFS, while using simple_ondemand
    devfreq governor by default.  This causes driver initialization to fail on
    boot when simple_ondemand governor isn't built into the kernel statically,
    as a result of the missing module dependency and, consequently, the required
    governor module not being included in the initial ramdisk.  Thus, let's mark
    simple_ondemand governor as a softdep for Panfrost, to have its kernel module
    included in the initial ramdisk.
    
    This is a rather longstanding issue that has forced distributions to build
    devfreq governors statically into their kernels, [1][2] or has forced users
    to introduce some unnecessary workarounds. [3]
    
    For future reference, not having support for the simple_ondemand governor in
    the initial ramdisk produces errors in the kernel log similar to these below,
    which were taken from a Pine64 RockPro64:
    
      panfrost ff9a0000.gpu: [drm:panfrost_devfreq_init [panfrost]] *ERROR* Couldn't initialize GPU devfreq
      panfrost ff9a0000.gpu: Fatal error during GPU init
      panfrost: probe of ff9a0000.gpu failed with error -22
    
    Having simple_ondemand marked as a softdep for Panfrost may not resolve this
    issue for all Linux distributions.  In particular, it will remain unresolved
    for the distributions whose utilities for the initial ramdisk generation do
    not handle the available softdep information [4] properly yet.  However, some
    Linux distributions already handle softdeps properly while generating their
    initial ramdisks, [5] and this is a prerequisite step in the right direction
    for the distributions that don't handle them properly yet.
    
    [1] https://gitlab.manjaro.org/manjaro-arm/packages/core/linux/-/blob/linux61/config?ref_type=heads#L8180
    [2] https://salsa.debian.org/kernel-team/linux/-/merge_requests/1066
    [3] https://forum.pine64.org/showthread.php?tid=15458
    [4] https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=49d8e0b59052999de577ab732b719cfbeb89504d
    [5] https://github.com/archlinux/mkinitcpio/commit/97ac4d37aae084a050be512f6d8f4489054668ad
    
    Cc: Diederik de Haas <didi.debian@cknow.org>
    Cc: Furkan Kardame <f.kardame@manjaro.org>
    Cc: stable@vger.kernel.org
    Fixes: f3ba91228e8e ("drm/panfrost: Add initial panfrost driver")
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Reviewed-by: Steven Price <steven.price@arm.com>
    Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
    Signed-off-by: Steven Price <steven.price@arm.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/4e1e00422a14db4e2a80870afb704405da16fd1b.1718655077.git.dsimic@manjaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/qxl: Add check for drm_cvt_mode [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Fri Jun 21 15:10:31 2024 +0800

    drm/qxl: Add check for drm_cvt_mode
    
    [ Upstream commit 7bd09a2db0f617377027a2bb0b9179e6959edff3 ]
    
    Add check for the return value of drm_cvt_mode() and return the error if
    it fails in order to avoid NULL pointer dereference.
    
    Fixes: 1b043677d4be ("drm/qxl: add qxl_add_mode helper function")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
    Signed-off-by: Maxime Ripard <mripard@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240621071031.1987974-1-nichen@iscas.ac.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vmwgfx: Fix a deadlock in dma buf fence polling [+ + +]
Author: Zack Rusin <zack.rusin@broadcom.com>
Date:   Mon Jul 22 14:41:13 2024 -0400

    drm/vmwgfx: Fix a deadlock in dma buf fence polling
    
    commit e58337100721f3cc0c7424a18730e4f39844934f upstream.
    
    Introduce a version of the fence ops that on release doesn't remove
    the fence from the pending list, and thus doesn't require a lock to
    fix poll->fence wait->fence unref deadlocks.
    
    vmwgfx overwrites the wait callback to iterate over the list of all
    fences and update their status, to do that it holds a lock to prevent
    the list modifcations from other threads. The fence destroy callback
    both deletes the fence and removes it from the list of pending
    fences, for which it holds a lock.
    
    dma buf polling cb unrefs a fence after it's been signaled: so the poll
    calls the wait, which signals the fences, which are being destroyed.
    The destruction tries to acquire the lock on the pending fences list
    which it can never get because it's held by the wait from which it
    was called.
    
    Old bug, but not a lot of userspace apps were using dma-buf polling
    interfaces. Fix those, in particular this fixes KDE stalls/deadlock.
    
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Fixes: 2298e804e96e ("drm/vmwgfx: rework to new fence interface, v2")
    Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v6.2+
    Reviewed-by: Maaz Mombasawala <maaz.mombasawala@broadcom.com>
    Reviewed-by: Martin Krastev <martin.krastev@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240722184313.181318-2-zack.rusin@broadcom.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/vmwgfx: Fix overlay when using Screen Targets [+ + +]
Author: Ian Forbes <ian.forbes@broadcom.com>
Date:   Fri Jul 19 11:36:27 2024 -0500

    drm/vmwgfx: Fix overlay when using Screen Targets
    
    [ Upstream commit cb372a505a994cb39aa75acfb8b3bcf94787cf94 ]
    
    This code was never updated to support Screen Targets.
    Fixes a bug where Xv playback displays a green screen instead of actual
    video contents when 3D acceleration is disabled in the guest.
    
    Fixes: c8261a961ece ("vmwgfx: Major KMS refactoring / cleanup in preparation of screen targets")
    Reported-by: Doug Brown <doug@schmorgal.com>
    Closes: https://lore.kernel.org/all/bd9cb3c7-90e8-435d-bc28-0e38fee58977@schmorgal.com
    Signed-off-by: Ian Forbes <ian.forbes@broadcom.com>
    Tested-by: Doug Brown <doug@schmorgal.com>
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240719163627.20888-1-ian.forbes@broadcom.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dt-bindings: thermal: correct thermal zone node name limit [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Tue Jul 2 16:52:48 2024 +0200

    dt-bindings: thermal: correct thermal zone node name limit
    
    commit 97e32381d0fc6c2602a767b0c46e15eb2b75971d upstream.
    
    Linux kernel uses thermal zone node name during registering thermal
    zones and has a hard-coded limit of 20 characters, including terminating
    NUL byte.  The bindings expect node names to finish with '-thermal'
    which is eight bytes long, thus we have only 11 characters for the reset
    of the node name (thus 10 for the pattern after leading fixed character).
    
    Reported-by: Rob Herring <robh@kernel.org>
    Closes: https://lore.kernel.org/all/CAL_JsqKogbT_4DPd1n94xqeHaU_J8ve5K09WOyVsRX3jxxUW3w@mail.gmail.com/
    Fixes: 1202a442a31f ("dt-bindings: thermal: Add yaml bindings for thermal zones")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20240702145248.47184-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
EDAC, i10nm: make skx_common.o a separate module [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed May 29 11:51:11 2024 +0200

    EDAC, i10nm: make skx_common.o a separate module
    
    [ Upstream commit 123b158635505c89ed0d3ef45c5845ff9030a466 ]
    
    Commit 598afa050403 ("kbuild: warn objects shared among multiple modules")
    was added to track down cases where the same object is linked into
    multiple modules. This can cause serious problems if some modules are
    builtin while others are not.
    
    That test triggers this warning:
    
    scripts/Makefile.build:236: drivers/edac/Makefile: skx_common.o is added to multiple modules: i10nm_edac skx_edac
    
    Make this a separate module instead.
    
    [Tony: Added more background details to commit message]
    
    Fixes: d4dc89d069aa ("EDAC, i10nm: Add a driver for Intel 10nm server processors")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Link: https://lore.kernel.org/all/20240529095132.1929397-1-arnd@kernel.org/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
exec: Fix ToCToU between perm check and set-uid/gid usage [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Thu Aug 8 11:39:08 2024 -0700

    exec: Fix ToCToU between perm check and set-uid/gid usage
    
    commit f50733b45d865f91db90919f8311e2127ce5a0cb upstream.
    
    When opening a file for exec via do_filp_open(), permission checking is
    done against the file's metadata at that moment, and on success, a file
    pointer is passed back. Much later in the execve() code path, the file
    metadata (specifically mode, uid, and gid) is used to determine if/how
    to set the uid and gid. However, those values may have changed since the
    permissions check, meaning the execution may gain unintended privileges.
    
    For example, if a file could change permissions from executable and not
    set-id:
    
    ---------x 1 root root 16048 Aug  7 13:16 target
    
    to set-id and non-executable:
    
    ---S------ 1 root root 16048 Aug  7 13:16 target
    
    it is possible to gain root privileges when execution should have been
    disallowed.
    
    While this race condition is rare in real-world scenarios, it has been
    observed (and proven exploitable) when package managers are updating
    the setuid bits of installed programs. Such files start with being
    world-executable but then are adjusted to be group-exec with a set-uid
    bit. For example, "chmod o-x,u+s target" makes "target" executable only
    by uid "root" and gid "cdrom", while also becoming setuid-root:
    
    -rwxr-xr-x 1 root cdrom 16048 Aug  7 13:16 target
    
    becomes:
    
    -rwsr-xr-- 1 root cdrom 16048 Aug  7 13:16 target
    
    But racing the chmod means users without group "cdrom" membership can
    get the permission to execute "target" just before the chmod, and when
    the chmod finishes, the exec reaches brpm_fill_uid(), and performs the
    setuid to root, violating the expressed authorization of "only cdrom
    group members can setuid to root".
    
    Re-check that we still have execute permissions in case the metadata
    has changed. It would be better to keep a copy from the perm-check time,
    but until we can do that refactoring, the least-bad option is to do a
    full inode_permission() call (under inode lock). It is understood that
    this is safe against dead-locks, but hardly optimal.
    
    Reported-by: Marco Vanotti <mvanotti@google.com>
    Tested-by: Marco Vanotti <mvanotti@google.com>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: stable@vger.kernel.org
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ext2: Verify bitmap and itable block numbers before using them [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Mon Jun 24 17:12:56 2024 +0200

    ext2: Verify bitmap and itable block numbers before using them
    
    commit 322a6aff03937aa1ece33b4e46c298eafaf9ac41 upstream.
    
    Verify bitmap block numbers and inode table blocks are sane before using
    them for checking bits in the block bitmap.
    
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ext4: avoid writing unitialized memory to disk in EA inodes [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Jun 13 17:02:34 2024 +0200

    ext4: avoid writing unitialized memory to disk in EA inodes
    
    [ Upstream commit 65121eff3e4c8c90f8126debf3c369228691c591 ]
    
    If the extended attribute size is not a multiple of block size, the last
    block in the EA inode will have uninitialized tail which will get
    written to disk. We will never expose the data to userspace but still
    this is not a good practice so just zero out the tail of the block as it
    isn't going to cause a noticeable performance overhead.
    
    Fixes: e50e5129f384 ("ext4: xattr-in-inode support")
    Reported-by: syzbot+9c1fe13fcb51574b249b@syzkaller.appspotmail.com
    Reported-by: Hugh Dickins <hughd@google.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240613150234.25176-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: check dot and dotdot of dx_root before making dir indexed [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Tue Jul 2 21:23:48 2024 +0800

    ext4: check dot and dotdot of dx_root before making dir indexed
    
    commit 50ea741def587a64e08879ce6c6a30131f7111e7 upstream.
    
    Syzbot reports a issue as follows:
    ============================================
    BUG: unable to handle page fault for address: ffffed11022e24fe
    PGD 23ffee067 P4D 23ffee067 PUD 0
    Oops: Oops: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 0 PID: 5079 Comm: syz-executor306 Not tainted 6.10.0-rc5-g55027e689933 #0
    Call Trace:
     <TASK>
     make_indexed_dir+0xdaf/0x13c0 fs/ext4/namei.c:2341
     ext4_add_entry+0x222a/0x25d0 fs/ext4/namei.c:2451
     ext4_rename fs/ext4/namei.c:3936 [inline]
     ext4_rename2+0x26e5/0x4370 fs/ext4/namei.c:4214
    [...]
    ============================================
    
    The immediate cause of this problem is that there is only one valid dentry
    for the block to be split during do_split, so split==0 results in out of
    bounds accesses to the map triggering the issue.
    
        do_split
          unsigned split
          dx_make_map
           count = 1
          split = count/2 = 0;
          continued = hash2 == map[split - 1].hash;
           ---> map[4294967295]
    
    The maximum length of a filename is 255 and the minimum block size is 1024,
    so it is always guaranteed that the number of entries is greater than or
    equal to 2 when do_split() is called.
    
    But syzbot's crafted image has no dot and dotdot in dir, and the dentry
    distribution in dirblock is as follows:
    
      bus     dentry1          hole           dentry2           free
    |xx--|xx-------------|...............|xx-------------|...............|
    0   12 (8+248)=256  268     256     524 (8+256)=264 788     236     1024
    
    So when renaming dentry1 increases its name_len length by 1, neither hole
    nor free is sufficient to hold the new dentry, and make_indexed_dir() is
    called.
    
    In make_indexed_dir() it is assumed that the first two entries of the
    dirblock must be dot and dotdot, so bus and dentry1 are left in dx_root
    because they are treated as dot and dotdot, and only dentry2 is moved
    to the new leaf block. That's why count is equal to 1.
    
    Therefore add the ext4_check_dx_root() helper function to add more sanity
    checks to dot and dotdot before starting the conversion to avoid the above
    issue.
    
    Reported-by: syzbot+ae688d469e36fb5138d0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=ae688d469e36fb5138d0
    Fixes: ac27a0ec112a ("[PATCH] ext4: initial copy of files from ext3")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240702132349.2600605-2-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: check the extent status again before inserting delalloc block [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Fri May 17 20:39:57 2024 +0800

    ext4: check the extent status again before inserting delalloc block
    
    [ Upstream commit 0ea6560abb3bac1ffcfa4bf6b2c4d344fdc27b3c ]
    
    ext4_da_map_blocks looks up for any extent entry in the extent status
    tree (w/o i_data_sem) and then the looks up for any ondisk extent
    mapping (with i_data_sem in read mode).
    
    If it finds a hole in the extent status tree or if it couldn't find any
    entry at all, it then takes the i_data_sem in write mode to add a da
    entry into the extent status tree. This can actually race with page
    mkwrite & fallocate path.
    
    Note that this is ok between
    1. ext4 buffered-write path v/s ext4_page_mkwrite(), because of the
       folio lock
    2. ext4 buffered write path v/s ext4 fallocate because of the inode
       lock.
    
    But this can race between ext4_page_mkwrite() & ext4 fallocate path
    
    ext4_page_mkwrite()             ext4_fallocate()
     block_page_mkwrite()
      ext4_da_map_blocks()
       //find hole in extent status tree
                                     ext4_alloc_file_blocks()
                                      ext4_map_blocks()
                                       //allocate block and unwritten extent
       ext4_insert_delayed_block()
        ext4_da_reserve_space()
         //reserve one more block
        ext4_es_insert_delayed_block()
         //drop unwritten extent and add delayed extent by mistake
    
    Then, the delalloc extent is wrong until writeback and the extra
    reserved block can't be released any more and it triggers below warning:
    
     EXT4-fs (pmem2): Inode 13 (00000000bbbd4d23): i_reserved_data_blocks(1) not cleared!
    
    Fix the problem by looking up extent status tree again while the
    i_data_sem is held in write mode. If it still can't find any entry, then
    we insert a new da entry into the extent status tree.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240517124005.347221-3-yi.zhang@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: convert to exclusive lock while inserting delalloc extents [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Sat Jan 27 09:58:01 2024 +0800

    ext4: convert to exclusive lock while inserting delalloc extents
    
    [ Upstream commit acf795dc161f3cf481db20f05db4250714e375e5 ]
    
    ext4_da_map_blocks() only hold i_data_sem in shared mode and i_rwsem
    when inserting delalloc extents, it could be raced by another querying
    path of ext4_map_blocks() without i_rwsem, .e.g buffered read path.
    Suppose we buffered read a file containing just a hole, and without any
    cached extents tree, then it is raced by another delayed buffered write
    to the same area or the near area belongs to the same hole, and the new
    delalloc extent could be overwritten to a hole extent.
    
     pread()                           pwrite()
      filemap_read_folio()
       ext4_mpage_readpages()
        ext4_map_blocks()
         down_read(i_data_sem)
         ext4_ext_determine_hole()
         //find hole
         ext4_ext_put_gap_in_cache()
          ext4_es_find_extent_range()
          //no delalloc extent
                                        ext4_da_map_blocks()
                                         down_read(i_data_sem)
                                         ext4_insert_delayed_block()
                                         //insert delalloc extent
          ext4_es_insert_extent()
          //overwrite delalloc extent to hole
    
    This race could lead to inconsistent delalloc extents tree and
    incorrect reserved space counter. Fix this by converting to hold
    i_data_sem in exclusive mode when adding a new delalloc extent in
    ext4_da_map_blocks().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Suggested-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240127015825.1608160-3-yi.zhang@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 0ea6560abb3b ("ext4: check the extent status again before inserting delalloc block")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: don't track ranges in fast_commit if inode has inlined data [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Tue Jun 18 15:43:12 2024 +0100

    ext4: don't track ranges in fast_commit if inode has inlined data
    
    [ Upstream commit 7882b0187bbeb647967a7b5998ce4ad26ef68a9a ]
    
    When fast-commit needs to track ranges, it has to handle inodes that have
    inlined data in a different way because ext4_fc_write_inode_data(), in the
    actual commit path, will attempt to map the required blocks for the range.
    However, inodes that have inlined data will have it's data stored in
    inode->i_block and, eventually, in the extended attribute space.
    
    Unfortunately, because fast commit doesn't currently support extended
    attributes, the solution is to mark this commit as ineligible.
    
    Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1039883
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Tested-by: Ben Hutchings <benh@debian.org>
    Fixes: 9725958bb75c ("ext4: fast commit may miss tracking unwritten range during ftruncate")
    Link: https://patch.msgid.link/20240618144312.17786-1-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: factor out a common helper to query extent map [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Fri May 17 20:39:56 2024 +0800

    ext4: factor out a common helper to query extent map
    
    [ Upstream commit 8e4e5cdf2fdeb99445a468b6b6436ad79b9ecb30 ]
    
    Factor out a new common helper ext4_map_query_blocks() from the
    ext4_da_map_blocks(), it query and return the extent map status on the
    inode's extent path, no logic changes.
    
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Link: https://patch.msgid.link/20240517124005.347221-2-yi.zhang@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 0ea6560abb3b ("ext4: check the extent status again before inserting delalloc block")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix infinite loop when replaying fast_commit [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Wed May 15 09:28:57 2024 +0100

    ext4: fix infinite loop when replaying fast_commit
    
    [ Upstream commit 907c3fe532253a6ef4eb9c4d67efb71fab58c706 ]
    
    When doing fast_commit replay an infinite loop may occur due to an
    uninitialized extent_status struct.  ext4_ext_determine_insert_hole() does
    not detect the replay and calls ext4_es_find_extent_range(), which will
    return immediately without initializing the 'es' variable.
    
    Because 'es' contains garbage, an integer overflow may happen causing an
    infinite loop in this function, easily reproducible using fstest generic/039.
    
    This commit fixes this issue by unconditionally initializing the structure
    in function ext4_es_find_extent_range().
    
    Thanks to Zhang Yi, for figuring out the real problem!
    
    Fixes: 8016e29f4362 ("ext4: fast commit recovery path")
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Link: https://patch.msgid.link/20240515082857.32730-1-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix uninitialized variable in ext4_inlinedir_to_tree [+ + +]
Author: Xiaxi Shen <shenxiaxi26@gmail.com>
Date:   Tue Apr 30 20:30:17 2024 -0700

    ext4: fix uninitialized variable in ext4_inlinedir_to_tree
    
    [ Upstream commit 8dc9c3da79c84b13fdb135e2fb0a149a8175bffe ]
    
    Syzbot has found an uninit-value bug in ext4_inlinedir_to_tree
    
    This error happens because ext4_inlinedir_to_tree does not
    handle the case when ext4fs_dirhash returns an error
    
    This can be avoided by checking the return value of ext4fs_dirhash
    and propagating the error,
    similar to how it's done with ext4_htree_store_dirent
    
    Signed-off-by: Xiaxi Shen <shenxiaxi26@gmail.com>
    Reported-and-tested-by: syzbot+eaba5abe296837a640c0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=eaba5abe296837a640c0
    Link: https://patch.msgid.link/20240501033017.220000-1-shenxiaxi26@gmail.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix wrong unit use in ext4_mb_find_by_goal [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Sat Jun 3 23:03:11 2023 +0800

    ext4: fix wrong unit use in ext4_mb_find_by_goal
    
    [ Upstream commit 99c515e3a860576ba90c11acbc1d6488dfca6463 ]
    
    We need start in block unit while fe_start is in cluster unit. Use
    ext4_grp_offs_to_block helper to convert fe_start to get start in
    block unit.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230603150327.3596033-4-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: make ext4_es_insert_extent() return void [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Mon Apr 24 11:38:45 2023 +0800

    ext4: make ext4_es_insert_extent() return void
    
    [ Upstream commit 6c120399cde6b1b5cf65ce403765c579fb3d3e50 ]
    
    Now ext4_es_insert_extent() never return error, so make it return void.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230424033846.4732-12-libaokun1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 0ea6560abb3b ("ext4: check the extent status again before inserting delalloc block")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: make sure the first directory block is not a hole [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Tue Jul 2 21:23:49 2024 +0800

    ext4: make sure the first directory block is not a hole
    
    commit f9ca51596bbfd0f9c386dd1c613c394c78d9e5e6 upstream.
    
    The syzbot constructs a directory that has no dirblock but is non-inline,
    i.e. the first directory block is a hole. And no errors are reported when
    creating files in this directory in the following flow.
    
        ext4_mknod
         ...
          ext4_add_entry
            // Read block 0
            ext4_read_dirblock(dir, block, DIRENT)
              bh = ext4_bread(NULL, inode, block, 0)
              if (!bh && (type == INDEX || type == DIRENT_HTREE))
              // The first directory block is a hole
              // But type == DIRENT, so no error is reported.
    
    After that, we get a directory block without '.' and '..' but with a valid
    dentry. This may cause some code that relies on dot or dotdot (such as
    make_indexed_dir()) to crash.
    
    Therefore when ext4_read_dirblock() finds that the first directory block
    is a hole report that the filesystem is corrupted and return an error to
    avoid loading corrupted data from disk causing something bad.
    
    Reported-by: syzbot+ae688d469e36fb5138d0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=ae688d469e36fb5138d0
    Fixes: 4e19d6b65fb4 ("ext4: allow directory holes")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240702132349.2600605-3-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: refactor ext4_da_map_blocks() [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Sat Jan 27 09:58:00 2024 +0800

    ext4: refactor ext4_da_map_blocks()
    
    [ Upstream commit 3fcc2b887a1ba4c1f45319cd8c54daa263ecbc36 ]
    
    Refactor and cleanup ext4_da_map_blocks(), reduce some unnecessary
    parameters and branches, no logic changes.
    
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240127015825.1608160-2-yi.zhang@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 0ea6560abb3b ("ext4: check the extent status again before inserting delalloc block")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: return early for non-eligible fast_commit track events [+ + +]
Author: Ritesh Harjani <riteshh@linux.ibm.com>
Date:   Sat Mar 12 11:09:50 2022 +0530

    ext4: return early for non-eligible fast_commit track events
    
    [ Upstream commit 78be0471da4e9fff874307d73d68f0173fa6a154 ]
    
    Currently ext4_fc_track_template() checks, whether the trace event
    path belongs to replay or does sb has ineligible set, if yes it simply
    returns. This patch pulls those checks before calling
    ext4_fc_track_template() in the callers of ext4_fc_track_template().
    
    [ Add checks to ext4_rename() which calls the __ext4_fc_track_*()
      functions directly. -- TYT ]
    
    Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
    Link: https://lore.kernel.org/r/3cd025d9c490218a92e6d8fb30b6123e693373e3.1647057583.git.riteshh@linux.ibm.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 7882b0187bbe ("ext4: don't track ranges in fast_commit if inode has inlined data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix return value of f2fs_convert_inline_inode() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Mon Jun 3 09:07:45 2024 +0800

    f2fs: fix return value of f2fs_convert_inline_inode()
    
    commit a8eb3de28e7a365690c61161e7a07a4fc7c60bbf upstream.
    
    If device is readonly, make f2fs_convert_inline_inode()
    return EROFS instead of zero, otherwise it may trigger
    panic during writeback of inline inode's dirty page as
    below:
    
     f2fs_write_single_data_page+0xbb6/0x1e90 fs/f2fs/data.c:2888
     f2fs_write_cache_pages fs/f2fs/data.c:3187 [inline]
     __f2fs_write_data_pages fs/f2fs/data.c:3342 [inline]
     f2fs_write_data_pages+0x1efe/0x3a90 fs/f2fs/data.c:3369
     do_writepages+0x359/0x870 mm/page-writeback.c:2634
     filemap_fdatawrite_wbc+0x125/0x180 mm/filemap.c:397
     __filemap_fdatawrite_range mm/filemap.c:430 [inline]
     file_write_and_wait_range+0x1aa/0x290 mm/filemap.c:788
     f2fs_do_sync_file+0x68a/0x1ae0 fs/f2fs/file.c:276
     generic_write_sync include/linux/fs.h:2806 [inline]
     f2fs_file_write_iter+0x7bd/0x24e0 fs/f2fs/file.c:4977
     call_write_iter include/linux/fs.h:2114 [inline]
     new_sync_write fs/read_write.c:497 [inline]
     vfs_write+0xa72/0xc90 fs/read_write.c:590
     ksys_write+0x1a0/0x2c0 fs/read_write.c:643
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+848062ba19c8782ca5c8@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-f2fs-devel/000000000000d103ce06174d7ec3@google.com
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
f2fs: fix to don't dirty inode for readonly filesystem [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Jun 4 15:56:36 2024 +0800

    f2fs: fix to don't dirty inode for readonly filesystem
    
    commit 192b8fb8d1c8ca3c87366ebbef599fa80bb626b8 upstream.
    
    syzbot reports f2fs bug as below:
    
    kernel BUG at fs/f2fs/inode.c:933!
    RIP: 0010:f2fs_evict_inode+0x1576/0x1590 fs/f2fs/inode.c:933
    Call Trace:
     evict+0x2a4/0x620 fs/inode.c:664
     dispose_list fs/inode.c:697 [inline]
     evict_inodes+0x5f8/0x690 fs/inode.c:747
     generic_shutdown_super+0x9d/0x2c0 fs/super.c:675
     kill_block_super+0x44/0x90 fs/super.c:1667
     kill_f2fs_super+0x303/0x3b0 fs/f2fs/super.c:4894
     deactivate_locked_super+0xc1/0x130 fs/super.c:484
     cleanup_mnt+0x426/0x4c0 fs/namespace.c:1256
     task_work_run+0x24a/0x300 kernel/task_work.c:180
     ptrace_notify+0x2cd/0x380 kernel/signal.c:2399
     ptrace_report_syscall include/linux/ptrace.h:411 [inline]
     ptrace_report_syscall_exit include/linux/ptrace.h:473 [inline]
     syscall_exit_work kernel/entry/common.c:251 [inline]
     syscall_exit_to_user_mode_prepare kernel/entry/common.c:278 [inline]
     __syscall_exit_to_user_mode_work kernel/entry/common.c:283 [inline]
     syscall_exit_to_user_mode+0x15c/0x280 kernel/entry/common.c:296
     do_syscall_64+0x50/0x110 arch/x86/entry/common.c:88
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    The root cause is:
    - do_sys_open
     - f2fs_lookup
      - __f2fs_find_entry
       - f2fs_i_depth_write
        - f2fs_mark_inode_dirty_sync
         - f2fs_dirty_inode
          - set_inode_flag(inode, FI_DIRTY_INODE)
    
    - umount
     - kill_f2fs_super
      - kill_block_super
       - generic_shutdown_super
        - sync_filesystem
        : sb is readonly, skip sync_filesystem()
        - evict_inodes
         - iput
          - f2fs_evict_inode
           - f2fs_bug_on(sbi, is_inode_flag_set(inode, FI_DIRTY_INODE))
           : trigger kernel panic
    
    When we try to repair i_current_depth in readonly filesystem, let's
    skip dirty inode to avoid panic in later f2fs_evict_inode().
    
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+31e4659a3fe953aec2f4@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-f2fs-devel/000000000000e890bc0609a55cff@google.com
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: turris-mox-rwtm: Do not complete if there are no waiters [+ + +]
Author: Marek Behún <kabel@kernel.org>
Date:   Mon Jul 15 13:59:10 2024 +0200

    firmware: turris-mox-rwtm: Do not complete if there are no waiters
    
    [ Upstream commit 0bafb172b111ab27251af0eb684e7bde9570ce4c ]
    
    Do not complete the "command done" completion if there are no waiters.
    This can happen if a wait_for_completion() timed out or was interrupted.
    
    Fixes: 389711b37493 ("firmware: Add Turris Mox rWTM firmware driver")
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Reviewed-by: Andy Shevchenko <andy@kernel.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: turris-mox-rwtm: Fix checking return value of wait_for_completion_timeout() [+ + +]
Author: Marek Behún <kabel@kernel.org>
Date:   Mon Jul 15 13:59:11 2024 +0200

    firmware: turris-mox-rwtm: Fix checking return value of wait_for_completion_timeout()
    
    [ Upstream commit 8467cfe821ac3526f7598682ad5f90689fa8cc49 ]
    
    The wait_for_completion_timeout() function returns 0 if timed out, and a
    positive value if completed. Fix the usage of this function.
    
    Fixes: 389711b37493 ("firmware: Add Turris Mox rWTM firmware driver")
    Fixes: 2eab59cf0d20 ("firmware: turris-mox-rwtm: fail probing when firmware does not support hwrng")
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andy@kernel.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: turris-mox-rwtm: Initialize completion before mailbox [+ + +]
Author: Marek Behún <kabel@kernel.org>
Date:   Mon Jul 15 13:59:12 2024 +0200

    firmware: turris-mox-rwtm: Initialize completion before mailbox
    
    [ Upstream commit 49e24c80d3c81c43e2a56101449e1eea32fcf292 ]
    
    Initialize the completion before the mailbox channel is requested.
    
    Fixes: 389711b37493 ("firmware: Add Turris Mox rWTM firmware driver")
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Reviewed-by: Andy Shevchenko <andy@kernel.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/ntfs3: Fix field-spanning write in INDEX_HDR [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Mon Jun 17 15:13:09 2024 +0300

    fs/ntfs3: Fix field-spanning write in INDEX_HDR
    
    [ Upstream commit 2f3e176fee66ac86ae387787bf06457b101d9f7a ]
    
    Fields flags and res[3] replaced with one 4 byte flags.
    
    Fixes: 4534a70b7056 ("fs/ntfs3: Add headers and misc files")
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Fix getting file type [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Tue Jun 4 10:41:39 2024 +0300

    fs/ntfs3: Fix getting file type
    
    [ Upstream commit 24c5100aceedcd47af89aaa404d4c96cd2837523 ]
    
    An additional condition causes the mft record to be read from disk
    and get the file type dt_type.
    
    Fixes: 22457c047ed97 ("fs/ntfs3: Modified fix directory element type detection")
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Fix transform resident to nonresident for compressed files [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Thu May 16 01:10:01 2024 +0300

    fs/ntfs3: Fix transform resident to nonresident for compressed files
    
    [ Upstream commit 25610ff98d4a34e6a85cbe4fd8671be6b0829f8f ]
    
    Сorrected calculation of required space len (in clusters)
    for attribute data storage in case of compression.
    
    Fixes: be71b5cba2e64 ("fs/ntfs3: Add attrib operations")
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Merge synonym COMPRESSION_UNIT and NTFS_LZNT_CUNIT [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Thu May 16 00:41:02 2024 +0300

    fs/ntfs3: Merge synonym COMPRESSION_UNIT and NTFS_LZNT_CUNIT
    
    [ Upstream commit 487f8d482a7e51a640b8f955a398f906a4f83951 ]
    
    COMPRESSION_UNIT and NTFS_LZNT_CUNIT mean the same thing
    (1u<<NTFS_LZNT_CUNIT) determines the size for compression (in clusters).
    
    COMPRESS_MAX_CLUSTER is not used in the code.
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Stable-dep-of: 25610ff98d4a ("fs/ntfs3: Fix transform resident to nonresident for compressed files")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Missed error return [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Mon Jun 17 13:43:09 2024 +0300

    fs/ntfs3: Missed error return
    
    [ Upstream commit 2cbbd96820255fff4f0ad1533197370c9ccc570b ]
    
    Fixes: 3f3b442b5ad2 ("fs/ntfs3: Add bitmap")
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Missed NI_FLAG_UPDATE_PARENT setting [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Mon Jun 3 20:36:03 2024 +0300

    fs/ntfs3: Missed NI_FLAG_UPDATE_PARENT setting
    
    [ Upstream commit 1c308ace1fd6de93bd0b7e1a5e8963ab27e2c016 ]
    
    Fixes: be71b5cba2e64 ("fs/ntfs3: Add attrib operations")
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Replace inode_trylock with inode_lock [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Thu May 30 10:54:07 2024 +0300

    fs/ntfs3: Replace inode_trylock with inode_lock
    
    [ Upstream commit 69505fe98f198ee813898cbcaf6770949636430b ]
    
    The issue was detected due to xfstest 465 failing.
    
    Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation")
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Update log->page_{mask,bits} if log->page_size changed [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Wed May 29 14:40:52 2024 +0800

    fs/ntfs3: Update log->page_{mask,bits} if log->page_size changed
    
    commit 2fef55d8f78383c8e6d6d4c014b9597375132696 upstream.
    
    If an NTFS file system is mounted to another system with different
    PAGE_SIZE from the original system, log->page_size will change in
    log_replay(), but log->page_{mask,bits} don't change correspondingly.
    This will cause a panic because "u32 bytes = log->page_size - page_off"
    will get a negative value in the later read_log_page().
    
    Cc: stable@vger.kernel.org
    Fixes: b46acd6a6a627d876898e ("fs/ntfs3: Add NTFS journal")
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs/ntfs3: Use ALIGN kernel macro [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Tue Oct 11 20:12:02 2022 +0300

    fs/ntfs3: Use ALIGN kernel macro
    
    [ Upstream commit 97a6815e50619377704e6566fb2b77c1aa4e2647 ]
    
    This way code will be more readable.
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Stable-dep-of: 25610ff98d4a ("fs/ntfs3: Fix transform resident to nonresident for compressed files")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/proc/task_mmu: indicate PM_FILE for PMD-mapped file THP [+ + +]
Author: David Hildenbrand <david@redhat.com>
Date:   Fri Jun 7 14:23:52 2024 +0200

    fs/proc/task_mmu: indicate PM_FILE for PMD-mapped file THP
    
    [ Upstream commit 3f9f022e975d930709848a86a1c79775b0585202 ]
    
    Patch series "fs/proc: move page_mapcount() to fs/proc/internal.h".
    
    With all other page_mapcount() users in the tree gone, move
    page_mapcount() to fs/proc/internal.h, rename it and extend the
    documentation to prevent future (ab)use.
    
    ... of course, I find some issues while working on that code that I sort
    first ;)
    
    We'll now only end up calling page_mapcount() [now
    folio_precise_page_mapcount()] on pages mapped via present page table
    entries.  Except for /proc/kpagecount, that still does questionable
    things, but we'll leave that legacy interface as is for now.
    
    Did a quick sanity check.  Likely we would want some better selfestest for
    /proc/$/pagemap + smaps.  I'll see if I can find some time to write some
    more.
    
    This patch (of 6):
    
    Looks like we never taught pagemap_pmd_range() about the existence of
    PMD-mapped file THPs.  Seems to date back to the times when we first added
    support for non-anon THPs in the form of shmem THP.
    
    Link: https://lkml.kernel.org/r/20240607122357.115423-1-david@redhat.com
    Link: https://lkml.kernel.org/r/20240607122357.115423-2-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Fixes: 800d8c63b2e9 ("shmem: add huge pages support")
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Reviewed-by: Lance Yang <ioworker0@gmail.com>
    Reviewed-by: Oscar Salvador <osalvador@suse.de>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs: don't allow non-init s_user_ns for filesystems without FS_USERNS_MOUNT [+ + +]
Author: Seth Forshee (DigitalOcean) <sforshee@kernel.org>
Date:   Wed Jul 24 09:53:59 2024 -0500

    fs: don't allow non-init s_user_ns for filesystems without FS_USERNS_MOUNT
    
    [ Upstream commit e1c5ae59c0f22f7fe5c07fb5513a29e4aad868c9 ]
    
    Christian noticed that it is possible for a privileged user to mount
    most filesystems with a non-initial user namespace in sb->s_user_ns.
    When fsopen() is called in a non-init namespace the caller's namespace
    is recorded in fs_context->user_ns. If the returned file descriptor is
    then passed to a process priviliged in init_user_ns, that process can
    call fsconfig(fd_fs, FSCONFIG_CMD_CREATE), creating a new superblock
    with sb->s_user_ns set to the namespace of the process which called
    fsopen().
    
    This is problematic. We cannot assume that any filesystem which does not
    set FS_USERNS_MOUNT has been written with a non-initial s_user_ns in
    mind, increasing the risk for bugs and security issues.
    
    Prevent this by returning EPERM from sget_fc() when FS_USERNS_MOUNT is
    not set for the filesystem and a non-initial user namespace will be
    used. sget() does not need to be updated as it always uses the user
    namespace of the current context, or the initial user namespace if
    SB_SUBMOUNT is set.
    
    Fixes: cb50b348c71f ("convenience helpers: vfs_get_super() and sget_fc()")
    Reported-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Seth Forshee (DigitalOcean) <sforshee@kernel.org>
    Link: https://lore.kernel.org/r/20240724-s_user_ns-fix-v1-1-895d07c94701@kernel.org
    Reviewed-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fuse: verify {g,u}id mount options correctly [+ + +]
Author: Eric Sandeen <sandeen@redhat.com>
Date:   Tue Jul 2 17:22:41 2024 -0500

    fuse: verify {g,u}id mount options correctly
    
    commit 525bd65aa759ec320af1dc06e114ed69733e9e23 upstream.
    
    As was done in
    0200679fc795 ("tmpfs: verify {g,u}id mount options correctly")
    we need to validate that the requested uid and/or gid is representable in
    the filesystem's idmapping.
    
    Cribbing from the above commit log,
    
    The contract for {g,u}id mount options and {g,u}id values in general set
    from userspace has always been that they are translated according to the
    caller's idmapping. In so far, fuse has been doing the correct thing.
    But since fuse is mountable in unprivileged contexts it is also
    necessary to verify that the resulting {k,g}uid is representable in the
    namespace of the superblock.
    
    Fixes: c30da2e981a7 ("fuse: convert to use the new mount API")
    Cc: stable@vger.kernel.org # 5.4+
    Signed-off-by: Eric Sandeen <sandeen@redhat.com>
    Link: https://lore.kernel.org/r/8f07d45d-c806-484d-a2e3-7a2199df1cd2@redhat.com
    Reviewed-by: Christian Brauner <brauner@kernel.org>
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
genirq/irqdesc: Honor caller provided affinity in alloc_desc() [+ + +]
Author: Shay Drory <shayd@nvidia.com>
Date:   Tue Aug 6 10:20:44 2024 +0300

    genirq/irqdesc: Honor caller provided affinity in alloc_desc()
    
    commit edbbaae42a56f9a2b39c52ef2504dfb3fb0a7858 upstream.
    
    Currently, whenever a caller is providing an affinity hint for an
    interrupt, the allocation code uses it to calculate the node and copies the
    cpumask into irq_desc::affinity.
    
    If the affinity for the interrupt is not marked 'managed' then the startup
    of the interrupt ignores irq_desc::affinity and uses the system default
    affinity mask.
    
    Prevent this by setting the IRQD_AFFINITY_SET flag for the interrupt in the
    allocator, which causes irq_setup_affinity() to use irq_desc::affinity on
    interrupt startup if the mask contains an online CPU.
    
    [ tglx: Massaged changelog ]
    
    Fixes: 45ddcecbfa94 ("genirq: Use affinity hint in irqdesc allocation")
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/all/20240806072044.837827-1-shayd@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
genirq: Allow irq_chip registration functions to take a const irq_chip [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Wed Feb 9 16:25:59 2022 +0000

    genirq: Allow irq_chip registration functions to take a const irq_chip
    
    [ Upstream commit 393e1280f765661cf39785e967676a4e57324126 ]
    
    In order to let a const irqchip be fed to the irqchip layer, adjust
    the various prototypes. An extra cast in irq_set_chip()() is required
    to avoid a warning.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Acked-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20220209162607.1118325-3-maz@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

genirq: Allow the PM device to originate from irq domain [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Tue Feb 1 12:02:59 2022 +0000

    genirq: Allow the PM device to originate from irq domain
    
    [ Upstream commit 1f8863bfb5ca500ea1c7669b16b1931ba27fce20 ]
    
    As a preparation to moving the reference to the device used for
    runtime power management, add a new 'dev' field to the irqdomain
    structure for that exact purpose.
    
    The irq_chip_pm_{get,put}() helpers are made aware of the dual
    location via a new private helper.
    
    No functional change intended.
    
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Tony Lindgren <tony@atomide.com>
    Acked-by: Bartosz Golaszewski <brgl@bgdev.pl>
    Link: https://lore.kernel.org/r/20220201120310.878267-2-maz@kernel.org
    Stable-dep-of: 33b1c47d1fc0 ("irqchip/imx-irqsteer: Handle runtime power management correctly")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gss_krb5: Fix the error handling path for crypto_sync_skcipher_setkey [+ + +]
Author: Gaosheng Cui <cuigaosheng1@huawei.com>
Date:   Sat Jul 6 14:50:08 2024 +0800

    gss_krb5: Fix the error handling path for crypto_sync_skcipher_setkey
    
    [ Upstream commit a3123341dc358952ce2bf8067fbdfb7eaadf71bb ]
    
    If we fail to call crypto_sync_skcipher_setkey, we should free the
    memory allocation for cipher, replace err_return with err_free_cipher
    to free the memory of cipher.
    
    Fixes: 4891f2d008e4 ("gss_krb5: import functionality to derive keys into the kernel")
    Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gve: Fix an edge case for TSO skb validity check [+ + +]
Author: Bailey Forrest <bcf@google.com>
Date:   Wed Jul 24 07:34:31 2024 -0700

    gve: Fix an edge case for TSO skb validity check
    
    commit 36e3b949e35964e22b9a57f960660fc599038dd4 upstream.
    
    The NIC requires each TSO segment to not span more than 10
    descriptors. NIC further requires each descriptor to not exceed
    16KB - 1 (GVE_TX_MAX_BUF_SIZE_DQO).
    
    The descriptors for an skb are generated by
    gve_tx_add_skb_no_copy_dqo() for DQO RDA queue format.
    gve_tx_add_skb_no_copy_dqo() loops through each skb frag and
    generates a descriptor for the entire frag if the frag size is
    not greater than GVE_TX_MAX_BUF_SIZE_DQO. If the frag size is
    greater than GVE_TX_MAX_BUF_SIZE_DQO, it is split into descriptor(s)
    of size GVE_TX_MAX_BUF_SIZE_DQO and a descriptor is generated for
    the remainder (frag size % GVE_TX_MAX_BUF_SIZE_DQO).
    
    gve_can_send_tso() checks if the descriptors thus generated for an
    skb would meet the requirement that each TSO-segment not span more
    than 10 descriptors. However, the current code misses an edge case
    when a TSO segment spans multiple descriptors within a large frag.
    This change fixes the edge case.
    
    gve_can_send_tso() relies on the assumption that max gso size (9728)
    is less than GVE_TX_MAX_BUF_SIZE_DQO and therefore within an skb
    fragment a TSO segment can never span more than 2 descriptors.
    
    Fixes: a57e5de476be ("gve: DQO: Add TX path")
    Signed-off-by: Praveen Kaligineedi <pkaligineedi@google.com>
    Signed-off-by: Bailey Forrest <bcf@google.com>
    Reviewed-by: Jeroen de Borst <jeroendb@google.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20240724143431.3343722-1-pkaligineedi@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hfs: fix to initialize fields of hfs_inode_info after hfs_alloc_inode() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Sun Jun 16 09:38:41 2024 +0800

    hfs: fix to initialize fields of hfs_inode_info after hfs_alloc_inode()
    
    commit 26a2ed107929a855155429b11e1293b83e6b2a8b upstream.
    
    Syzbot reports uninitialized value access issue as below:
    
    loop0: detected capacity change from 0 to 64
    =====================================================
    BUG: KMSAN: uninit-value in hfs_revalidate_dentry+0x307/0x3f0 fs/hfs/sysdep.c:30
     hfs_revalidate_dentry+0x307/0x3f0 fs/hfs/sysdep.c:30
     d_revalidate fs/namei.c:862 [inline]
     lookup_fast+0x89e/0x8e0 fs/namei.c:1649
     walk_component fs/namei.c:2001 [inline]
     link_path_walk+0x817/0x1480 fs/namei.c:2332
     path_lookupat+0xd9/0x6f0 fs/namei.c:2485
     filename_lookup+0x22e/0x740 fs/namei.c:2515
     user_path_at_empty+0x8b/0x390 fs/namei.c:2924
     user_path_at include/linux/namei.h:57 [inline]
     do_mount fs/namespace.c:3689 [inline]
     __do_sys_mount fs/namespace.c:3898 [inline]
     __se_sys_mount+0x66b/0x810 fs/namespace.c:3875
     __x64_sys_mount+0xe4/0x140 fs/namespace.c:3875
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    BUG: KMSAN: uninit-value in hfs_ext_read_extent fs/hfs/extent.c:196 [inline]
    BUG: KMSAN: uninit-value in hfs_get_block+0x92d/0x1620 fs/hfs/extent.c:366
     hfs_ext_read_extent fs/hfs/extent.c:196 [inline]
     hfs_get_block+0x92d/0x1620 fs/hfs/extent.c:366
     block_read_full_folio+0x4ff/0x11b0 fs/buffer.c:2271
     hfs_read_folio+0x55/0x60 fs/hfs/inode.c:39
     filemap_read_folio+0x148/0x4f0 mm/filemap.c:2426
     do_read_cache_folio+0x7c8/0xd90 mm/filemap.c:3553
     do_read_cache_page mm/filemap.c:3595 [inline]
     read_cache_page+0xfb/0x2f0 mm/filemap.c:3604
     read_mapping_page include/linux/pagemap.h:755 [inline]
     hfs_btree_open+0x928/0x1ae0 fs/hfs/btree.c:78
     hfs_mdb_get+0x260c/0x3000 fs/hfs/mdb.c:204
     hfs_fill_super+0x1fb1/0x2790 fs/hfs/super.c:406
     mount_bdev+0x628/0x920 fs/super.c:1359
     hfs_mount+0xcd/0xe0 fs/hfs/super.c:456
     legacy_get_tree+0x167/0x2e0 fs/fs_context.c:610
     vfs_get_tree+0xdc/0x5d0 fs/super.c:1489
     do_new_mount+0x7a9/0x16f0 fs/namespace.c:3145
     path_mount+0xf98/0x26a0 fs/namespace.c:3475
     do_mount fs/namespace.c:3488 [inline]
     __do_sys_mount fs/namespace.c:3697 [inline]
     __se_sys_mount+0x919/0x9e0 fs/namespace.c:3674
     __ia32_sys_mount+0x15b/0x1b0 fs/namespace.c:3674
     do_syscall_32_irqs_on arch/x86/entry/common.c:112 [inline]
     __do_fast_syscall_32+0xa2/0x100 arch/x86/entry/common.c:178
     do_fast_syscall_32+0x37/0x80 arch/x86/entry/common.c:203
     do_SYSENTER_32+0x1f/0x30 arch/x86/entry/common.c:246
     entry_SYSENTER_compat_after_hwframe+0x70/0x82
    
    Uninit was created at:
     __alloc_pages+0x9a6/0xe00 mm/page_alloc.c:4590
     __alloc_pages_node include/linux/gfp.h:238 [inline]
     alloc_pages_node include/linux/gfp.h:261 [inline]
     alloc_slab_page mm/slub.c:2190 [inline]
     allocate_slab mm/slub.c:2354 [inline]
     new_slab+0x2d7/0x1400 mm/slub.c:2407
     ___slab_alloc+0x16b5/0x3970 mm/slub.c:3540
     __slab_alloc mm/slub.c:3625 [inline]
     __slab_alloc_node mm/slub.c:3678 [inline]
     slab_alloc_node mm/slub.c:3850 [inline]
     kmem_cache_alloc_lru+0x64d/0xb30 mm/slub.c:3879
     alloc_inode_sb include/linux/fs.h:3018 [inline]
     hfs_alloc_inode+0x5a/0xc0 fs/hfs/super.c:165
     alloc_inode+0x83/0x440 fs/inode.c:260
     new_inode_pseudo fs/inode.c:1005 [inline]
     new_inode+0x38/0x4f0 fs/inode.c:1031
     hfs_new_inode+0x61/0x1010 fs/hfs/inode.c:186
     hfs_mkdir+0x54/0x250 fs/hfs/dir.c:228
     vfs_mkdir+0x49a/0x700 fs/namei.c:4126
     do_mkdirat+0x529/0x810 fs/namei.c:4149
     __do_sys_mkdirat fs/namei.c:4164 [inline]
     __se_sys_mkdirat fs/namei.c:4162 [inline]
     __x64_sys_mkdirat+0xc8/0x120 fs/namei.c:4162
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    It missed to initialize .tz_secondswest, .cached_start and .cached_blocks
    fields in struct hfs_inode_info after hfs_alloc_inode(), fix it.
    
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+3ae6be33a50b5aae4dab@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-fsdevel/0000000000005ad04005ee48897f@google.com
    Signed-off-by: Chao Yu <chao@kernel.org>
    Link: https://lore.kernel.org/r/20240616013841.2217-1-chao@kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hfsplus: fix to avoid false alarm of circular locking [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Fri Jun 7 22:23:04 2024 +0800

    hfsplus: fix to avoid false alarm of circular locking
    
    [ Upstream commit be4edd1642ee205ed7bbf66edc0453b1be1fb8d7 ]
    
    Syzbot report potential ABBA deadlock as below:
    
    loop0: detected capacity change from 0 to 1024
    ======================================================
    WARNING: possible circular locking dependency detected
    6.9.0-syzkaller-10323-g8f6a15f095a6 #0 Not tainted
    ------------------------------------------------------
    syz-executor171/5344 is trying to acquire lock:
    ffff88807cb980b0 (&tree->tree_lock){+.+.}-{3:3}, at: hfsplus_file_truncate+0x811/0xb50 fs/hfsplus/extents.c:595
    
    but task is already holding lock:
    ffff88807a930108 (&HFSPLUS_I(inode)->extents_lock){+.+.}-{3:3}, at: hfsplus_file_truncate+0x2da/0xb50 fs/hfsplus/extents.c:576
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (&HFSPLUS_I(inode)->extents_lock){+.+.}-{3:3}:
           lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
           __mutex_lock_common kernel/locking/mutex.c:608 [inline]
           __mutex_lock+0x136/0xd70 kernel/locking/mutex.c:752
           hfsplus_file_extend+0x21b/0x1b70 fs/hfsplus/extents.c:457
           hfsplus_bmap_reserve+0x105/0x4e0 fs/hfsplus/btree.c:358
           hfsplus_rename_cat+0x1d0/0x1050 fs/hfsplus/catalog.c:456
           hfsplus_rename+0x12e/0x1c0 fs/hfsplus/dir.c:552
           vfs_rename+0xbdb/0xf00 fs/namei.c:4887
           do_renameat2+0xd94/0x13f0 fs/namei.c:5044
           __do_sys_rename fs/namei.c:5091 [inline]
           __se_sys_rename fs/namei.c:5089 [inline]
           __x64_sys_rename+0x86/0xa0 fs/namei.c:5089
           do_syscall_x64 arch/x86/entry/common.c:52 [inline]
           do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
           entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    -> #0 (&tree->tree_lock){+.+.}-{3:3}:
           check_prev_add kernel/locking/lockdep.c:3134 [inline]
           check_prevs_add kernel/locking/lockdep.c:3253 [inline]
           validate_chain+0x18cb/0x58e0 kernel/locking/lockdep.c:3869
           __lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
           lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
           __mutex_lock_common kernel/locking/mutex.c:608 [inline]
           __mutex_lock+0x136/0xd70 kernel/locking/mutex.c:752
           hfsplus_file_truncate+0x811/0xb50 fs/hfsplus/extents.c:595
           hfsplus_setattr+0x1ce/0x280 fs/hfsplus/inode.c:265
           notify_change+0xb9d/0xe70 fs/attr.c:497
           do_truncate+0x220/0x310 fs/open.c:65
           handle_truncate fs/namei.c:3308 [inline]
           do_open fs/namei.c:3654 [inline]
           path_openat+0x2a3d/0x3280 fs/namei.c:3807
           do_filp_open+0x235/0x490 fs/namei.c:3834
           do_sys_openat2+0x13e/0x1d0 fs/open.c:1406
           do_sys_open fs/open.c:1421 [inline]
           __do_sys_creat fs/open.c:1497 [inline]
           __se_sys_creat fs/open.c:1491 [inline]
           __x64_sys_creat+0x123/0x170 fs/open.c:1491
           do_syscall_x64 arch/x86/entry/common.c:52 [inline]
           do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
           entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&HFSPLUS_I(inode)->extents_lock);
                                   lock(&tree->tree_lock);
                                   lock(&HFSPLUS_I(inode)->extents_lock);
      lock(&tree->tree_lock);
    
    This is a false alarm as tree_lock mutex are different, one is
    from sbi->cat_tree, and another is from sbi->ext_tree:
    
    Thread A                        Thread B
    - hfsplus_rename
     - hfsplus_rename_cat
      - hfs_find_init
       - mutext_lock(cat_tree->tree_lock)
                                    - hfsplus_setattr
                                     - hfsplus_file_truncate
                                      - mutex_lock(hip->extents_lock)
                                      - hfs_find_init
                                       - mutext_lock(ext_tree->tree_lock)
      - hfs_bmap_reserve
       - hfsplus_file_extend
        - mutex_lock(hip->extents_lock)
    
    So, let's call mutex_lock_nested for tree_lock mutex lock, and pass
    correct lock class for it.
    
    Fixes: 31651c607151 ("hfsplus: avoid deadlock on file truncation")
    Reported-by: syzbot+6030b3b1b9bf70e538c4@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-fsdevel/000000000000e37a4005ef129563@google.com
    Cc: Ernesto A. Fernández <ernesto.mnd.fernandez@gmail.com>
    Signed-off-by: Chao Yu <chao@kernel.org>
    Link: https://lore.kernel.org/r/20240607142304.455441-1-chao@kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: wacom: Modify pen IDs [+ + +]
Author: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>
Date:   Tue Jul 9 14:57:28 2024 +0900

    HID: wacom: Modify pen IDs
    
    commit f0d17d696dfce77c9abc830e4ac2d677890a2dad upstream.
    
    The pen ID, 0x80842, was not the correct ID for wacom driver to
    treat. The ID was corrected to 0x8842.
    Also, 0x4200 was not the expected ID used on any Wacom device.
    Therefore, 0x4200 was removed.
    
    Signed-off-by: Tatsunosuke Tobita <tatsunosuke.tobita@wacom.com>
    Signed-off-by: Tatsunosuke Tobita <tatsunosuke.wacom@gmail.com>
    Fixes: bfdc750c4cb2 ("HID: wacom: add three styli to wacom_intuos_get_tool_type")
    Cc: stable@kernel.org #6.2
    Reviewed-by: Ping Cheng <ping.cheng@wacom.com>
    Link: https://patch.msgid.link/20240709055729.17158-1-tatsunosuke.wacom@gmail.com
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (adt7475) Fix default duty on fan is disabled [+ + +]
Author: Wayne Tung <chineweff@gmail.com>
Date:   Mon Jul 1 15:32:52 2024 +0800

    hwmon: (adt7475) Fix default duty on fan is disabled
    
    [ Upstream commit 39b24cced70fdc336dbc0070f8b3bde61d8513a8 ]
    
    According to the comments on fan is disabled, we change to manual mode
    and set the duty cycle to 0.
    For setting the duty cycle part, the register is wrong. Fix it.
    
    Fixes: 1c301fc5394f ("hwmon: Add a driver for the ADT7475 hardware monitoring chip")
    Signed-off-by: Wayne Tung <chineweff@gmail.com>
    Link: https://lore.kernel.org/r/20240701073252.317397-1-chineweff@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (max6697) Fix swapped temp{1,8} critical alarms [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Sat Jul 13 12:03:53 2024 -0700

    hwmon: (max6697) Fix swapped temp{1,8} critical alarms
    
    [ Upstream commit 1ea3fd1eb9869fcdcbc9c68f9728bfc47b9503f1 ]
    
    The critical alarm bit for the local temperature sensor (temp1) is in
    bit 7 of register 0x45 (not bit 6), and the critical alarm bit for remote
    temperature sensor 7 (temp8) is in bit 6 (not bit 7).
    
    This only affects MAX6581 since all other chips supported by this driver
    do not support those critical alarms.
    
    Fixes: 5372d2d71c46 ("hwmon: Driver for Maxim MAX6697 and compatibles")
    Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (max6697) Fix underflow when writing limit attributes [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Sat Jul 13 14:26:19 2024 -0700

    hwmon: (max6697) Fix underflow when writing limit attributes
    
    [ Upstream commit cbf7467828cd4ec7ceac7a8b5b5ddb2f69f07b0e ]
    
    Using DIV_ROUND_CLOSEST() on an unbound value can result in underflows.
    Indeed, module test scripts report:
    
    temp1_max: Suspected underflow: [min=0, read 255000, written -9223372036854775808]
    temp1_crit: Suspected underflow: [min=0, read 255000, written -9223372036854775808]
    
    Fix by introducing an extra set of clamping.
    
    Fixes: 5372d2d71c46 ("hwmon: Driver for Maxim MAX6697 and compatibles")
    Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwrng: amd - Convert PCIBIOS_* return codes to errnos [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Mon May 27 16:26:15 2024 +0300

    hwrng: amd - Convert PCIBIOS_* return codes to errnos
    
    commit 14cba6ace79627a57fb9058582b03f0ed3832390 upstream.
    
    amd_rng_mod_init() uses pci_read_config_dword() that returns PCIBIOS_*
    codes. The return code is then returned as is but amd_rng_mod_init() is
    a module_init() function that should return normal errnos.
    
    Convert PCIBIOS_* returns code using pcibios_err_to_errno() into normal
    errno before returning it.
    
    Fixes: 96d63c0297cc ("[PATCH] Add AMD HW RNG driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i2c: smbus: Improve handling of stuck alerts [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Mon Jan 10 09:28:56 2022 -0800

    i2c: smbus: Improve handling of stuck alerts
    
    [ Upstream commit 37c526f00bc1c4f847fc800085f8f009d2e11be6 ]
    
    The following messages were observed while testing alert functionality
    on systems with multiple I2C devices on a single bus if alert was active
    on more than one chip.
    
    smbus_alert 3-000c: SMBALERT# from dev 0x0c, flag 0
    smbus_alert 3-000c: no driver alert()!
    
    and:
    
    smbus_alert 3-000c: SMBALERT# from dev 0x28, flag 0
    
    Once it starts, this message repeats forever at high rate. There is no
    device at any of the reported addresses.
    
    Analysis shows that this is seen if multiple devices have the alert pin
    active. Apparently some devices do not support SMBus arbitration correctly.
    They keep sending address bits after detecting an address collision and
    handle the collision not at all or too late.
    Specifically, address 0x0c is seen with ADT7461A at address 0x4c and
    ADM1021 at address 0x18 if alert is active on both chips. Address 0x28 is
    seen with ADT7483 at address 0x2a and ADT7461 at address 0x4c if alert is
    active on both chips.
    
    Once the system is in bad state (alert is set by more than one chip),
    it often only recovers by power cycling.
    
    To reduce the impact of this problem, abort the endless loop in
    smbus_alert() if the same address is read more than once and not
    handled by a driver.
    
    Fixes: b5527a7766f0 ("i2c: Add SMBus alert support")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    [wsa: it also fixed an interrupt storm in one of my experiments]
    Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    [wsa: rebased, moved a comment as well, improved the 'invalid' value]
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: smbus: Send alert notifications to all devices if source not found [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Tue Jul 30 07:19:41 2024 -0700

    i2c: smbus: Send alert notifications to all devices if source not found
    
    [ Upstream commit f6c29f710c1ff2590109f83be3e212b86c01e0f3 ]
    
    If a SMBus alert is received and the originating device is not found,
    the reason may be that the address reported on the SMBus alert address
    is corrupted, for example because multiple devices asserted alert and
    do not correctly implement SMBus arbitration.
    
    If this happens, call alert handlers on all devices connected to the
    given I2C bus, in the hope that this cleans up the situation.
    
    This change reliably fixed the problem on a system with multiple devices
    on a single bus. Example log where the device on address 0x18 (ADM1021)
    and on address 0x4c (ADT7461A) both had the alert line asserted:
    
    smbus_alert 3-000c: SMBALERT# from dev 0x0c, flag 0
    smbus_alert 3-000c: no driver alert()!
    smbus_alert 3-000c: SMBALERT# from dev 0x0c, flag 0
    smbus_alert 3-000c: no driver alert()!
    lm90 3-0018: temp1 out of range, please check!
    lm90 3-0018: Disabling ALERT#
    lm90 3-0029: Everything OK
    lm90 3-002a: Everything OK
    lm90 3-004c: temp1 out of range, please check!
    lm90 3-004c: temp2 out of range, please check!
    lm90 3-004c: Disabling ALERT#
    
    Fixes: b5527a7766f0 ("i2c: Add SMBus alert support")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    [wsa: fixed a typo in the commit message]
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: elan_i2c - do not leave interrupt disabled on suspend failure [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Thu Jun 6 23:02:48 2024 -0700

    Input: elan_i2c - do not leave interrupt disabled on suspend failure
    
    [ Upstream commit 5f82c1e04721e7cd98e604eb4e58f0724d8e5a65 ]
    
    Make sure interrupts are not left disabled when we fail to suspend the
    touch controller.
    
    Fixes: 6696777c6506 ("Input: add driver for Elan I2C/SMbus touchpad")
    Link: https://lore.kernel.org/r/ZmKiiL-1wzKrhqBj@google.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: qt1050 - handle CHIP_ID reading error [+ + +]
Author: Andrei Lalaev <andrei.lalaev@anton-paar.com>
Date:   Mon Jun 17 20:30:18 2024 +0200

    Input: qt1050 - handle CHIP_ID reading error
    
    [ Upstream commit 866a5c7e2781cf1b019072288f1f5c64186dcb63 ]
    
    If the device is missing, we get the following error:
    
      qt1050 3-0041: ID -1340767592 not supported
    
    Let's handle this situation and print more informative error
    when reading of CHIP_ID fails:
    
      qt1050 3-0041: Failed to read chip ID: -6
    
    Fixes: cbebf5addec1 ("Input: qt1050 - add Microchip AT42QT1050 support")
    Signed-off-by: Andrei Lalaev <andrei.lalaev@anton-paar.com>
    Reviewed-by: Marco Felsch <m.felsch@pengutronix.de>
    Link: https://lore.kernel.org/r/20240617183018.916234-1-andrey.lalaev@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/io-wq: limit retrying worker initialisation [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Jul 10 18:58:17 2024 +0100

    io_uring/io-wq: limit retrying worker initialisation
    
    commit 0453aad676ff99787124b9b3af4a5f59fbe808e2 upstream.
    
    If io-wq worker creation fails, we retry it by queueing up a task_work.
    tasK_work is needed because it should be done from the user process
    context. The problem is that retries are not limited, and if queueing a
    task_work is the reason for the failure, we might get into an infinite
    loop.
    
    It doesn't seem to happen now but it would with the following patch
    executing task_work in the freezer's loop. For now, arbitrarily limit the
    number of attempts to create a worker.
    
    Cc: stable@vger.kernel.org
    Fixes: 3146cba99aa28 ("io-wq: make worker creation resilient against signals")
    Reported-by: Julian Orth <ju.orth@gmail.com>
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/8280436925db88448c7c85c6656edee1a43029ea.1720634146.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring: tighten task exit cancellations [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Jul 24 12:16:16 2024 +0100

    io_uring: tighten task exit cancellations
    
    commit f8b632e89a101dae349a7b212c1771d7925f441b upstream.
    
    io_uring_cancel_generic() should retry if any state changes like a
    request is completed, however in case of a task exit it only goes for
    another loop and avoids schedule() if any tracked (i.e. REQ_F_INFLIGHT)
    request got completed.
    
    Let's assume we have a non-tracked request executing in iowq and a
    tracked request linked to it. Let's also assume
    io_uring_cancel_generic() fails to find and cancel the request, i.e.
    via io_run_local_work(), which may happen as io-wq has gaps.
    Next, the request logically completes, io-wq still hold a ref but queues
    it for completion via tw, which happens in
    io_uring_try_cancel_requests(). After, right before prepare_to_wait()
    io-wq puts the request, grabs the linked one and tries executes it, e.g.
    arms polling. Finally the cancellation loop calls prepare_to_wait(),
    there are no tw to run, no tracked request was completed, so the
    tctx_inflight() check passes and the task is put to indefinite sleep.
    
    Cc: stable@vger.kernel.org
    Fixes: 3f48cf18f886c ("io_uring: unify files and task cancel")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/acac7311f4e02ce3c43293f8f1fda9c705d158f1.1721819383.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iommu: sprd: Avoid NULL deref in sprd_iommu_hw_en [+ + +]
Author: Artem Chernyshev <artem.chernyshev@red-soft.ru>
Date:   Tue Jul 16 15:55:14 2024 +0300

    iommu: sprd: Avoid NULL deref in sprd_iommu_hw_en
    
    [ Upstream commit 630482ee0653decf9e2482ac6181897eb6cde5b8 ]
    
    In sprd_iommu_cleanup() before calling function sprd_iommu_hw_en()
    dom->sdev is equal to NULL, which leads to null dereference.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 9afea57384d4 ("iommu/sprd: Release dma buffer to avoid memory leak")
    Signed-off-by: Artem Chernyshev <artem.chernyshev@red-soft.ru>
    Reviewed-by: Chunyan Zhang <zhang.lyra@gmail.com>
    Link: https://lore.kernel.org/r/20240716125522.3690358-1-artem.chernyshev@red-soft.ru
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv4: Fix incorrect source address in Record Route option [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Thu Jul 18 15:34:07 2024 +0300

    ipv4: Fix incorrect source address in Record Route option
    
    [ Upstream commit cc73bbab4b1fb8a4f53a24645871dafa5f81266a ]
    
    The Record Route IP option records the addresses of the routers that
    routed the packet. In the case of forwarded packets, the kernel performs
    a route lookup via fib_lookup() and fills in the preferred source
    address of the matched route.
    
    The lookup is performed with the DS field of the forwarded packet, but
    using the RT_TOS() macro which only masks one of the two ECN bits. If
    the packet is ECT(0) or CE, the matched route might be different than
    the route via which the packet was forwarded as the input path masks
    both of the ECN bits, resulting in the wrong address being filled in the
    Record Route option.
    
    Fix by masking both of the ECN bits.
    
    Fixes: 8e36360ae876 ("ipv4: Remove route key identity dependencies in ip_rt_get_source().")
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Guillaume Nault <gnault@redhat.com>
    Link: https://patch.msgid.link/20240718123407.434778-1-idosch@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: fix ndisc_is_useropt() handling for PIO [+ + +]
Author: Maciej Żenczykowski <maze@google.com>
Date:   Mon Jul 29 17:17:48 2024 -0700

    ipv6: fix ndisc_is_useropt() handling for PIO
    
    [ Upstream commit a46c68debf3be3a477a69ccbf0a1d050df841676 ]
    
    The current logic only works if the PIO is between two
    other ND user options.  This fixes it so that the PIO
    can also be either before or after other ND user options
    (for example the first or last option in the RA).
    
    side note: there's actually Android tests verifying
    a portion of the old broken behaviour, so:
      https://android-review.googlesource.com/c/kernel/tests/+/3196704
    fixes those up.
    
    Cc: Jen Linkova <furry@google.com>
    Cc: Lorenzo Colitti <lorenzo@google.com>
    Cc: Patrick Rohr <prohr@google.com>
    Cc: David Ahern <dsahern@kernel.org>
    Cc: YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Maciej Żenczykowski <maze@google.com>
    Fixes: 048c796beb6e ("ipv6: adjust ndisc_is_useropt() to also return true for PIO")
    Link: https://patch.msgid.link/20240730001748.147636-1-maze@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: take care of scope when choosing the src addr [+ + +]
Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date:   Wed Jul 10 10:14:29 2024 +0200

    ipv6: take care of scope when choosing the src addr
    
    commit abb9a68d2c64dd9b128ae1f2e635e4d805e7ce64 upstream.
    
    When the source address is selected, the scope must be checked. For
    example, if a loopback address is assigned to the vrf device, it must not
    be chosen for packets sent outside.
    
    CC: stable@vger.kernel.org
    Fixes: afbac6010aec ("net: ipv6: Address selection needs to consider L3 domains")
    Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20240710081521.3809742-4-nicolas.dichtel@6wind.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipvs: Avoid unnecessary calls to skb_is_gso_sctp [+ + +]
Author: Ismael Luceno <iluceno@suse.de>
Date:   Thu May 23 18:54:44 2024 +0200

    ipvs: Avoid unnecessary calls to skb_is_gso_sctp
    
    [ Upstream commit 53796b03295cf7ab1fc8600016fa6dfbf4a494a0 ]
    
    In the context of the SCTP SNAT/DNAT handler, these calls can only
    return true.
    
    Fixes: e10d3ba4d434 ("ipvs: Fix checksumming on GSO of SCTP packets")
    Signed-off-by: Ismael Luceno <iluceno@suse.de>
    Acked-by: Julian Anastasov <ja@ssi.bg>
    Acked-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/imx-irqsteer: Add runtime PM support [+ + +]
Author: Lucas Stach <l.stach@pengutronix.de>
Date:   Wed Apr 6 18:37:01 2022 +0200

    irqchip/imx-irqsteer: Add runtime PM support
    
    [ Upstream commit 4730d2233311d86cad9dc510318d1b40e4b53cf2 ]
    
    There are now SoCs that integrate the irqsteer controller within
    a separate power domain. In order to allow this domain to be
    powered down when not needed, add runtime PM support to the driver.
    
    Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20220406163701.1277930-2-l.stach@pengutronix.de
    Stable-dep-of: 33b1c47d1fc0 ("irqchip/imx-irqsteer: Handle runtime power management correctly")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

irqchip/imx-irqsteer: Constify irq_chip struct [+ + +]
Author: Lucas Stach <l.stach@pengutronix.de>
Date:   Wed Apr 6 18:37:00 2022 +0200

    irqchip/imx-irqsteer: Constify irq_chip struct
    
    [ Upstream commit e9a50f12e579a48e124ac5adb93dafc35f0a46b8 ]
    
    The imx_irqsteer_irq_chip struct is constant data.
    
    Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20220406163701.1277930-1-l.stach@pengutronix.de
    Stable-dep-of: 33b1c47d1fc0 ("irqchip/imx-irqsteer: Handle runtime power management correctly")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

irqchip/imx-irqsteer: Handle runtime power management correctly [+ + +]
Author: Shenwei Wang <shenwei.wang@nxp.com>
Date:   Wed Jul 3 11:32:50 2024 -0500

    irqchip/imx-irqsteer: Handle runtime power management correctly
    
    [ Upstream commit 33b1c47d1fc0b5f06a393bb915db85baacba18ea ]
    
    The power domain is automatically activated from clk_prepare(). However, on
    certain platforms like i.MX8QM and i.MX8QXP, the power-on handling invokes
    sleeping functions, which triggers the 'scheduling while atomic' bug in the
    context switch path during device probing:
    
     BUG: scheduling while atomic: kworker/u13:1/48/0x00000002
     Call trace:
      __schedule_bug+0x54/0x6c
      __schedule+0x7f0/0xa94
      schedule+0x5c/0xc4
      schedule_preempt_disabled+0x24/0x40
      __mutex_lock.constprop.0+0x2c0/0x540
      __mutex_lock_slowpath+0x14/0x20
      mutex_lock+0x48/0x54
      clk_prepare_lock+0x44/0xa0
      clk_prepare+0x20/0x44
      imx_irqsteer_resume+0x28/0xe0
      pm_generic_runtime_resume+0x2c/0x44
      __genpd_runtime_resume+0x30/0x80
      genpd_runtime_resume+0xc8/0x2c0
      __rpm_callback+0x48/0x1d8
      rpm_callback+0x6c/0x78
      rpm_resume+0x490/0x6b4
      __pm_runtime_resume+0x50/0x94
      irq_chip_pm_get+0x2c/0xa0
      __irq_do_set_handler+0x178/0x24c
      irq_set_chained_handler_and_data+0x60/0xa4
      mxc_gpio_probe+0x160/0x4b0
    
    Cure this by implementing the irq_bus_lock/sync_unlock() interrupt chip
    callbacks and handle power management in them as they are invoked from
    non-atomic context.
    
    [ tglx: Rewrote change log, added Fixes tag ]
    
    Fixes: 0136afa08967 ("irqchip: Add driver for imx-irqsteer controller")
    Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240703163250.47887-1-shenwei.wang@nxp.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/mbigen: Fix mbigen node address layout [+ + +]
Author: Yipeng Zou <zouyipeng@huawei.com>
Date:   Tue Jul 30 09:44:00 2024 +0800

    irqchip/mbigen: Fix mbigen node address layout
    
    [ Upstream commit 6be6cba9c4371d27f78d900ccfe34bb880d9ee20 ]
    
    The mbigen interrupt chip has its per node registers located in a
    contiguous region of page sized chunks. The code maps them into virtual
    address space as a contiguous region and determines the address of a node
    by using the node ID as index.
    
                        mbigen chip
           |-----------------|------------|--------------|
       mgn_node_0         mgn_node_1     ...         mgn_node_i
    |--------------|   |--------------|       |----------------------|
    [0x0000, 0x0x0FFF] [0x1000, 0x1FFF]    [i*0x1000, (i+1)*0x1000 - 1]
    
    This works correctly up to 10 nodes, but then fails because the 11th's
    array slot is used for the MGN_CLEAR registers.
    
                             mbigen chip
        |-----------|--------|--------|---------------|--------|
    mgn_node_0  mgn_node_1  ...  mgn_clear_register  ...   mgn_node_i
                                |-----------------|
                                 [0xA000, 0xAFFF]
    
    Skip the MGN_CLEAR register space when calculating the offset for node IDs
    greater than or equal to ten.
    
    Fixes: a6c2f87b8820 ("irqchip/mbigen: Implement the mbigen irq chip operation functions")
    Signed-off-by: Yipeng Zou <zouyipeng@huawei.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/all/20240730014400.1751530-1-zouyipeng@huawei.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/meson-gpio: Convert meson_gpio_irq_controller::lock to 'raw_spinlock_t' [+ + +]
Author: Arseniy Krasnov <avkrasnov@salutedevices.com>
Date:   Mon Jul 29 16:18:50 2024 +0300

    irqchip/meson-gpio: Convert meson_gpio_irq_controller::lock to 'raw_spinlock_t'
    
    [ Upstream commit f872d4af79fe8c71ae291ce8875b477e1669a6c7 ]
    
    This lock is acquired under irq_desc::lock with interrupts disabled.
    
    When PREEMPT_RT is enabled, 'spinlock_t' becomes preemptible, which results
    in invalid lock acquire context;
    
      [ BUG: Invalid wait context ]
      swapper/0/1 is trying to lock:
      ffff0000008fed30 (&ctl->lock){....}-{3:3}, at: meson_gpio_irq_update_bits0
      other info that might help us debug this:
      context-{5:5}
      3 locks held by swapper/0/1:
       #0: ffff0000003cd0f8 (&dev->mutex){....}-{4:4}, at: __driver_attach+0x90c
       #1: ffff000004714650 (&desc->request_mutex){+.+.}-{4:4}, at: __setup_irq0
       #2: ffff0000047144c8 (&irq_desc_lock_class){-.-.}-{2:2}, at: __setup_irq0
      stack backtrace:
      CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.9.9-sdkernel #1
      Call trace:
       _raw_spin_lock_irqsave+0x60/0x88
       meson_gpio_irq_update_bits+0x34/0x70
       meson8_gpio_irq_set_type+0x78/0xc4
       meson_gpio_irq_set_type+0x30/0x60
       __irq_set_trigger+0x60/0x180
       __setup_irq+0x30c/0x6e0
       request_threaded_irq+0xec/0x1a4
    
    Fixes: 215f4cc0fb20 ("irqchip/meson: Add support for gpio interrupt controller")
    Signed-off-by: Arseniy Krasnov <avkrasnov@salutedevices.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20240729131850.3015508-1-avkrasnov@salutedevices.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

irqchip/meson-gpio: support more than 8 channels gpio irq [+ + +]
Author: Qianggui Song <qianggui.song@amlogic.com>
Date:   Fri Feb 25 13:52:04 2022 +0800

    irqchip/meson-gpio: support more than 8 channels gpio irq
    
    [ Upstream commit cc311074f681443266ed9f5969a5b5a0e833c5bc ]
    
    Current meson gpio irqchip driver only support 8 channels for gpio irq
    line, later chips may have more then 8 channels, so need to modify code
    to support more.
    
    Signed-off-by: Qianggui Song <qianggui.song@amlogic.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20220225055207.1048-3-qianggui.song@amlogic.com
    Stable-dep-of: f872d4af79fe ("irqchip/meson-gpio: Convert meson_gpio_irq_controller::lock to 'raw_spinlock_t'")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/xilinx: Fix shift out of bounds [+ + +]
Author: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Date:   Fri Aug 9 12:32:24 2024 +0530

    irqchip/xilinx: Fix shift out of bounds
    
    commit d73f0f49daa84176c3beee1606e73c7ffb6af8b2 upstream.
    
    The device tree property 'xlnx,kind-of-intr' is sanity checked that the
    bitmask contains only set bits which are in the range of the number of
    interrupts supported by the controller.
    
    The check is done by shifting the mask right by the number of supported
    interrupts and checking the result for zero.
    
    The data type of the mask is u32 and the number of supported interrupts is
    up to 32. In case of 32 interrupts the shift is out of bounds, resulting in
    a mismatch warning. The out of bounds condition is also reported by UBSAN:
    
      UBSAN: shift-out-of-bounds in irq-xilinx-intc.c:332:22
      shift exponent 32 is too large for 32-bit type 'unsigned int'
    
    Fix it by promoting the mask to u64 for the test.
    
    Fixes: d50466c90724 ("microblaze: intc: Refactor DT sanity check")
    Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/1723186944-3571957-1-git-send-email-radhey.shyam.pandey@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
irqdomain: Fixed unbalanced fwnode get and put [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Fri Jun 14 19:32:04 2024 +0200

    irqdomain: Fixed unbalanced fwnode get and put
    
    [ Upstream commit 6ce3e98184b625d2870991880bf9586ded7ea7f9 ]
    
    fwnode_handle_get(fwnode) is called when a domain is created with fwnode
    passed as a function parameter. fwnode_handle_put(domain->fwnode) is called
    when the domain is destroyed but during the creation a path exists that
    does not set domain->fwnode.
    
    If this path is taken, the fwnode get will never be put.
    
    To avoid the unbalanced get and put, set domain->fwnode unconditionally.
    
    Fixes: d59f6617eef0 ("genirq: Allow fwnode to carry name information only")
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240614173232.1184015-4-herve.codina@bootlin.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jbd2: avoid memleak in jbd2_journal_write_metadata_buffer [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Tue May 14 19:24:30 2024 +0800

    jbd2: avoid memleak in jbd2_journal_write_metadata_buffer
    
    [ Upstream commit cc102aa24638b90e04364d64e4f58a1fa91a1976 ]
    
    The new_bh is from alloc_buffer_head, we should call free_buffer_head to
    free it in error case.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240514112438.1269037-2-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jbd2: make jbd2_journal_get_max_txn_bufs() internal [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Mon Jun 24 19:01:17 2024 +0200

    jbd2: make jbd2_journal_get_max_txn_bufs() internal
    
    commit 4aa99c71e42ad60178c1154ec24e3df9c684fb67 upstream.
    
    There's no reason to have jbd2_journal_get_max_txn_bufs() public
    function. Currently all users are internal and can use
    journal->j_max_transaction_buffers instead. This saves some unnecessary
    recomputations of the limit as a bonus which becomes important as this
    function gets more complex in the following patch.
    
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Link: https://patch.msgid.link/20240624170127.3253-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
jfs: Fix array-index-out-of-bounds in diFree [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Thu May 30 22:28:09 2024 +0900

    jfs: Fix array-index-out-of-bounds in diFree
    
    [ Upstream commit f73f969b2eb39ad8056f6c7f3a295fa2f85e313a ]
    
    Reported-by: syzbot+241c815bda521982cb49@syzkaller.appspotmail.com
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kbuild: Fix '-S -c' in x86 stack protector scripts [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Fri Jul 26 11:05:00 2024 -0700

    kbuild: Fix '-S -c' in x86 stack protector scripts
    
    commit 3415b10a03945b0da4a635e146750dfe5ce0f448 upstream.
    
    After a recent change in clang to stop consuming all instances of '-S'
    and '-c' [1], the stack protector scripts break due to the kernel's use
    of -Werror=unused-command-line-argument to catch cases where flags are
    not being properly consumed by the compiler driver:
    
      $ echo | clang -o - -x c - -S -c -Werror=unused-command-line-argument
      clang: error: argument unused during compilation: '-c' [-Werror,-Wunused-command-line-argument]
    
    This results in CONFIG_STACKPROTECTOR getting disabled because
    CONFIG_CC_HAS_SANE_STACKPROTECTOR is no longer set.
    
    '-c' and '-S' both instruct the compiler to stop at different stages of
    the pipeline ('-S' after compiling, '-c' after assembling), so having
    them present together in the same command makes little sense. In this
    case, the test wants to stop before assembling because it is looking at
    the textual assembly output of the compiler for either '%fs' or '%gs',
    so remove '-c' from the list of arguments to resolve the error.
    
    All versions of GCC continue to work after this change, along with
    versions of clang that do or do not contain the change mentioned above.
    
    Cc: stable@vger.kernel.org
    Fixes: 4f7fd4d7a791 ("[PATCH] Add the -fstack-protector option to the CFLAGS")
    Fixes: 60a5317ff0f4 ("x86: implement x86_32 stack protector")
    Link: https://github.com/llvm/llvm-project/commit/6461e537815f7fa68cef06842505353cf5600e9c [1]
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kcov: properly check for softirq context [+ + +]
Author: Andrey Konovalov <andreyknvl@gmail.com>
Date:   Mon Jul 29 04:21:58 2024 +0200

    kcov: properly check for softirq context
    
    commit 7d4df2dad312f270d62fecb0e5c8b086c6d7dcfc upstream.
    
    When collecting coverage from softirqs, KCOV uses in_serving_softirq() to
    check whether the code is running in the softirq context.  Unfortunately,
    in_serving_softirq() is > 0 even when the code is running in the hardirq
    or NMI context for hardirqs and NMIs that happened during a softirq.
    
    As a result, if a softirq handler contains a remote coverage collection
    section and a hardirq with another remote coverage collection section
    happens during handling the softirq, KCOV incorrectly detects a nested
    softirq coverate collection section and prints a WARNING, as reported by
    syzbot.
    
    This issue was exposed by commit a7f3813e589f ("usb: gadget: dummy_hcd:
    Switch to hrtimer transfer scheduler"), which switched dummy_hcd to using
    hrtimer and made the timer's callback be executed in the hardirq context.
    
    Change the related checks in KCOV to account for this behavior of
    in_serving_softirq() and make KCOV ignore remote coverage collection
    sections in the hardirq and NMI contexts.
    
    This prevents the WARNING printed by syzbot but does not fix the inability
    of KCOV to collect coverage from the __usb_hcd_giveback_urb when dummy_hcd
    is in use (caused by a7f3813e589f); a separate patch is required for that.
    
    Link: https://lkml.kernel.org/r/20240729022158.92059-1-andrey.konovalov@linux.dev
    Fixes: 5ff3b30ab57d ("kcov: collect coverage from interrupts")
    Signed-off-by: Andrey Konovalov <andreyknvl@gmail.com>
    Reported-by: syzbot+2388cdaeb6b10f0c13ac@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=2388cdaeb6b10f0c13ac
    Acked-by: Marco Elver <elver@google.com>
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Aleksandr Nogikh <nogikh@google.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Marcello Sylvester Bauer <sylv@sylv.io>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kdb: address -Wformat-security warnings [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue May 28 14:11:48 2024 +0200

    kdb: address -Wformat-security warnings
    
    [ Upstream commit 70867efacf4370b6c7cdfc7a5b11300e9ef7de64 ]
    
    When -Wformat-security is not disabled, using a string pointer
    as a format causes a warning:
    
    kernel/debug/kdb/kdb_io.c: In function 'kdb_read':
    kernel/debug/kdb/kdb_io.c:365:36: error: format not a string literal and no format arguments [-Werror=format-security]
      365 |                         kdb_printf(kdb_prompt_str);
          |                                    ^~~~~~~~~~~~~~
    kernel/debug/kdb/kdb_io.c: In function 'kdb_getstr':
    kernel/debug/kdb/kdb_io.c:456:20: error: format not a string literal and no format arguments [-Werror=format-security]
      456 |         kdb_printf(kdb_prompt_str);
          |                    ^~~~~~~~~~~~~~
    
    Use an explcit "%s" format instead.
    
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Fixes: 5d5314d6795f ("kdb: core for kgdb back end (1 of 2)")
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Link: https://lore.kernel.org/r/20240528121154.3662553-1-arnd@kernel.org
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kdb: Use the passed prompt in kdb_position_cursor() [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Tue May 28 07:11:48 2024 -0700

    kdb: Use the passed prompt in kdb_position_cursor()
    
    [ Upstream commit e2e821095949cde46256034975a90f88626a2a73 ]
    
    The function kdb_position_cursor() takes in a "prompt" parameter but
    never uses it. This doesn't _really_ matter since all current callers
    of the function pass the same value and it's a global variable, but
    it's a bit ugly. Let's clean it up.
    
    Found by code inspection. This patch is expected to functionally be a
    no-op.
    
    Fixes: 09b35989421d ("kdb: Use format-strings rather than '\0' injection in kdb_read()")
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Link: https://lore.kernel.org/r/20240528071144.1.I0feb49839c6b6f4f2c4bf34764f5e95de3f55a66@changeid
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kernel: rerun task_work while freezing in get_signal() [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Jul 10 18:58:18 2024 +0100

    kernel: rerun task_work while freezing in get_signal()
    
    commit 943ad0b62e3c21f324c4884caa6cb4a871bca05c upstream.
    
    io_uring can asynchronously add a task_work while the task is getting
    freezed. TIF_NOTIFY_SIGNAL will prevent the task from sleeping in
    do_freezer_trap(), and since the get_signal()'s relock loop doesn't
    retry task_work, the task will spin there not being able to sleep
    until the freezing is cancelled / the task is killed / etc.
    
    Run task_works in the freezer path. Keep the patch small and simple
    so it can be easily back ported, but we might need to do some cleaning
    after and look if there are other places with similar problems.
    
    Cc: stable@vger.kernel.org
    Link: https://github.com/systemd/systemd/issues/33626
    Fixes: 12db8b690010c ("entry: Add support for TIF_NOTIFY_SIGNAL")
    Reported-by: Julian Orth <ju.orth@gmail.com>
    Acked-by: Oleg Nesterov <oleg@redhat.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/89ed3a52933370deaaf61a0a620a6ac91f1e754d.1720634146.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kobject_uevent: Fix OOB access within zap_modalias_env() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Thu May 30 21:14:37 2024 +0800

    kobject_uevent: Fix OOB access within zap_modalias_env()
    
    commit dd6e9894b451e7c85cceb8e9dc5432679a70e7dc upstream.
    
    zap_modalias_env() wrongly calculates size of memory block to move, so
    will cause OOB memory access issue if variable MODALIAS is not the last
    one within its @env parameter, fixed by correcting size to memmove.
    
    Fixes: 9b3fa47d4a76 ("kobject: fix suppressing modalias in uevents delivered over netlink")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Reviewed-by: Lk Sii <lk_sii@163.com>
    Link: https://lore.kernel.org/r/1717074877-11352-1-git-send-email-quic_zijuhu@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kprobes: Fix to check symbol prefixes correctly [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Fri Aug 2 22:53:15 2024 +0900

    kprobes: Fix to check symbol prefixes correctly
    
    [ Upstream commit 8c8acb8f26cbde665b233dd1b9bbcbb9b86822dc ]
    
    Since str_has_prefix() takes the prefix as the 2nd argument and the string
    as the first, is_cfi_preamble_symbol() always fails to check the prefix.
    Fix the function parameter order so that it correctly check the prefix.
    
    Link: https://lore.kernel.org/all/172260679559.362040.7360872132937227206.stgit@devnote2/
    
    Fixes: de02f2ac5d8c ("kprobes: Prohibit probing on CFI preamble symbol")
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: VMX: Split out the non-virtualization part of vmx_interrupt_blocked() [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Jun 7 10:26:06 2024 -0700

    KVM: VMX: Split out the non-virtualization part of vmx_interrupt_blocked()
    
    commit 322a569c4b4188a0da2812f9e952780ce09b74ba upstream.
    
    Move the non-VMX chunk of the "interrupt blocked" checks to a separate
    helper so that KVM can reuse the code to detect if interrupts are blocked
    for L2, e.g. to determine if a virtual interrupt _for L2_ is a valid wake
    event.  If L1 disables HLT-exiting for L2, nested APICv is enabled, and L2
    HLTs, then L2 virtual interrupts are valid wake events, but if and only if
    interrupts are unblocked for L2.
    
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240607172609.3205077-4-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
l2tp: fix lockdep splat [+ + +]
Author: James Chapman <jchapman@katalix.com>
Date:   Tue Aug 6 17:06:26 2024 +0100

    l2tp: fix lockdep splat
    
    [ Upstream commit 86a41ea9fd79ddb6145cb8ebf5aeafceabca6f7d ]
    
    When l2tp tunnels use a socket provided by userspace, we can hit
    lockdep splats like the below when data is transmitted through another
    (unrelated) userspace socket which then gets routed over l2tp.
    
    This issue was previously discussed here:
    https://lore.kernel.org/netdev/87sfialu2n.fsf@cloudflare.com/
    
    The solution is to have lockdep treat socket locks of l2tp tunnel
    sockets separately than those of standard INET sockets. To do so, use
    a different lockdep subclass where lock nesting is possible.
    
      ============================================
      WARNING: possible recursive locking detected
      6.10.0+ #34 Not tainted
      --------------------------------------------
      iperf3/771 is trying to acquire lock:
      ffff8881027601d8 (slock-AF_INET/1){+.-.}-{2:2}, at: l2tp_xmit_skb+0x243/0x9d0
    
      but task is already holding lock:
      ffff888102650d98 (slock-AF_INET/1){+.-.}-{2:2}, at: tcp_v4_rcv+0x1848/0x1e10
    
      other info that might help us debug this:
       Possible unsafe locking scenario:
    
             CPU0
             ----
        lock(slock-AF_INET/1);
        lock(slock-AF_INET/1);
    
       *** DEADLOCK ***
    
       May be due to missing lock nesting notation
    
      10 locks held by iperf3/771:
       #0: ffff888102650258 (sk_lock-AF_INET){+.+.}-{0:0}, at: tcp_sendmsg+0x1a/0x40
       #1: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: __ip_queue_xmit+0x4b/0xbc0
       #2: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: ip_finish_output2+0x17a/0x1130
       #3: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: process_backlog+0x28b/0x9f0
       #4: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: ip_local_deliver_finish+0xf9/0x260
       #5: ffff888102650d98 (slock-AF_INET/1){+.-.}-{2:2}, at: tcp_v4_rcv+0x1848/0x1e10
       #6: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: __ip_queue_xmit+0x4b/0xbc0
       #7: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: ip_finish_output2+0x17a/0x1130
       #8: ffffffff822ac1e0 (rcu_read_lock_bh){....}-{1:2}, at: __dev_queue_xmit+0xcc/0x1450
       #9: ffff888101f33258 (dev->qdisc_tx_busylock ?: &qdisc_tx_busylock#2){+...}-{2:2}, at: __dev_queue_xmit+0x513/0x1450
    
      stack backtrace:
      CPU: 2 UID: 0 PID: 771 Comm: iperf3 Not tainted 6.10.0+ #34
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      Call Trace:
       <IRQ>
       dump_stack_lvl+0x69/0xa0
       dump_stack+0xc/0x20
       __lock_acquire+0x135d/0x2600
       ? srso_alias_return_thunk+0x5/0xfbef5
       lock_acquire+0xc4/0x2a0
       ? l2tp_xmit_skb+0x243/0x9d0
       ? __skb_checksum+0xa3/0x540
       _raw_spin_lock_nested+0x35/0x50
       ? l2tp_xmit_skb+0x243/0x9d0
       l2tp_xmit_skb+0x243/0x9d0
       l2tp_eth_dev_xmit+0x3c/0xc0
       dev_hard_start_xmit+0x11e/0x420
       sch_direct_xmit+0xc3/0x640
       __dev_queue_xmit+0x61c/0x1450
       ? ip_finish_output2+0xf4c/0x1130
       ip_finish_output2+0x6b6/0x1130
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? __ip_finish_output+0x217/0x380
       ? srso_alias_return_thunk+0x5/0xfbef5
       __ip_finish_output+0x217/0x380
       ip_output+0x99/0x120
       __ip_queue_xmit+0xae4/0xbc0
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? tcp_options_write.constprop.0+0xcb/0x3e0
       ip_queue_xmit+0x34/0x40
       __tcp_transmit_skb+0x1625/0x1890
       __tcp_send_ack+0x1b8/0x340
       tcp_send_ack+0x23/0x30
       __tcp_ack_snd_check+0xa8/0x530
       ? srso_alias_return_thunk+0x5/0xfbef5
       tcp_rcv_established+0x412/0xd70
       tcp_v4_do_rcv+0x299/0x420
       tcp_v4_rcv+0x1991/0x1e10
       ip_protocol_deliver_rcu+0x50/0x220
       ip_local_deliver_finish+0x158/0x260
       ip_local_deliver+0xc8/0xe0
       ip_rcv+0xe5/0x1d0
       ? __pfx_ip_rcv+0x10/0x10
       __netif_receive_skb_one_core+0xce/0xe0
       ? process_backlog+0x28b/0x9f0
       __netif_receive_skb+0x34/0xd0
       ? process_backlog+0x28b/0x9f0
       process_backlog+0x2cb/0x9f0
       __napi_poll.constprop.0+0x61/0x280
       net_rx_action+0x332/0x670
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? find_held_lock+0x2b/0x80
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? srso_alias_return_thunk+0x5/0xfbef5
       handle_softirqs+0xda/0x480
       ? __dev_queue_xmit+0xa2c/0x1450
       do_softirq+0xa1/0xd0
       </IRQ>
       <TASK>
       __local_bh_enable_ip+0xc8/0xe0
       ? __dev_queue_xmit+0xa2c/0x1450
       __dev_queue_xmit+0xa48/0x1450
       ? ip_finish_output2+0xf4c/0x1130
       ip_finish_output2+0x6b6/0x1130
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? __ip_finish_output+0x217/0x380
       ? srso_alias_return_thunk+0x5/0xfbef5
       __ip_finish_output+0x217/0x380
       ip_output+0x99/0x120
       __ip_queue_xmit+0xae4/0xbc0
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? tcp_options_write.constprop.0+0xcb/0x3e0
       ip_queue_xmit+0x34/0x40
       __tcp_transmit_skb+0x1625/0x1890
       tcp_write_xmit+0x766/0x2fb0
       ? __entry_text_end+0x102ba9/0x102bad
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? __might_fault+0x74/0xc0
       ? srso_alias_return_thunk+0x5/0xfbef5
       __tcp_push_pending_frames+0x56/0x190
       tcp_push+0x117/0x310
       tcp_sendmsg_locked+0x14c1/0x1740
       tcp_sendmsg+0x28/0x40
       inet_sendmsg+0x5d/0x90
       sock_write_iter+0x242/0x2b0
       vfs_write+0x68d/0x800
       ? __pfx_sock_write_iter+0x10/0x10
       ksys_write+0xc8/0xf0
       __x64_sys_write+0x3d/0x50
       x64_sys_call+0xfaf/0x1f50
       do_syscall_64+0x6d/0x140
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
      RIP: 0033:0x7f4d143af992
      Code: c3 8b 07 85 c0 75 24 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> e9 01 cc ff ff 41 54 b8 02 00 00 0
      RSP: 002b:00007ffd65032058 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
      RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f4d143af992
      RDX: 0000000000000025 RSI: 00007f4d143f3bcc RDI: 0000000000000005
      RBP: 00007f4d143f2b28 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 00007f4d143f3bcc
      R13: 0000000000000005 R14: 0000000000000000 R15: 00007ffd650323f0
       </TASK>
    
    Fixes: 0b2c59720e65 ("l2tp: close all race conditions in l2tp_tunnel_register()")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot+6acef9e0a4d1f46c83d4@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6acef9e0a4d1f46c83d4
    CC: gnault@redhat.com
    CC: cong.wang@bytedance.com
    Signed-off-by: James Chapman <jchapman@katalix.com>
    Signed-off-by: Tom Parkin <tparkin@katalix.com>
    Link: https://patch.msgid.link/20240806160626.1248317-1-jchapman@katalix.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
landlock: Don't lose track of restrictions on cred_transfer [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Jul 24 14:49:01 2024 +0200

    landlock: Don't lose track of restrictions on cred_transfer
    
    commit 39705a6c29f8a2b93cf5b99528a55366c50014d1 upstream.
    
    When a process' cred struct is replaced, this _almost_ always invokes
    the cred_prepare LSM hook; but in one special case (when
    KEYCTL_SESSION_TO_PARENT updates the parent's credentials), the
    cred_transfer LSM hook is used instead.  Landlock only implements the
    cred_prepare hook, not cred_transfer, so KEYCTL_SESSION_TO_PARENT causes
    all information on Landlock restrictions to be lost.
    
    This basically means that a process with the ability to use the fork()
    and keyctl() syscalls can get rid of all Landlock restrictions on
    itself.
    
    Fix it by adding a cred_transfer hook that does the same thing as the
    existing cred_prepare hook. (Implemented by having hook_cred_prepare()
    call hook_cred_transfer() so that the two functions are less likely to
    accidentally diverge in the future.)
    
    Cc: stable@kernel.org
    Fixes: 385975dca53e ("landlock: Set up the security framework and manage credentials")
    Signed-off-by: Jann Horn <jannh@google.com>
    Link: https://lore.kernel.org/r/20240724-landlock-houdini-fix-v1-1-df89a4560ca3@google.com
    Signed-off-by: Mickaël Salaün <mic@digikod.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
leds: ss4200: Convert PCIBIOS_* return codes to errnos [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Mon May 27 16:27:00 2024 +0300

    leds: ss4200: Convert PCIBIOS_* return codes to errnos
    
    commit ce068e83976140badb19c7f1307926b4b562fac4 upstream.
    
    ich7_lpc_probe() uses pci_read_config_dword() that returns PCIBIOS_*
    codes. The error handling code assumes incorrectly it's a normal errno
    and checks for < 0. The return code is returned from the probe function
    as is but probe functions should return normal errnos.
    
    Remove < 0 from the check and convert PCIBIOS_* returns code using
    pcibios_err_to_errno() into normal errno before returning it.
    
    Fixes: a328e95b82c1 ("leds: LED driver for Intel NAS SS4200 series (v5)")
    Cc:  <stable@vger.kernel.org>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Link: https://lore.kernel.org/r/20240527132700.14260-1-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

leds: trigger: Call synchronize_rcu() before calling trig->activate() [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Fri May 31 14:01:24 2024 +0200

    leds: trigger: Call synchronize_rcu() before calling trig->activate()
    
    [ Upstream commit b1bbd20f35e19774ea01989320495e09ac44fba3 ]
    
    Some triggers call led_trigger_event() from their activate() callback
    to initialize the brightness of the LED for which the trigger is being
    activated.
    
    In order for the LED's initial state to be set correctly this requires that
    the led_trigger_event() call uses the new version of trigger->led_cdevs,
    which has the new LED.
    
    AFAICT led_trigger_event() will always use the new version when it is
    running on the same CPU as where the list_add_tail_rcu() call was made,
    which is why the missing synchronize_rcu() has not lead to bug reports.
    But if activate() is pre-empted, sleeps or uses a worker then
    the led_trigger_event() call may run on another CPU which may still use
    the old trigger->led_cdevs list.
    
    Add a synchronize_rcu() call to ensure that any led_trigger_event() calls
    done from activate() always use the new list.
    
    Triggers using led_trigger_event() from their activate() callback are:
    net/bluetooth/leds.c, net/rfkill/core.c and drivers/tty/vt/keyboard.c.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240531120124.75662-1-hdegoede@redhat.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Stable-dep-of: ab477b766edd ("leds: triggers: Flush pending brightness before activating trigger")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

leds: trigger: Remove unused function led_trigger_rename_static() [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Fri Dec 8 23:56:41 2023 +0100

    leds: trigger: Remove unused function led_trigger_rename_static()
    
    [ Upstream commit c82a1662d4548c454de5343b88f69b9fc82266b3 ]
    
    This function was added with a8df7b1ab70b ("leds: add led_trigger_rename
    function") 11 yrs ago, but it has no users. So remove it.
    
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://lore.kernel.org/r/d90f30be-f661-4db7-b0b5-d09d07a78a68@gmail.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Stable-dep-of: ab477b766edd ("leds: triggers: Flush pending brightness before activating trigger")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

leds: trigger: Store brightness set by led_trigger_event() [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Mon Mar 4 21:57:30 2024 +0100

    leds: trigger: Store brightness set by led_trigger_event()
    
    [ Upstream commit 822c91e72eac568ed8d83765634f00decb45666c ]
    
    If a simple trigger is assigned to a LED, then the LED may be off until
    the next led_trigger_event() call. This may be an issue for simple
    triggers with rare led_trigger_event() calls, e.g. power supply
    charging indicators (drivers/power/supply/power_supply_leds.c).
    Therefore persist the brightness value of the last led_trigger_event()
    call and use this value if the trigger is assigned to a LED.
    In addition add a getter for the trigger brightness value.
    
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Takashi Iwai <tiwai@suse.de>
    Link: https://lore.kernel.org/r/b1358b25-3f30-458d-8240-5705ae007a8a@gmail.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Stable-dep-of: ab477b766edd ("leds: triggers: Flush pending brightness before activating trigger")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

leds: trigger: Unregister sysfs attributes before calling deactivate() [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sat May 4 18:25:33 2024 +0200

    leds: trigger: Unregister sysfs attributes before calling deactivate()
    
    [ Upstream commit c0dc9adf9474ecb7106e60e5472577375aedaed3 ]
    
    Triggers which have trigger specific sysfs attributes typically store
    related data in trigger-data allocated by the activate() callback and
    freed by the deactivate() callback.
    
    Calling device_remove_groups() after calling deactivate() leaves a window
    where the sysfs attributes show/store functions could be called after
    deactivation and then operate on the just freed trigger-data.
    
    Move the device_remove_groups() call to before deactivate() to close
    this race window.
    
    This also makes the deactivation path properly do things in reverse order
    of the activation path which calls the activate() callback before calling
    device_add_groups().
    
    Fixes: a7e7a3156300 ("leds: triggers: add device attribute support")
    Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/20240504162533.76780-1-hdegoede@redhat.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

leds: trigger: use RCU to protect the led_cdevs list [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Wed Sep 15 18:16:01 2021 +0200

    leds: trigger: use RCU to protect the led_cdevs list
    
    [ Upstream commit 2a5a8fa8b23144d14567d6f8293dd6fbeecee393 ]
    
    Even with the previous commit 27af8e2c90fb
    ("leds: trigger: fix potential deadlock with libata")
    to this file, we still get lockdep unhappy, and Boqun
    explained the report here:
    https://lore.kernel.org/r/YNA+d1X4UkoQ7g8a@boqun-archlinux
    
    Effectively, this means that the read_lock_irqsave() isn't
    enough here because another CPU might be trying to do a
    write lock, and thus block the readers.
    
    This is all pretty messy, but it doesn't seem right that
    the LEDs framework imposes some locking requirements on
    users, in particular we'd have to make the spinlock in the
    iwlwifi driver always disable IRQs, even if we don't need
    that for any other reason, just to avoid this deadlock.
    
    Since writes to the led_cdevs list are rare (and are done
    by userspace), just switch the list to RCU. This costs a
    synchronize_rcu() at removal time so we can ensure things
    are correct, but that seems like a small price to pay for
    getting lock-free iterations and no deadlocks (nor any
    locking requirements imposed on users.)
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Pavel Machek <pavel@ucw.cz>
    Stable-dep-of: ab477b766edd ("leds: triggers: Flush pending brightness before activating trigger")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

leds: triggers: Flush pending brightness before activating trigger [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Thu Jun 13 17:24:51 2024 +0200

    leds: triggers: Flush pending brightness before activating trigger
    
    [ Upstream commit ab477b766edd3bfb6321a6e3df4c790612613fae ]
    
    The race fixed in timer_trig_activate() between a blocking
    set_brightness() call and trigger->activate() can affect any trigger.
    So move the call to flush_work() into led_trigger_set() where it can
    avoid the race for all triggers.
    
    Fixes: 0db37915d912 ("leds: avoid races with workqueue")
    Fixes: 8c0f693c6eff ("leds: avoid flush_work in atomic context")
    Cc: stable@vger.kernel.org
    Tested-by: Dustin L. Howett <dustin@howett.net>
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Link: https://lore.kernel.org/r/20240613-led-trigger-flush-v2-1-f4f970799d77@weissschuh.net
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib: objagg: Fix general protection fault [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Thu Jun 6 16:49:41 2024 +0200

    lib: objagg: Fix general protection fault
    
    [ Upstream commit b4a3a89fffcdf09702b1f161b914e52abca1894d ]
    
    The library supports aggregation of objects into other objects only if
    the parent object does not have a parent itself. That is, nesting is not
    supported.
    
    Aggregation happens in two cases: Without and with hints, where hints
    are a pre-computed recommendation on how to aggregate the provided
    objects.
    
    Nesting is not possible in the first case due to a check that prevents
    it, but in the second case there is no check because the assumption is
    that nesting cannot happen when creating objects based on hints. The
    violation of this assumption leads to various warnings and eventually to
    a general protection fault [1].
    
    Before fixing the root cause, error out when nesting happens and warn.
    
    [1]
    general protection fault, probably for non-canonical address 0xdead000000000d90: 0000 [#1] PREEMPT SMP PTI
    CPU: 1 PID: 1083 Comm: kworker/1:9 Tainted: G        W          6.9.0-rc6-custom-gd9b4f1cca7fb #7
    Hardware name: Mellanox Technologies Ltd. MSN3700/VMOD0005, BIOS 5.11 01/06/2019
    Workqueue: mlxsw_core mlxsw_sp_acl_tcam_vregion_rehash_work
    RIP: 0010:mlxsw_sp_acl_erp_bf_insert+0x25/0x80
    [...]
    Call Trace:
     <TASK>
     mlxsw_sp_acl_atcam_entry_add+0x256/0x3c0
     mlxsw_sp_acl_tcam_entry_create+0x5e/0xa0
     mlxsw_sp_acl_tcam_vchunk_migrate_one+0x16b/0x270
     mlxsw_sp_acl_tcam_vregion_rehash_work+0xbe/0x510
     process_one_work+0x151/0x370
     worker_thread+0x2cb/0x3e0
     kthread+0xd0/0x100
     ret_from_fork+0x34/0x50
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Fixes: 9069a3817d82 ("lib: objagg: implement optimization hints assembly and use hints for object creation")
    Reported-by: Alexander Zubkov <green@qrator.net>
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Amit Cohen <amcohen@nvidia.com>
    Tested-by: Alexander Zubkov <green@qrator.net>
    Signed-off-by: Petr Machata <petrm@nvidia.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>

 
libbpf: Checking the btf_type kind when fixing variable offsets [+ + +]
Author: Donglin Peng <dolinux.peng@gmail.com>
Date:   Wed Jun 19 05:23:55 2024 -0700

    libbpf: Checking the btf_type kind when fixing variable offsets
    
    [ Upstream commit cc5083d1f3881624ad2de1f3cbb3a07e152cb254 ]
    
    I encountered an issue when building the test_progs from the repository [1]:
    
      $ pwd
      /work/Qemu/x86_64/linux-6.10-rc2/tools/testing/selftests/bpf/
    
      $ make test_progs V=1
      [...]
      ./tools/sbin/bpftool gen object ./ip_check_defrag.bpf.linked2.o ./ip_check_defrag.bpf.linked1.o
      libbpf: failed to find symbol for variable 'bpf_dynptr_slice' in section '.ksyms'
      Error: failed to link './ip_check_defrag.bpf.linked1.o': No such file or directory (2)
      [...]
    
    Upon investigation, I discovered that the btf_types referenced in the '.ksyms'
    section had a kind of BTF_KIND_FUNC instead of BTF_KIND_VAR:
    
      $ bpftool btf dump file ./ip_check_defrag.bpf.linked1.o
      [...]
      [2] DATASEC '.ksyms' size=0 vlen=2
            type_id=16 offset=0 size=0 (FUNC 'bpf_dynptr_from_skb')
            type_id=17 offset=0 size=0 (FUNC 'bpf_dynptr_slice')
      [...]
      [16] FUNC 'bpf_dynptr_from_skb' type_id=82 linkage=extern
      [17] FUNC 'bpf_dynptr_slice' type_id=85 linkage=extern
      [...]
    
    For a detailed analysis, please refer to [2]. We can add a kind checking to
    fix the issue.
    
      [1] https://github.com/eddyz87/bpf/tree/binsort-btf-dedup
      [2] https://lore.kernel.org/all/0c0ef20c-c05e-4db9-bad7-2cbc0d6dfae7@oracle.com/
    
    Fixes: 8fd27bf69b86 ("libbpf: Add BPF static linker BTF and BTF.ext support")
    Signed-off-by: Donglin Peng <dolinux.peng@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Alan Maguire <alan.maguire@oracle.com>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/bpf/20240619122355.426405-1-dolinux.peng@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

libbpf: Fix no-args func prototype BTF dumping syntax [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Fri Jul 12 15:44:42 2024 -0700

    libbpf: Fix no-args func prototype BTF dumping syntax
    
    [ Upstream commit 189f1a976e426011e6a5588f1d3ceedf71fe2965 ]
    
    For all these years libbpf's BTF dumper has been emitting not strictly
    valid syntax for function prototypes that have no input arguments.
    
    Instead of `int (*blah)()` we should emit `int (*blah)(void)`.
    
    This is not normally a problem, but it manifests when we get kfuncs in
    vmlinux.h that have no input arguments. Due to compiler internal
    specifics, we get no BTF information for such kfuncs, if they are not
    declared with proper `(void)`.
    
    The fix is trivial. We also need to adjust a few ancient tests that
    happily assumed `()` is correct.
    
    Fixes: 351131b51c7a ("libbpf: add btf_dump API for BTF-to-C conversion")
    Reported-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Stanislav Fomichev <sdf@fomichev.me>
    Link: https://lore.kernel.org/bpf/20240712224442.282823-1-andrii@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 5.15.165 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Aug 19 05:45:52 2024 +0200

    Linux 5.15.165
    
    Link: https://lore.kernel.org/r/20240815131941.255804951@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20240816101524.478149768@linuxfoundation.org
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20240817075228.220424500@linuxfoundation.org
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lirc: rc_dev_get_from_fd(): fix file leak [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu May 30 23:58:26 2024 -0400

    lirc: rc_dev_get_from_fd(): fix file leak
    
    [ Upstream commit bba1f6758a9ec90c1adac5dcf78f8a15f1bad65b ]
    
    missing fdput() on a failure exit
    
    Fixes: 6a9d552483d50 "media: rc: bpf attach/detach requires write permission" # v6.9
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
locking/rwsem: Add __always_inline annotation to __down_write_common() and inlined callers [+ + +]
Author: John Stultz <jstultz@google.com>
Date:   Mon Jul 8 23:08:27 2024 -0700

    locking/rwsem: Add __always_inline annotation to __down_write_common() and inlined callers
    
    [ Upstream commit e81859fe64ad42dccefe134d1696e0635f78d763 ]
    
    Apparently despite it being marked inline, the compiler
    may not inline __down_write_common() which makes it difficult
    to identify the cause of lock contention, as the wchan of the
    blocked function will always be listed as __down_write_common().
    
    So add __always_inline annotation to the common function (as
    well as the inlined helper callers) to force it to be inlined
    so a more useful blocking function will be listed (via wchan).
    
    This mirrors commit 92cc5d00a431 ("locking/rwsem: Add
    __always_inline annotation to __down_read_common() and inlined
    callers") which did the same for __down_read_common.
    
    I sort of worry that I'm playing wack-a-mole here, and talking
    with compiler people, they tell me inline means nothing, which
    makes me want to cry a little. So I'm wondering if we need to
    replace all the inlines with __always_inline, or remove them
    because either we mean something by it, or not.
    
    Fixes: c995e638ccbb ("locking/rwsem: Fold __down_{read,write}*()")
    Reported-by: Tim Murray <timmurray@google.com>
    Signed-off-by: John Stultz <jstultz@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Waiman Long <longman@redhat.com>
    Link: https://lkml.kernel.org/r/20240709060831.495366-1-jstultz@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
m68k: amiga: Turn off Warp1260 interrupts during boot [+ + +]
Author: Paolo Pisati <p.pisati@gmail.com>
Date:   Sat Jun 1 17:32:54 2024 +0200

    m68k: amiga: Turn off Warp1260 interrupts during boot
    
    commit 1d8491d3e726984343dd8c3cdbe2f2b47cfdd928 upstream.
    
    On an Amiga 1200 equipped with a Warp1260 accelerator, an interrupt
    storm coming from the accelerator board causes the machine to crash in
    local_irq_enable() or auto_irq_enable().  Disabling interrupts for the
    Warp1260 in amiga_parse_bootinfo() fixes the problem.
    
    Link: https://lore.kernel.org/r/ZkjwzVwYeQtyAPrL@amaterasu.local
    Cc: stable <stable@kernel.org>
    Signed-off-by: Paolo Pisati <p.pisati@gmail.com>
    Reviewed-by: Michael Schmitz <schmitzmic@gmail.com>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/20240601153254.186225-1-p.pisati@gmail.com
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

m68k: atari: Fix TT bootup freeze / unexpected (SCU) interrupt messages [+ + +]
Author: Eero Tamminen <oak@helsinkinet.fi>
Date:   Mon Jun 24 17:49:01 2024 +0300

    m68k: atari: Fix TT bootup freeze / unexpected (SCU) interrupt messages
    
    [ Upstream commit f70065a9fd988983b2c693631b801f25a615fc04 ]
    
    Avoid freeze on Atari TT / MegaSTe boot with continuous messages of:
    
            unexpected interrupt from 112
    
    Which was due to VBL interrupt being enabled in SCU sys mask, but there
    being no handler for that any more.
    
    (Bug and fix were first verified on real Atari TT HW by Christian,
     this patch later on in Hatari emulator.)
    
    Fixes: 1fa0b29f3a43f9dd ("fbdev: Kill Atari vblank cursor blinking")
    Reported-by: Nicolas Pomarède <npomarede@corp.free.fr>
    Closes: https://listengine.tuxfamily.org/lists.tuxfamily.org/hatari-devel/2024/06/msg00016.html
    Closes: https://lore.kernel.org/all/9aa793d7-82ed-4fbd-bce5-60810d8a9119@helsinkinet.fi
    Tested-by: Christian Zietz <czietz@gmx.net>
    Signed-off-by: Eero Tamminen <oak@helsinkinet.fi>
    Reviewed-by: Michael Schmitz <schmitzmic@gmail.com>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/20240624144901.5236-1-oak@helsinkinet.fi
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

m68k: cmpxchg: Fix return value for default case in __arch_xchg() [+ + +]
Author: Thorsten Blum <thorsten.blum@toblux.com>
Date:   Tue Jul 2 05:41:17 2024 +0200

    m68k: cmpxchg: Fix return value for default case in __arch_xchg()
    
    [ Upstream commit 21b9e722ad28c19c2bc83f18f540b3dbd89bf762 ]
    
    The return value of __invalid_xchg_size() is assigned to tmp instead of
    the return variable x. Assign it to x instead.
    
    Fixes: 2501cf768e4009a0 ("m68k: Fix xchg/cmpxchg to fail to link if given an inappropriate pointer")
    Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/20240702034116.140234-2-thorsten.blum@toblux.com
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
macintosh/therm_windtunnel: fix module unload. [+ + +]
Author: Nick Bowler <nbowler@draconx.ca>
Date:   Wed Jul 10 23:54:17 2024 -0400

    macintosh/therm_windtunnel: fix module unload.
    
    [ Upstream commit fd748e177194ebcbbaf98df75152a30e08230cc6 ]
    
    The of_device_unregister call in therm_windtunnel's module_exit procedure
    does not fully reverse the effects of of_platform_device_create in the
    module_init prodedure.  Once you unload this module, it is impossible
    to load it ever again since only the first of_platform_device_create
    call on the fan node succeeds.
    
    This driver predates first git commit, and it turns out back then
    of_platform_device_create worked differently than it does today.
    So this is actually an old regression.
    
    The appropriate function to undo of_platform_device_create now appears
    to be of_platform_device_destroy, and switching to use this makes it
    possible to unload and load the module as expected.
    
    Signed-off-by: Nick Bowler <nbowler@draconx.ca>
    Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240711035428.16696-1-nbowler@draconx.ca
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md/raid5: avoid BUG_ON() while continue reshape after reassembling [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Tue Jun 11 21:22:51 2024 +0800

    md/raid5: avoid BUG_ON() while continue reshape after reassembling
    
    [ Upstream commit 305a5170dc5cf3d395bb4c4e9239bca6d0b54b49 ]
    
    Currently, mdadm support --revert-reshape to abort the reshape while
    reassembling, as the test 07revert-grow. However, following BUG_ON()
    can be triggerred by the test:
    
    kernel BUG at drivers/md/raid5.c:6278!
    invalid opcode: 0000 [#1] PREEMPT SMP PTI
    irq event stamp: 158985
    CPU: 6 PID: 891 Comm: md0_reshape Not tainted 6.9.0-03335-g7592a0b0049a #94
    RIP: 0010:reshape_request+0x3f1/0xe60
    Call Trace:
     <TASK>
     raid5_sync_request+0x43d/0x550
     md_do_sync+0xb7a/0x2110
     md_thread+0x294/0x2b0
     kthread+0x147/0x1c0
     ret_from_fork+0x59/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Root cause is that --revert-reshape update the raid_disks from 5 to 4,
    while reshape position is still set, and after reassembling the array,
    reshape position will be read from super block, then during reshape the
    checking of 'writepos' that is caculated by old reshape position will
    fail.
    
    Fix this panic the easy way first, by converting the BUG_ON() to
    WARN_ON(), and stop the reshape if checkings fail.
    
    Noted that mdadm must fix --revert-shape as well, and probably md/raid
    should enhance metadata validation as well, however this means
    reassemble will fail and there must be user tools to fix the wrong
    metadata.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20240611132251.1967786-13-yukuai1@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md: do not delete safemode_timer in mddev_suspend [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Wed May 8 17:20:53 2024 +0800

    md: do not delete safemode_timer in mddev_suspend
    
    [ Upstream commit a8768a134518e406d41799a3594aeb74e0889cf7 ]
    
    The deletion of safemode_timer in mddev_suspend() is redundant and
    potentially harmful now. If timer is about to be woken up but gets
    deleted, 'in_sync' will remain 0 until the next write, causing array
    to stay in the 'active' state instead of transitioning to 'clean'.
    
    Commit 0d9f4f135eb6 ("MD: Add del_timer_sync to mddev_suspend (fix
    nasty panic))" introduced this deletion for dm, because if timer fired
    after dm is destroyed, the resource which the timer depends on might
    have been freed.
    
    However, commit 0dd84b319352 ("md: call __md_stop_writes in md_stop")
    added __md_stop_writes() to md_stop(), which is called before freeing
    resource. Timer is deleted in __md_stop_writes(), and the origin issue
    is resolved. Therefore, delete safemode_timer can be removed safely now.
    
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20240508092053.1447930-1-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control() [+ + +]
Author: Zheng Yejian <zhengyejian1@huawei.com>
Date:   Thu May 9 20:44:14 2024 +0800

    media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control()
    
    [ Upstream commit 2052138b7da52ad5ccaf74f736d00f39a1c9198c ]
    
    Infinite log printing occurs during fuzz test:
    
      rc rc1: DViCO FusionHDTV DVB-T USB (LGZ201) as ...
      ...
      dvb-usb: schedule remote query interval to 100 msecs.
      dvb-usb: DViCO FusionHDTV DVB-T USB (LGZ201) successfully initialized ...
      dvb-usb: bulk message failed: -22 (1/0)
      dvb-usb: bulk message failed: -22 (1/0)
      dvb-usb: bulk message failed: -22 (1/0)
      ...
      dvb-usb: bulk message failed: -22 (1/0)
    
    Looking into the codes, there is a loop in dvb_usb_read_remote_control(),
    that is in rc_core_dvb_usb_remote_init() create a work that will call
    dvb_usb_read_remote_control(), and this work will reschedule itself at
    'rc_interval' intervals to recursively call dvb_usb_read_remote_control(),
    see following code snippet:
    
      rc_core_dvb_usb_remote_init() {
        ...
        INIT_DELAYED_WORK(&d->rc_query_work, dvb_usb_read_remote_control);
        schedule_delayed_work(&d->rc_query_work,
                              msecs_to_jiffies(rc_interval));
        ...
      }
    
      dvb_usb_read_remote_control() {
        ...
        err = d->props.rc.core.rc_query(d);
        if (err)
          err(...)  // Did not return even if query failed
        schedule_delayed_work(&d->rc_query_work,
                              msecs_to_jiffies(rc_interval));
      }
    
    When the infinite log printing occurs, the query callback
    'd->props.rc.core.rc_query' is cxusb_rc_query(). And the log is due to
    the failure of finding a valid 'generic_bulk_ctrl_endpoint'
    in usb_bulk_msg(), see following code snippet:
    
      cxusb_rc_query() {
        cxusb_ctrl_msg() {
          dvb_usb_generic_rw() {
            ret = usb_bulk_msg(d->udev, usb_sndbulkpipe(d->udev,
                               d->props.generic_bulk_ctrl_endpoint),...);
            if (ret)
              err("bulk message failed: %d (%d/%d)",ret,wlen,actlen);
              ...
          }
      ...
      }
    
    By analyzing the corresponding USB descriptor, it shows that the
    bNumEndpoints is 0 in its interface descriptor, but
    the 'generic_bulk_ctrl_endpoint' is 1, that means user don't configure
    a valid endpoint for 'generic_bulk_ctrl_endpoint', therefore this
    'invalid' USB device should be rejected before it calls into
    dvb_usb_read_remote_control().
    
    To fix it, we need to add endpoint check for 'generic_bulk_ctrl_endpoint'.
    And as Sean suggested, the same check and clear halts should be done for
    'generic_bulk_ctrl_endpoint_response'. So introduce
    dvb_usb_check_bulk_endpoint() to do it for both of them.
    
    Fixes: 4d43e13f723e ("V4L/DVB (4643): Multi-input patch for DVB-USB device")
    Signed-off-by: Zheng Yejian <zhengyejian1@huawei.com>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: i2c: Fix imx412 exposure control [+ + +]
Author: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Date:   Thu May 9 13:53:07 2024 +0100

    media: i2c: Fix imx412 exposure control
    
    [ Upstream commit a1956bf53a2774014ee1768b484af2c38c633a25 ]
    
    Currently we have the following algorithm to calculate what value should be
    written to the exposure control of imx412.
    
    lpfr = imx412->vblank + imx412->cur_mode->height;
    shutter = lpfr - exposure;
    
    The 'shutter' value is given to IMX412_REG_EXPOSURE_CIT however, the above
    algorithm will result in the value given to IMX412_REG_EXPOSURE_CIT
    decreasing as the requested exposure value from user-space goes up.
    
    e.g.
    [ 2255.713989] imx412 20-001a: Received exp 1608, analog gain 0
    [ 2255.714002] imx412 20-001a: Set exp 1608, analog gain 0, shutter 1938, lpfr 3546
    [ 2256.302770] imx412 20-001a: Received exp 2586, analog gain 100
    [ 2256.302800] imx412 20-001a: Set exp 2586, analog gain 100, shutter 960, lpfr 3546
    [ 2256.753755] imx412 20-001a: Received exp 3524, analog gain 110
    [ 2256.753772] imx412 20-001a: Set exp 3524, analog gain 110, shutter 22, lpfr 3546
    
    This behaviour results in the image having less exposure as the requested
    exposure value from user-space increases.
    
    Other sensor drivers such as ov5675, imx218, hid556 and others take the
    requested exposure value and use the value directly.
    
    Take the example of the above cited sensor drivers and directly apply the
    requested exposure value from user-space. The 'lpfr' variable still
    functions as before but the 'shutter' variable can be dispensed with as a
    result.
    
    Once done a similar run of the test application requesting higher exposure
    looks like this, with 'exp' written directly to the sensor.
    
    [  133.207884] imx412 20-001a: Received exp 1608, analog gain 0
    [  133.207899] imx412 20-001a: Set exp 1608, analog gain 0, lpfr 3546
    [  133.905309] imx412 20-001a: Received exp 2844, analog gain 100
    [  133.905344] imx412 20-001a: Set exp 2844, analog gain 100, lpfr 3546
    [  134.241705] imx412 20-001a: Received exp 3524, analog gain 110
    [  134.241775] imx412 20-001a: Set exp 3524, analog gain 110, lpfr 3546
    
    The result is then setting the sensor exposure to lower values results in
    darker, less exposure images and vice versa with higher exposure values.
    
    Fixes: 9214e86c0cc1 ("media: i2c: Add imx412 camera sensor driver")
    Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> # qrb5165-rb5/imx577
    Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
    Reviewed-by: Gjorgji Rosikopulos <quic_grosikop@quicinc.com>
    Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: imon: Fix race getting ictx->lock [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Mon May 6 21:10:27 2024 +0000

    media: imon: Fix race getting ictx->lock
    
    [ Upstream commit 24147897507cd3a7d63745d1518a638bf4132238 ]
    
    Lets fix a race between mutex_is_lock() and mutex_lock().
    
    <-mutex is not locked
    if (!mutex_is_locked(&ictx->lock)) {
            unlock = true; <- mutex is locked externaly
            mutex_lock(&ictx->lock);
    }
    
    Let's use mutex_trylock() that does mutex_is_lock() and mutex_lock()
    atomically.
    
    Fix the following cocci warning:
    drivers/media/rc/imon.c:1167:1-7: preceding lock on line 1153
    
    Fixes: 23ef710e1a6c ("[media] imon: add conditional locking in change_protocol")
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: renesas: vsp1: Fix _irqsave and _irq mix [+ + +]
Author: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Date:   Sun May 5 20:22:27 2024 +0300

    media: renesas: vsp1: Fix _irqsave and _irq mix
    
    [ Upstream commit 57edbbcf5258c378a9b9d0c80d33b03a010b22c8 ]
    
    The histogram support mixes _irqsave and _irq, causing the following
    smatch warning:
    
         drivers/media/platform/renesas/vsp1/vsp1_histo.c:153 histo_stop_streaming()
         warn: mixing irqsave and irq
    
    The histo_stop_streaming() calls spin_lock_irqsave() followed by
    wait_event_lock_irq(). The former hints that interrupts may be disabled
    by the caller, while the latter reenables interrupts unconditionally.
    This doesn't cause any real bug, as the function is always called with
    interrupts enabled, but the pattern is still incorrect.
    
    Fix the problem by using spin_lock_irq() instead of spin_lock_irqsave()
    in histo_stop_streaming(). While at it, switch to spin_lock_irq() and
    spin_lock() as appropriate elsewhere.
    
    Fixes: 99362e32332b ("[media] v4l: vsp1: Add histogram support")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/linux-renesas-soc/164d74ff-312c-468f-be64-afa7182cd2f4@moroto.mountain/
    Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
    Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: renesas: vsp1: Store RPF partition configuration per RPF instance [+ + +]
Author: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Date:   Sun Nov 19 03:11:51 2023 +0200

    media: renesas: vsp1: Store RPF partition configuration per RPF instance
    
    [ Upstream commit a213bc09b1025c771ee722ee341af1d84375db8a ]
    
    The vsp1_partition structure stores the RPF partition configuration in a
    single field for all RPF instances, while each RPF can have its own
    configuration. Fix it by storing the configuration separately for each
    RPF instance.
    
    Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Fixes: ab45e8585182 ("media: v4l: vsp1: Allow entities to participate in the partition algorithm")
    Reviewed-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: Revert "media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control()" [+ + +]
Author: Sean Young <sean@mess.org>
Date:   Thu Aug 8 10:35:19 2024 +0200

    media: Revert "media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control()"
    
    commit 0c84bde4f37ba27d50e4c70ecacd33fe4a57030d upstream.
    
    This reverts commit 2052138b7da52ad5ccaf74f736d00f39a1c9198c.
    
    This breaks the TeVii s480 dual DVB-S2 S660. The device has a bulk in
    endpoint but no corresponding out endpoint, so the device does not pass
    the "has both receive and send bulk endpoint" test.
    
    Seemingly this device does not use dvb_usb_generic_rw() so I have tried
    removing the generic_bulk_ctrl_endpoint entry, but this resulted in
    different problems.
    
    As we have no explanation yet, revert.
    
    $ dmesg | grep -i -e dvb -e dw21 -e usb\ 4
    [    0.999122] usb 1-1: new high-speed USB device number 2 using ehci-pci
    [    1.023123] usb 4-1: new high-speed USB device number 2 using ehci-pci
    [    1.130247] usb 1-1: New USB device found, idVendor=9022, idProduct=d482,
    +bcdDevice= 0.01
    [    1.130257] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
    [    1.152323] usb 4-1: New USB device found, idVendor=9022, idProduct=d481,
    +bcdDevice= 0.01
    [    1.152329] usb 4-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
    [    6.701033] dvb-usb: found a 'TeVii S480.2 USB' in cold state, will try to
    +load a firmware
    [    6.701178] dvb-usb: downloading firmware from file 'dvb-usb-s660.fw'
    [    6.701179] dw2102: start downloading DW210X firmware
    [    6.703715] dvb-usb: found a 'Microsoft Xbox One Digital TV Tuner' in cold
    +state, will try to load a firmware
    [    6.703974] dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'
    [    6.756432] usb 1-1: USB disconnect, device number 2
    [    6.862119] dvb-usb: found a 'TeVii S480.2 USB' in warm state.
    [    6.862194] dvb-usb: TeVii S480.2 USB error while loading driver (-22)
    [    6.862209] dvb-usb: found a 'TeVii S480.1 USB' in cold state, will try to
    +load a firmware
    [    6.862244] dvb-usb: downloading firmware from file 'dvb-usb-s660.fw'
    [    6.862245] dw2102: start downloading DW210X firmware
    [    6.914811] usb 4-1: USB disconnect, device number 2
    [    7.014131] dvb-usb: found a 'TeVii S480.1 USB' in warm state.
    [    7.014487] dvb-usb: TeVii S480.1 USB error while loading driver (-22)
    [    7.014538] usbcore: registered new interface driver dw2102
    
    Closes: https://lore.kernel.org/stable/20240801165146.38991f60@mir/
    
    Fixes: 2052138b7da5 ("media: dvb-usb: Fix unexpected infinite loop in dvb_usb_read_remote_control()")
    Reported-by: Stefan Lippers-Hollmann <s.l-h@gmx.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: uvcvideo: Fix integer overflow calculating timestamp [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Mon Jun 10 19:17:49 2024 +0000

    media: uvcvideo: Fix integer overflow calculating timestamp
    
    commit 8676a5e796fa18f55897ca36a94b2adf7f73ebd1 upstream.
    
    The function uvc_video_clock_update() supports a single SOF overflow. Or
    in other words, the maximum difference between the first ant the last
    timestamp can be 4096 ticks or 4.096 seconds.
    
    This results in a maximum value for y2 of: 0x12FBECA00, that overflows
    32bits.
    y2 = (u32)ktime_to_ns(ktime_sub(last->host_time, first->host_time)) + y1;
    
    Extend the size of y2 to u64 to support all its values.
    
    Without this patch:
     # yavta -s 1920x1080 -f YUYV -t 1/5 -c /dev/video0
    Device /dev/v4l/by-id/usb-Shine-Optics_Integrated_Camera_0001-video-index0 opened.
    Device `Integrated Camera: Integrated C' on `usb-0000:00:14.0-6' (driver 'uvcvideo') supports video, capture, without mplanes.
    Video format set: YUYV (56595559) 1920x1080 (stride 3840) field none buffer size 4147200
    Video format: YUYV (56595559) 1920x1080 (stride 3840) field none buffer size 4147200
    Current frame rate: 1/5
    Setting frame rate to: 1/5
    Frame rate set: 1/5
    8 buffers requested.
    length: 4147200 offset: 0 timestamp type/source: mono/SoE
    Buffer 0/0 mapped at address 0x7947ea94c000.
    length: 4147200 offset: 4149248 timestamp type/source: mono/SoE
    Buffer 1/0 mapped at address 0x7947ea557000.
    length: 4147200 offset: 8298496 timestamp type/source: mono/SoE
    Buffer 2/0 mapped at address 0x7947ea162000.
    length: 4147200 offset: 12447744 timestamp type/source: mono/SoE
    Buffer 3/0 mapped at address 0x7947e9d6d000.
    length: 4147200 offset: 16596992 timestamp type/source: mono/SoE
    Buffer 4/0 mapped at address 0x7947e9978000.
    length: 4147200 offset: 20746240 timestamp type/source: mono/SoE
    Buffer 5/0 mapped at address 0x7947e9583000.
    length: 4147200 offset: 24895488 timestamp type/source: mono/SoE
    Buffer 6/0 mapped at address 0x7947e918e000.
    length: 4147200 offset: 29044736 timestamp type/source: mono/SoE
    Buffer 7/0 mapped at address 0x7947e8d99000.
    0 (0) [-] none 0 4147200 B 507.554210 508.874282 242.836 fps ts mono/SoE
    1 (1) [-] none 2 4147200 B 508.886298 509.074289 0.751 fps ts mono/SoE
    2 (2) [-] none 3 4147200 B 509.076362 509.274307 5.261 fps ts mono/SoE
    3 (3) [-] none 4 4147200 B 509.276371 509.474336 5.000 fps ts mono/SoE
    4 (4) [-] none 5 4147200 B 509.476394 509.674394 4.999 fps ts mono/SoE
    5 (5) [-] none 6 4147200 B 509.676506 509.874345 4.997 fps ts mono/SoE
    6 (6) [-] none 7 4147200 B 509.876430 510.074370 5.002 fps ts mono/SoE
    7 (7) [-] none 8 4147200 B 510.076434 510.274365 5.000 fps ts mono/SoE
    8 (0) [-] none 9 4147200 B 510.276421 510.474333 5.000 fps ts mono/SoE
    9 (1) [-] none 10 4147200 B 510.476391 510.674429 5.001 fps ts mono/SoE
    10 (2) [-] none 11 4147200 B 510.676434 510.874283 4.999 fps ts mono/SoE
    11 (3) [-] none 12 4147200 B 510.886264 511.074349 4.766 fps ts mono/SoE
    12 (4) [-] none 13 4147200 B 511.070577 511.274304 5.426 fps ts mono/SoE
    13 (5) [-] none 14 4147200 B 511.286249 511.474301 4.637 fps ts mono/SoE
    14 (6) [-] none 15 4147200 B 511.470542 511.674251 5.426 fps ts mono/SoE
    15 (7) [-] none 16 4147200 B 511.672651 511.874337 4.948 fps ts mono/SoE
    16 (0) [-] none 17 4147200 B 511.873988 512.074462 4.967 fps ts mono/SoE
    17 (1) [-] none 18 4147200 B 512.075982 512.278296 4.951 fps ts mono/SoE
    18 (2) [-] none 19 4147200 B 512.282631 512.482423 4.839 fps ts mono/SoE
    19 (3) [-] none 20 4147200 B 518.986637 512.686333 0.149 fps ts mono/SoE
    20 (4) [-] none 21 4147200 B 518.342709 512.886386 -1.553 fps ts mono/SoE
    21 (5) [-] none 22 4147200 B 517.909812 513.090360 -2.310 fps ts mono/SoE
    22 (6) [-] none 23 4147200 B 517.590775 513.294454 -3.134 fps ts mono/SoE
    23 (7) [-] none 24 4147200 B 513.298465 513.494335 -0.233 fps ts mono/SoE
    24 (0) [-] none 25 4147200 B 513.510273 513.698375 4.721 fps ts mono/SoE
    25 (1) [-] none 26 4147200 B 513.698904 513.902327 5.301 fps ts mono/SoE
    26 (2) [-] none 27 4147200 B 513.895971 514.102348 5.074 fps ts mono/SoE
    27 (3) [-] none 28 4147200 B 514.099091 514.306337 4.923 fps ts mono/SoE
    28 (4) [-] none 29 4147200 B 514.310348 514.510567 4.734 fps ts mono/SoE
    29 (5) [-] none 30 4147200 B 514.509295 514.710367 5.026 fps ts mono/SoE
    30 (6) [-] none 31 4147200 B 521.532513 514.914398 0.142 fps ts mono/SoE
    31 (7) [-] none 32 4147200 B 520.885277 515.118385 -1.545 fps ts mono/SoE
    32 (0) [-] none 33 4147200 B 520.411140 515.318336 -2.109 fps ts mono/SoE
    33 (1) [-] none 34 4147200 B 515.325425 515.522278 -0.197 fps ts mono/SoE
    34 (2) [-] none 35 4147200 B 515.538276 515.726423 4.698 fps ts mono/SoE
    35 (3) [-] none 36 4147200 B 515.720767 515.930373 5.480 fps ts mono/SoE
    
    Cc: stable@vger.kernel.org
    Fixes: 66847ef013cc ("[media] uvcvideo: Add UVC timestamps support")
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Link: https://lore.kernel.org/r/20240610-hwtimestamp-followup-v1-2-f9eaed7be7f0@chromium.org
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: uvcvideo: Fix the bandwdith quirk on USB 3.x [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Sun Apr 14 19:00:40 2024 +0200

    media: uvcvideo: Fix the bandwdith quirk on USB 3.x
    
    [ Upstream commit 9e3d55fbd160b3ca376599a68b4cddfdc67d4153 ]
    
    The bandwidth fixup quirk doesn't know that SuperSpeed exists and has
    the same 8 service intervals per millisecond as High Speed, hence its
    calculations are wrong.
    
    Assume that all speeds from HS up use 8 intervals per millisecond.
    
    No further changes are needed, updated code has been confirmed to work
    with all speeds from FS to SS.
    
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Link: https://lore.kernel.org/r/20240414190040.2255a0bc@foxbook
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Ignore empty TS packets [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Sat Mar 23 10:48:03 2024 +0000

    media: uvcvideo: Ignore empty TS packets
    
    [ Upstream commit 5cd7c25f6f0576073b3d03bc4cfb1e8ca63a1195 ]
    
    Some SunplusIT cameras took a borderline interpretation of the UVC 1.5
    standard, and fill the PTS and SCR fields with invalid data if the
    package does not contain data.
    
    "STC must be captured when the first video data of a video frame is put
    on the USB bus."
    
    Some SunplusIT devices send, e.g.,
    
    buffer: 0xa7755c00 len 000012 header:0x8c stc 00000000 sof 0000 pts 00000000
    buffer: 0xa7755c00 len 000012 header:0x8c stc 00000000 sof 0000 pts 00000000
    buffer: 0xa7755c00 len 000668 header:0x8c stc 73779dba sof 070c pts 7376d37a
    
    While the UVC specification meant that the first two packets shouldn't
    have had the SCR bit set in the header.
    
    This borderline/buggy interpretation has been implemented in a variety
    of devices, from directly SunplusIT and from other OEMs that rebrand
    SunplusIT products. So quirking based on VID:PID will be problematic.
    
    All the affected modules have the following extension unit:
    VideoControl Interface Descriptor:
      guidExtensionCode         {82066163-7050-ab49-b8cc-b3855e8d221d}
    
    But the vendor plans to use that GUID in the future and fix the bug,
    this means that we should use heuristic to figure out the broken
    packets.
    
    This patch takes care of this.
    
    lsusb of one of the affected cameras:
    
    Bus 001 Device 003: ID 1bcf:2a01 Sunplus Innovation Technology Inc.
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.01
      bDeviceClass          239 Miscellaneous Device
      bDeviceSubClass         2 ?
      bDeviceProtocol         1 Interface Association
      bMaxPacketSize0        64
      idVendor           0x1bcf Sunplus Innovation Technology Inc.
      idProduct          0x2a01
      bcdDevice            0.02
      iManufacturer           1 SunplusIT Inc
      iProduct                2 HanChen Wise Camera
      iSerial                 3 01.00.00
      bNumConfigurations      1
    
    Tested-by: HungNien Chen <hn.chen@sunplusit.com>
    Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Reviewed-by: Tomasz Figa <tfiga@chromium.org>
    Link: https://lore.kernel.org/r/20240323-resend-hwtimestamp-v10-2-b08e590d97c7@chromium.org
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Override default flags [+ + +]
Author: Daniel Schaefer <dhs@frame.work>
Date:   Sun Jun 2 14:50:53 2024 +0800

    media: uvcvideo: Override default flags
    
    [ Upstream commit 86419686e66da5b90a07fb8a40ab138fe97189b5 ]
    
    When the UVC device has a control that is readonly it doesn't set the
    SET_CUR flag. For example the privacy control has SET_CUR flag set in
    the defaults in the `uvc_ctrls` variable. Even if the device does not
    have it set, it's not cleared by uvc_ctrl_get_flags().
    
    Originally written with assignment in commit 859086ae3636 ("media:
    uvcvideo: Apply flags from device to actual properties"). But changed to
    |= in commit 0dc68cabdb62 ("media: uvcvideo: Prevent setting unavailable
    flags"). It would not clear the default flags.
    
    With this patch applied the correct flags are reported to user space.
    Tested with:
    
    ```
    > v4l2-ctl --list-ctrls | grep privacy
    privacy 0x009a0910 (bool)   : default=0 value=0 flags=read-only
    ```
    
    Signed-off-by: Daniel Schaefer <dhs@frame.work>
    Fixes: 0dc68cabdb62 ("media: uvcvideo: Prevent setting unavailable flags")
    Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Link: https://lore.kernel.org/r/20240602065053.36850-1-dhs@frame.work
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: venus: fix use after free in vdec_close [+ + +]
Author: Dikshita Agarwal <quic_dikshita@quicinc.com>
Date:   Thu May 9 10:44:29 2024 +0530

    media: venus: fix use after free in vdec_close
    
    commit a0157b5aa34eb43ec4c5510f9c260bbb03be937e upstream.
    
    There appears to be a possible use after free with vdec_close().
    The firmware will add buffer release work to the work queue through
    HFI callbacks as a normal part of decoding. Randomly closing the
    decoder device from userspace during normal decoding can incur
    a read after free for inst.
    
    Fix it by cancelling the work in vdec_close.
    
    Cc: stable@vger.kernel.org
    Fixes: af2c3834c8ca ("[media] media: venus: adding core part and helper functions")
    Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
    Acked-by: Vikash Garodia <quic_vgarodia@quicinc.com>
    Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: venus: flush all buffers in output plane streamoff [+ + +]
Author: Dikshita Agarwal <quic_dikshita@quicinc.com>
Date:   Wed Jan 10 11:42:14 2024 +0530

    media: venus: flush all buffers in output plane streamoff
    
    [ Upstream commit e750a4b1224142bd8dd057b0d5adf8a5608b7e77 ]
    
    For scenarios, when source change is followed by VIDIOC_STREAMOFF
    on output plane, driver should discard any queued OUTPUT
    buffers, which are not decoded or dequeued.
    Flush with HFI_FLUSH_INPUT does not have any actual impact.
    So, fix it, by invoking HFI_FLUSH_ALL, which will flush all
    queued buffers.
    
    Fixes: 85872f861d4c ("media: venus: Mark last capture buffer")
    Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
    Tested-by: Nathan Hebert <nhebert@chromium.org>
    Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memory: fsl_ifc: Make FSL_IFC config visible and selectable [+ + +]
Author: Esben Haabendal <esben@geanix.com>
Date:   Thu May 30 16:46:36 2024 +0200

    memory: fsl_ifc: Make FSL_IFC config visible and selectable
    
    [ Upstream commit 9ba0cae3cac07c21c583f9ff194f74043f90d29c ]
    
    While use of fsl_ifc driver with NAND flash is fine, as the fsl_ifc_nand
    driver selects FSL_IFC automatically, we need the CONFIG_FSL_IFC option to
    be selectable for platforms using fsl_ifc with NOR flash.
    
    Fixes: ea0c0ad6b6eb ("memory: Enable compile testing for most of the drivers")
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Esben Haabendal <esben@geanix.com>
    Link: https://lore.kernel.org/r/20240530-fsl-ifc-config-v3-1-1fd2c3d233dd@geanix.com
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mfd: omap-usb-tll: Use struct_size to allocate tll [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Wed Jun 26 21:37:03 2024 +0200

    mfd: omap-usb-tll: Use struct_size to allocate tll
    
    [ Upstream commit 40176714c818b0b6a2ca8213cdb7654fbd49b742 ]
    
    Commit 16c2004d9e4d ("mfd: omap-usb-tll: Allocate driver data at once")
    changed the memory allocation of 'tll' to consolidate it into a single
    allocation, introducing an incorrect size calculation.
    
    In particular, the allocation for the array of pointers was converted
    into a single-pointer allocation.
    
    The memory allocation used to occur in two steps:
    
    tll = devm_kzalloc(dev, sizeof(struct usbtll_omap), GFP_KERNEL);
    tll->ch_clk = devm_kzalloc(dev, sizeof(struct clk *) * tll->nch,
                               GFP_KERNEL);
    
    And it turned that into the following allocation:
    
    tll = devm_kzalloc(dev, sizeof(*tll) + sizeof(tll->ch_clk[nch]),
                       GFP_KERNEL);
    
    sizeof(tll->ch_clk[nch]) returns the size of a single pointer instead of
    the expected nch pointers.
    
    This bug went unnoticed because the allocation size was small enough to
    fit within the minimum size of a memory allocation for this particular
    case [1].
    
    The complete allocation can still be done at once with the struct_size
    macro, which comes in handy for structures with a trailing flexible
    array.
    
    Fix the memory allocation to obtain the original size again.
    
    Link: https://lore.kernel.org/all/202406261121.2FFD65647@keescook/ [1]
    Fixes: 16c2004d9e4d ("mfd: omap-usb-tll: Allocate driver data at once")
    Reviewed-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Fixes: commit 16c2004d9e4d ("mfd: omap-usb-tll: Allocate driver data at once")
    Link: https://lore.kernel.org/r/20240626-omap-usb-tll-counted_by-v2-1-4bedf20d1b51@gmail.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: rsmu: Split core code into separate module [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed May 29 11:48:47 2024 +0200

    mfd: rsmu: Split core code into separate module
    
    [ Upstream commit c879a8c39dd55e7fabdd8d13341f7bc5200db377 ]
    
    Linking a file into two modules can have unintended side-effects
    and produces a W=1 warning:
    
    scripts/Makefile.build:236: drivers/mfd/Makefile: rsmu_core.o is added to multiple modules: rsmu-i2c rsmu-spi
    
    Make this one a separate module instead.
    
    Fixes: a1867f85e06e ("mfd: Add Renesas Synchronization Management Unit (SMU) support")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20240529094856.1869543-1-arnd@kernel.org
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: dts: loongson: Fix GMAC phy node [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:12 2024 +0100

    MIPS: dts: loongson: Fix GMAC phy node
    
    commit 813c18d1ca1987afaf47e035152e1baa1375b1b2 upstream.
    
    phy-mode should be rgmii-id to match hardware configuration.
    
    Also there should be a phy-handle to reference phy node.
    
    Fixes: f8a11425075f ("MIPS: Loongson64: Add GMAC support for Loongson-2K1000")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

MIPS: dts: loongson: Fix liointc IRQ polarity [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:10 2024 +0100

    MIPS: dts: loongson: Fix liointc IRQ polarity
    
    [ Upstream commit dbb69b9d6234aad23b3ecd33e5bc8a8ae1485b7d ]
    
    All internal liointc interrupts are high level triggered.
    
    Fixes: b1a792601f26 ("MIPS: Loongson64: DeviceTree for Loongson-2K1000")
    Cc: stable@vger.kernel.org
    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>

MIPS: dts: loongson: Fix ls2k1000-rtc interrupt [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:11 2024 +0100

    MIPS: dts: loongson: Fix ls2k1000-rtc interrupt
    
    [ Upstream commit f70fd92df7529e7283e02a6c3a2510075f13ba30 ]
    
    The correct interrupt line for RTC is line 8 on liointc1.
    
    Fixes: e47084e116fc ("MIPS: Loongson64: DTS: Add RTC support to Loongson-2K1000")
    Cc: stable@vger.kernel.org
    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>

MIPS: ip30: ip30-console: Add missing include [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Sun Jun 16 18:54:24 2024 +0100

    MIPS: ip30: ip30-console: Add missing include
    
    commit 8de4ed75bd14ed197119ac509c6902a8561e0c1c upstream.
    
    Include linux/processor.h to fix build error:
    
    arch/mips/sgi-ip30/ip30-console.c: In function ‘prom_putchar’:
    arch/mips/sgi-ip30/ip30-console.c:21:17: error: implicit declaration of function ‘cpu_relax’ [-Werror=implicit-function-declaration]
       21 |                 cpu_relax();
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

MIPS: Loongson64: DTS: Add RTC support to Loongson-2K1000 [+ + +]
Author: Binbin Zhou <zhoubinbin@loongson.cn>
Date:   Fri Jun 2 17:50:50 2023 +0800

    MIPS: Loongson64: DTS: Add RTC support to Loongson-2K1000
    
    [ Upstream commit e47084e116fccaa43644360d7c0b997979abce3e ]
    
    The module is now supported, enable it.
    
    Acked-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
    Signed-off-by: WANG Xuerui <git@xen0n.name>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Stable-dep-of: dbb69b9d6234 ("MIPS: dts: loongson: Fix liointc IRQ polarity")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: Loongson64: DTS: Fix PCIe port nodes for ls7a [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Tue May 7 19:51:22 2024 +0100

    MIPS: Loongson64: DTS: Fix PCIe port nodes for ls7a
    
    [ Upstream commit d89a415ff8d5e0aad4963f2d8ebb0f9e8110b7fa ]
    
    Add various required properties to silent warnings:
    
    arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi:116.16-297.5: Warning (interrupt_provider): /bus@10000000/pci@1a000000: '#interrupt-cells' found, but node is not an interrupt provider
    arch/mips/boot/dts/loongson/loongson64_2core_2k1000.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>
    Stable-dep-of: dbb69b9d6234 ("MIPS: dts: loongson: Fix liointc IRQ polarity")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: Loongson64: env: Hook up Loongsson-2K [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:18 2024 +0100

    MIPS: Loongson64: env: Hook up Loongsson-2K
    
    commit 77543269ff23c75bebfb8e6e9a1177b350908ea7 upstream.
    
    Somehow those enablement bits were left over when we were
    adding initial Loongson-2K support.
    
    Set up basic information and select proper builtin DTB for
    Loongson-2K.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

MIPS: Loongson64: Remove memory node for builtin-dtb [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:09 2024 +0100

    MIPS: Loongson64: Remove memory node for builtin-dtb
    
    commit b81656c37acf1e682dde02f3e07987784b0f3634 upstream.
    
    Builtin DTBS should never contain memory node as memory is
    going to be managed by LEFI interface.
    
    Remove memory node to prevent confliction.
    
    Fixes: b1a792601f26 ("MIPS: Loongson64: DeviceTree for Loongson-2K1000")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

MIPS: Loongson64: reset: Prioritise firmware service [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:16 2024 +0100

    MIPS: Loongson64: reset: Prioritise firmware service
    
    commit 4e7ca0b57f3bc09ba3e4ab86bf6b7c35134bfd04 upstream.
    
    We should always use firmware's poweroff & reboot service
    if it's available as firmware may need to perform more task
    than platform's syscon etc.
    
    However _machine_restart & poweroff hooks are registered at
    low priority, which means platform reboot driver can override
    them.
    
    Register firmware based reboot/poweroff implementation with
    register_sys_off_handler with appropriate priority so that
    they will be prioritised. Remove _machine_halt hook as it's
    deemed to be unnecessary.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

MIPS: Loongson64: Test register availability before use [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:14 2024 +0100

    MIPS: Loongson64: Test register availability before use
    
    commit c04366b1207a036b7de02dfcc1ac7138d3343c9b upstream.
    
    Some global register address variable may be missing on
    specific CPU type, test them before use them.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

MIPS: Octeron: remove source file executable bit [+ + +]
Author: Dominique Martinet <dominique.martinet@atmark-techno.com>
Date:   Fri Jul 5 16:48:30 2024 +0900

    MIPS: Octeron: remove source file executable bit
    
    [ Upstream commit 89c7f5078935872cf47a713a645affb5037be694 ]
    
    This does not matter the least, but there is no other .[ch] file in the
    repo that is executable, so clean this up.
    
    Fixes: 29b83a64df3b ("MIPS: Octeon: Add PCIe link status check")
    Signed-off-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: SMP-CPS: Fix address for GCR_ACCESS register for CM3 and later [+ + +]
Author: Gregory CLEMENT <gregory.clement@bootlin.com>
Date:   Mon Jul 22 15:15:39 2024 +0200

    MIPS: SMP-CPS: Fix address for GCR_ACCESS register for CM3 and later
    
    [ Upstream commit a263e5f309f32301e1f3ad113293f4e68a82a646 ]
    
    When the CM block migrated from CM2.5 to CM3.0, the address offset for
    the Global CSR Access Privilege register was modified. We saw this in
    the "MIPS64 I6500 Multiprocessing System Programmer's Guide," it is
    stated that "the Global CSR Access Privilege register is located at
    offset 0x0120" in section 5.4. It is at least the same for I6400.
    
    This fix allows to use the VP cores in SMP mode if the reset values
    were modified by the bootloader.
    
    Based on the work of Vladimir Kondratiev
    <vladimir.kondratiev@mobileye.com> and the feedback from Jiaxun Yang
    <jiaxun.yang@flygoat.com>.
    
    Fixes: 197e89e0984a ("MIPS: mips-cm: Implement mips_cm_revision")
    Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
    Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mISDN: Fix a use after free in hfcmulti_tx() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Wed Jul 24 11:08:18 2024 -0500

    mISDN: Fix a use after free in hfcmulti_tx()
    
    [ Upstream commit 61ab751451f5ebd0b98e02276a44e23a10110402 ]
    
    Don't dereference *sp after calling dev_kfree_skb(*sp).
    
    Fixes: af69fb3a8ffa ("Add mISDN HFC multiport driver")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/8be65f5a-c2dd-4ba0-8a10-bfe5980b8cfb@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mlxsw: spectrum_acl: Fix ACL scale regression and firmware errors [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Thu Jun 6 16:49:43 2024 +0200

    mlxsw: spectrum_acl: Fix ACL scale regression and firmware errors
    
    [ Upstream commit 75d8d7a63065b18df9555dbaab0b42d4c6f20943 ]
    
    ACLs that reside in the algorithmic TCAM (A-TCAM) in Spectrum-2 and
    newer ASICs can share the same mask if their masks only differ in up to
    8 consecutive bits. For example, consider the following filters:
    
     # tc filter add dev swp1 ingress pref 1 proto ip flower dst_ip 192.0.2.0/24 action drop
     # tc filter add dev swp1 ingress pref 1 proto ip flower dst_ip 198.51.100.128/25 action drop
    
    The second filter can use the same mask as the first (dst_ip/24) with a
    delta of 1 bit.
    
    However, the above only works because the two filters have different
    values in the common unmasked part (dst_ip/24). When entries have the
    same value in the common unmasked part they create undesired collisions
    in the device since many entries now have the same key. This leads to
    firmware errors such as [1] and to a reduced scale.
    
    Fix by adjusting the hash table key to only include the value in the
    common unmasked part. That is, without including the delta bits. That
    way the driver will detect the collision during filter insertion and
    spill the filter into the circuit TCAM (C-TCAM).
    
    Add a test case that fails without the fix and adjust existing cases
    that check C-TCAM spillage according to the above limitation.
    
    [1]
    mlxsw_spectrum2 0000:06:00.0: EMAD reg access failed (tid=3379b18a00003394,reg_id=3027(ptce3),type=write,status=8(resource not available))
    
    Fixes: c22291f7cf45 ("mlxsw: spectrum: acl: Implement delta for ERP")
    Reported-by: Alexander Zubkov <green@qrator.net>
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Amit Cohen <amcohen@nvidia.com>
    Tested-by: Alexander Zubkov <green@qrator.net>
    Signed-off-by: Petr Machata <petrm@nvidia.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>

mlxsw: spectrum_acl_bloom_filter: Make mlxsw_sp_acl_bf_key_encode() more flexible [+ + +]
Author: Amit Cohen <amcohen@nvidia.com>
Date:   Thu Jan 6 18:06:48 2022 +0200

    mlxsw: spectrum_acl_bloom_filter: Make mlxsw_sp_acl_bf_key_encode() more flexible
    
    [ Upstream commit 5d5c3ba9e4121b7738d10be3825f4d9a5a1d80ef ]
    
    Spectrum-4 will calculate hash function for bloom filter differently from
    the existing ASICs.
    
    One of the changes is related to the way that the chunks will be build -
    without padding.
    
    As preparation for support of Spectrum-4 bloom filter, make
    mlxsw_sp_acl_bf_key_encode() more flexible, so it will be able to use it
    for Spectrum-4 as well.
    
    Signed-off-by: Amit Cohen <amcohen@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 75d8d7a63065 ("mlxsw: spectrum_acl: Fix ACL scale regression and firmware errors")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxsw: spectrum_acl_erp: Fix object nesting warning [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Thu Jun 6 16:49:42 2024 +0200

    mlxsw: spectrum_acl_erp: Fix object nesting warning
    
    [ Upstream commit 97d833ceb27dc19f8777d63f90be4a27b5daeedf ]
    
    ACLs in Spectrum-2 and newer ASICs can reside in the algorithmic TCAM
    (A-TCAM) or in the ordinary circuit TCAM (C-TCAM). The former can
    contain more ACLs (i.e., tc filters), but the number of masks in each
    region (i.e., tc chain) is limited.
    
    In order to mitigate the effects of the above limitation, the device
    allows filters to share a single mask if their masks only differ in up
    to 8 consecutive bits. For example, dst_ip/25 can be represented using
    dst_ip/24 with a delta of 1 bit. The C-TCAM does not have a limit on the
    number of masks being used (and therefore does not support mask
    aggregation), but can contain a limited number of filters.
    
    The driver uses the "objagg" library to perform the mask aggregation by
    passing it objects that consist of the filter's mask and whether the
    filter is to be inserted into the A-TCAM or the C-TCAM since filters in
    different TCAMs cannot share a mask.
    
    The set of created objects is dependent on the insertion order of the
    filters and is not necessarily optimal. Therefore, the driver will
    periodically ask the library to compute a more optimal set ("hints") by
    looking at all the existing objects.
    
    When the library asks the driver whether two objects can be aggregated
    the driver only compares the provided masks and ignores the A-TCAM /
    C-TCAM indication. This is the right thing to do since the goal is to
    move as many filters as possible to the A-TCAM. The driver also forbids
    two identical masks from being aggregated since this can only happen if
    one was intentionally put in the C-TCAM to avoid a conflict in the
    A-TCAM.
    
    The above can result in the following set of hints:
    
    H1: {mask X, A-TCAM} -> H2: {mask Y, A-TCAM} // X is Y + delta
    H3: {mask Y, C-TCAM} -> H4: {mask Z, A-TCAM} // Y is Z + delta
    
    After getting the hints from the library the driver will start migrating
    filters from one region to another while consulting the computed hints
    and instructing the device to perform a lookup in both regions during
    the transition.
    
    Assuming a filter with mask X is being migrated into the A-TCAM in the
    new region, the hints lookup will return H1. Since H2 is the parent of
    H1, the library will try to find the object associated with it and
    create it if necessary in which case another hints lookup (recursive)
    will be performed. This hints lookup for {mask Y, A-TCAM} will either
    return H2 or H3 since the driver passes the library an object comparison
    function that ignores the A-TCAM / C-TCAM indication.
    
    This can eventually lead to nested objects which are not supported by
    the library [1].
    
    Fix by removing the object comparison function from both the driver and
    the library as the driver was the only user. That way the lookup will
    only return exact matches.
    
    I do not have a reliable reproducer that can reproduce the issue in a
    timely manner, but before the fix the issue would reproduce in several
    minutes and with the fix it does not reproduce in over an hour.
    
    Note that the current usefulness of the hints is limited because they
    include the C-TCAM indication and represent aggregation that cannot
    actually happen. This will be addressed in net-next.
    
    [1]
    WARNING: CPU: 0 PID: 153 at lib/objagg.c:170 objagg_obj_parent_assign+0xb5/0xd0
    Modules linked in:
    CPU: 0 PID: 153 Comm: kworker/0:18 Not tainted 6.9.0-rc6-custom-g70fbc2c1c38b #42
    Hardware name: Mellanox Technologies Ltd. MSN3700C/VMOD0008, BIOS 5.11 10/10/2018
    Workqueue: mlxsw_core mlxsw_sp_acl_tcam_vregion_rehash_work
    RIP: 0010:objagg_obj_parent_assign+0xb5/0xd0
    [...]
    Call Trace:
     <TASK>
     __objagg_obj_get+0x2bb/0x580
     objagg_obj_get+0xe/0x80
     mlxsw_sp_acl_erp_mask_get+0xb5/0xf0
     mlxsw_sp_acl_atcam_entry_add+0xe8/0x3c0
     mlxsw_sp_acl_tcam_entry_create+0x5e/0xa0
     mlxsw_sp_acl_tcam_vchunk_migrate_one+0x16b/0x270
     mlxsw_sp_acl_tcam_vregion_rehash_work+0xbe/0x510
     process_one_work+0x151/0x370
    
    Fixes: 9069a3817d82 ("lib: objagg: implement optimization hints assembly and use hints for object creation")
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Amit Cohen <amcohen@nvidia.com>
    Tested-by: Alexander Zubkov <green@qrator.net>
    Signed-off-by: Petr Machata <petrm@nvidia.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>

 
mm/hugetlb: fix possible recursive locking detected warning [+ + +]
Author: Miaohe Lin <linmiaohe@huawei.com>
Date:   Fri Jul 12 11:13:14 2024 +0800

    mm/hugetlb: fix possible recursive locking detected warning
    
    commit 667574e873b5f77a220b2a93329689f36fb56d5d upstream.
    
    When tries to demote 1G hugetlb folios, a lockdep warning is observed:
    
    ============================================
    WARNING: possible recursive locking detected
    6.10.0-rc6-00452-ga4d0275fa660-dirty #79 Not tainted
    --------------------------------------------
    bash/710 is trying to acquire lock:
    ffffffff8f0a7850 (&h->resize_lock){+.+.}-{3:3}, at: demote_store+0x244/0x460
    
    but task is already holding lock:
    ffffffff8f0a6f48 (&h->resize_lock){+.+.}-{3:3}, at: demote_store+0xae/0x460
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(&h->resize_lock);
      lock(&h->resize_lock);
    
     *** DEADLOCK ***
    
     May be due to missing lock nesting notation
    
    4 locks held by bash/710:
     #0: ffff8f118439c3f0 (sb_writers#5){.+.+}-{0:0}, at: ksys_write+0x64/0xe0
     #1: ffff8f11893b9e88 (&of->mutex#2){+.+.}-{3:3}, at: kernfs_fop_write_iter+0xf8/0x1d0
     #2: ffff8f1183dc4428 (kn->active#98){.+.+}-{0:0}, at: kernfs_fop_write_iter+0x100/0x1d0
     #3: ffffffff8f0a6f48 (&h->resize_lock){+.+.}-{3:3}, at: demote_store+0xae/0x460
    
    stack backtrace:
    CPU: 3 PID: 710 Comm: bash Not tainted 6.10.0-rc6-00452-ga4d0275fa660-dirty #79
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x68/0xa0
     __lock_acquire+0x10f2/0x1ca0
     lock_acquire+0xbe/0x2d0
     __mutex_lock+0x6d/0x400
     demote_store+0x244/0x460
     kernfs_fop_write_iter+0x12c/0x1d0
     vfs_write+0x380/0x540
     ksys_write+0x64/0xe0
     do_syscall_64+0xb9/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fa61db14887
    RSP: 002b:00007ffc56c48358 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007fa61db14887
    RDX: 0000000000000002 RSI: 000055a030050220 RDI: 0000000000000001
    RBP: 000055a030050220 R08: 00007fa61dbd1460 R09: 000000007fffffff
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000002
    R13: 00007fa61dc1b780 R14: 00007fa61dc17600 R15: 00007fa61dc16a00
     </TASK>
    
    Lockdep considers this an AA deadlock because the different resize_lock
    mutexes reside in the same lockdep class, but this is a false positive.
    Place them in distinct classes to avoid these warnings.
    
    Link: https://lkml.kernel.org/r/20240712031314.2570452-1-linmiaohe@huawei.com
    Fixes: 8531fc6f52f5 ("hugetlb: add hugetlb demote page support")
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Acked-by: Muchun Song <muchun.song@linux.dev>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/numa_balancing: teach mpol_to_str about the balancing mode [+ + +]
Author: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Date:   Mon Jul 8 08:56:32 2024 +0100

    mm/numa_balancing: teach mpol_to_str about the balancing mode
    
    commit af649773fb25250cd22625af021fb6275c56a3ee upstream.
    
    Since balancing mode was added in bda420b98505 ("numa balancing: migrate
    on fault among multiple bound nodes"), it was possible to set this mode
    but it wouldn't be shown in /proc/<pid>/numa_maps since there was no
    support for it in the mpol_to_str() helper.
    
    Furthermore, because the balancing mode sets the MPOL_F_MORON flag, it
    would be displayed as 'default' due a workaround introduced a few years
    earlier in 8790c71a18e5 ("mm/mempolicy.c: fix mempolicy printing in
    numa_maps").
    
    To tidy this up we implement two changes:
    
    Replace the MPOL_F_MORON check by pointer comparison against the
    preferred_node_policy array.  By doing this we generalise the current
    special casing and replace the incorrect 'default' with the correct 'bind'
    for the mode.
    
    Secondly, we add a string representation and corresponding handling for
    the MPOL_F_NUMA_BALANCING flag.
    
    With the two changes together we start showing the balancing flag when it
    is set and therefore complete the fix.
    
    Representation format chosen is to separate multiple flags with vertical
    bars, following what existed long time ago in kernel 2.6.25.  But as
    between then and now there wasn't a way to display multiple flags, this
    patch does not change the format in practice.
    
    Some /proc/<pid>/numa_maps output examples:
    
     555559580000 bind=balancing:0-1,3 file=...
     555585800000 bind=balancing|static:0,2 file=...
     555635240000 prefer=relative:0 file=
    
    Link: https://lkml.kernel.org/r/20240708075632.95857-1-tursulin@igalia.com
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Fixes: bda420b98505 ("numa balancing: migrate on fault among multiple bound nodes")
    References: 8790c71a18e5 ("mm/mempolicy.c: fix mempolicy printing in numa_maps")
    Reviewed-by: "Huang, Ying" <ying.huang@intel.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: <stable@vger.kernel.org>    [5.12+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: mmap_lock: replace get_memcg_path_buf() with on-stack buffer [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Fri Jun 21 10:08:41 2024 +0900

    mm: mmap_lock: replace get_memcg_path_buf() with on-stack buffer
    
    commit 7d6be67cfdd4a53cea7147313ca13c531e3a470f upstream.
    
    Commit 2b5067a8143e ("mm: mmap_lock: add tracepoints around lock
    acquisition") introduced TRACE_MMAP_LOCK_EVENT() macro using
    preempt_disable() in order to let get_mm_memcg_path() return a percpu
    buffer exclusively used by normal, softirq, irq and NMI contexts
    respectively.
    
    Commit 832b50725373 ("mm: mmap_lock: use local locks instead of disabling
    preemption") replaced preempt_disable() with local_lock(&memcg_paths.lock)
    based on an argument that preempt_disable() has to be avoided because
    get_mm_memcg_path() might sleep if PREEMPT_RT=y.
    
    But syzbot started reporting
    
      inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
    
    and
    
      inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
    
    messages, for local_lock() does not disable IRQ.
    
    We could replace local_lock() with local_lock_irqsave() in order to
    suppress these messages.  But this patch instead replaces percpu buffers
    with on-stack buffer, for the size of each buffer returned by
    get_memcg_path_buf() is only 256 bytes which is tolerable for allocating
    from current thread's kernel stack memory.
    
    Link: https://lkml.kernel.org/r/ef22d289-eadb-4ed9-863b-fbc922b33d8d@I-love.SAKURA.ne.jp
    Reported-by: syzbot <syzbot+40905bca570ae6784745@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=40905bca570ae6784745
    Fixes: 832b50725373 ("mm: mmap_lock: use local locks instead of disabling preemption")
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reviewed-by: Axel Rasmussen <axelrasmussen@google.com>
    Cc: Nicolas Saenz Julienne <nsaenzju@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: distinguish rcv vs sent backup flag in requests [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Aug 9 11:06:08 2024 +0200

    mptcp: distinguish rcv vs sent backup flag in requests
    
    commit efd340bf3d7779a3a8ec954d8ec0fb8a10f24982 upstream.
    
    When sending an MP_JOIN + SYN + ACK, it is possible to mark the subflow
    as 'backup' by setting the flag with the same name. Before this patch,
    the backup was set if the other peer set it in its MP_JOIN + SYN
    request.
    
    It is not correct: the backup flag should be set in the MPJ+SYN+ACK only
    if the host asks for it, and not mirroring what was done by the other
    peer. It is then required to have a dedicated bit for each direction,
    similar to what is done in the subflow context.
    
    Fixes: f296234c98a8 ("mptcp: Add handling of incoming MP_JOIN requests")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in subflow.c, because the context has changed in commit
      4cf86ae84c71 ("mptcp: strict local address ID selection"), and in
      commit 967d3c27127e ("mptcp: fix data races on remote_id"), which are
      not in this version. These commits are unrelated to this
      modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: export local_address [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Fri Aug 9 11:09:13 2024 +0200

    mptcp: export local_address
    
    commit dc886bce753cc2cf3c88ec5c7a6880a4e17d65ba upstream.
    
    Rename local_address() with "mptcp_" prefix and export it in protocol.h.
    
    This function will be re-used in the common PM code (pm.c) in the
    following commit.
    
    Signed-off-by: Geliang Tang <geliang.tang@suse.com>
    Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 6834097fc38c ("mptcp: pm: fix backup support in signal endpoints")
    [ Conflicts in pm_netlink.c and protocol.h, because the context has
      changed in commit 4638de5aefe5 ("mptcp: handle local addrs announced
      by userspace PMs") which is not in this version. This commit is
      unrelated to this modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix bad RCVPRUNED mib accounting [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Fri Aug 9 11:08:14 2024 +0200

    mptcp: fix bad RCVPRUNED mib accounting
    
    commit 0a567c2a10033bf04ed618368d179bce6977984b upstream.
    
    Since its introduction, the mentioned MIB accounted for the wrong
    event: wake-up being skipped as not-needed on some edge condition
    instead of incoming skb being dropped after landing in the (subflow)
    receive queue.
    
    Move the increment in the correct location.
    
    Fixes: ce599c516386 ("mptcp: properly account bulk freed memory")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in protocol.c, because the commit 6511882cdd82 ("mptcp:
      allocate fwd memory separately on the rx and tx path") is not in this
      version. The fix can still be applied before the 'goto drop'. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix duplicate data handling [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Wed Jul 31 12:10:15 2024 +0200

    mptcp: fix duplicate data handling
    
    commit 68cc924729ffcfe90d0383177192030a9aeb2ee4 upstream.
    
    When a subflow receives and discards duplicate data, the mptcp
    stack assumes that the consumed offset inside the current skb is
    zero.
    
    With multiple subflows receiving data simultaneously such assertion
    does not held true. As a result the subflow-level copied_seq will
    be incorrectly increased and later on the same subflow will observe
    a bad mapping, leading to subflow reset.
    
    Address the issue taking into account the skb consumed offset in
    mptcp_subflow_discard_data().
    
    Fixes: 04e4cd4f7ca4 ("mptcp: cleanup mptcp_subflow_discard_data()")
    Cc: stable@vger.kernel.org
    Link: https://github.com/multipath-tcp/mptcp_net-next/issues/501
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix NL PM announced address accounting [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Fri Aug 9 11:07:22 2024 +0200

    mptcp: fix NL PM announced address accounting
    
    commit 4b317e0eb287bd30a1b329513531157c25e8b692 upstream.
    
    Currently the per connection announced address counter is never
    decreased. As a consequence, after connection establishment, if
    the NL PM deletes an endpoint and adds a new/different one, no
    additional subflow is created for the new endpoint even if the
    current limits allow that.
    
    Address the issue properly updating the signaled address counter
    every time the NL PM removes such addresses.
    
    Fixes: 01cacb00b35c ("mptcp: add netlink-based PM")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [ Conflicts in pm_netlink.c, because the commit 6fa0174a7c86 ("mptcp:
      more careful RM_ADDR generation") is not in this version. The
      conditions are slightly different, but the same fix can be applied:
      first checking the IDs, then removing the address. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fully established after ADD_ADDR echo on MPJ [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue Aug 13 12:46:43 2024 +0200

    mptcp: fully established after ADD_ADDR echo on MPJ
    
    commit d67c5649c1541dc93f202eeffc6f49220a4ed71d upstream.
    
    Before this patch, receiving an ADD_ADDR echo on the just connected
    MP_JOIN subflow -- initiator side, after the MP_JOIN 3WHS -- was
    resulting in an MP_RESET. That's because only ACKs with a DSS or
    ADD_ADDRs without the echo bit were allowed.
    
    Not allowing the ADD_ADDR echo after an MP_CAPABLE 3WHS makes sense, as
    we are not supposed to send an ADD_ADDR before because it requires to be
    in full established mode first. For the MP_JOIN 3WHS, that's different:
    the ADD_ADDR can be sent on a previous subflow, and the ADD_ADDR echo
    can be received on the recently created one. The other peer will already
    be in fully established, so it is allowed to send that.
    
    We can then relax the conditions here to accept the ADD_ADDR echo for
    MPJ subflows.
    
    Fixes: 67b12f792d5e ("mptcp: full fully established support after ADD_ADDR")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-1-c8a9b036493b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflicts in options.c, because the context has changed in commit
      b3ea6b272d79 ("mptcp: consolidate initial ack seq generation"), which
      is not in this version. This commit is unrelated to this
      modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: mib: count MPJ with backup flag [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Aug 9 11:07:54 2024 +0200

    mptcp: mib: count MPJ with backup flag
    
    commit 4dde0d72ccec500c60c798e036b852e013d6e124 upstream.
    
    Without such counters, it is difficult to easily debug issues with MPJ
    not having the backup flags on production servers.
    
    This is not strictly a fix, but it eases to validate the following
    patches without requiring to take packet traces, to query ongoing
    connections with Netlink with admin permissions, or to guess by looking
    at the behaviour of the packet scheduler. Also, the modification is self
    contained, isolated, well controlled, and the increments are done just
    after others, there from the beginning. It looks then safe, and helpful
    to backport this.
    
    Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in subflow.c because the context has changed in
      commit b3ea6b272d79 ("mptcp: consolidate initial ack seq generation")
      which is not in this version. This commit is unrelated to this
      modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: fix backup support in signal endpoints [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Aug 9 11:09:14 2024 +0200

    mptcp: pm: fix backup support in signal endpoints
    
    commit 6834097fc38c5416701c793da94558cea49c0a1f upstream.
    
    There was a support for signal endpoints, but only when the endpoint's
    flag was changed during a connection. If an endpoint with the signal and
    backup was already present, the MP_JOIN reply was not containing the
    backup flag as expected.
    
    That's confusing to have this inconsistent behaviour. On the other hand,
    the infrastructure to set the backup flag in the SYN + ACK + MP_JOIN was
    already there, it was just never set before. Now when requesting the
    local ID from the path-manager, the backup status is also requested.
    
    Note that when the userspace PM is used, the backup flag can be set if
    the local address was already used before with a backup flag, e.g. if
    the address was announced with the 'backup' flag, or a subflow was
    created with the 'backup' flag.
    
    Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: stable@vger.kernel.org
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/507
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in pm_userspace.c because the context has changed in commit
      1e07938e29c5 ("net: mptcp: rename netlink handlers to
      mptcp_pm_nl_<blah>_{doit,dumpit}") which is not in this version. This
      commit is unrelated to this modification.
      Conflicts in protocol.h because the context has changed in commit
      9ae7846c4b6b ("mptcp: dump addrs in userspace pm list") which is not
      in this version. This commit is unrelated to this modification.
      Conflicts in pm.c because the context has changed in commit
      f40be0db0b76 ("mptcp: unify pm get_flags_and_ifindex_by_id") which is
      not in this version. This commit is unrelated to this modification.
      Conflicts in subflow.c, because the commit 4cf86ae84c71 ("mptcp:
      strict local address ID selection") is not in this version. It is then
      not needed to modify the subflow_chk_local_id() helper, which is not
      in this version.
      Also, in this version, there is no pm_userspace.c, because this PM has
      been added in v5.19, which also causes conflicts in protocol.h, and
      pm_netlink.c. Plus the code in pm.c can be simplified, as there is no
      userspace PM. And the code in pm_netlink.c needs to use
      addresses_equal() instead of mptcp_addresses_equal(), see commit
      4638de5aefe5 ("mptcp: handle local addrs announced by userspace PMs").
      The code in pm_netlink.c also needs to be adapted because the
      pm_nl_get_pernet_from_msk() helper is not in this version, introduced
      later in commit c682bf536cf4 ("mptcp: add pm_nl_pernet helpers"). ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: only set request_bkup flag when sending MP_PRIO [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Aug 9 11:08:46 2024 +0200

    mptcp: pm: only set request_bkup flag when sending MP_PRIO
    
    commit 4258b94831bb7ff28ab80e3c8d94db37db930728 upstream.
    
    The 'backup' flag from mptcp_subflow_context structure is supposed to be
    set only when the other peer flagged a subflow as backup, not the
    opposite.
    
    Fixes: 067065422fcd ("mptcp: add the outgoing MP_PRIO support")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in pm_netlink.c, because the commit f5360e9b314c ("mptcp:
      introduce and use mptcp_pm_send_ack()") is not in this version. This
      code is in mptcp_pm_nl_mp_prio_send_ack() instead of in a dedicated
      helper. The same modification can be applied there. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: sched: check both directions for backup [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Aug 9 11:05:31 2024 +0200

    mptcp: sched: check both directions for backup
    
    commit b6a66e521a2032f7fcba2af5a9bcbaeaa19b7ca3 upstream.
    
    The 'mptcp_subflow_context' structure has two items related to the
    backup flags:
    
     - 'backup': the subflow has been marked as backup by the other peer
    
     - 'request_bkup': the backup flag has been set by the host
    
    Before this patch, the scheduler was only looking at the 'backup' flag.
    That can make sense in some cases, but it looks like that's not what we
    wanted for the general use, because either the path-manager was setting
    both of them when sending an MP_PRIO, or the receiver was duplicating
    the 'backup' flag in the subflow request.
    
    Note that the use of these two flags in the path-manager are going to be
    fixed in the next commits, but this change here is needed not to modify
    the behaviour.
    
    Fixes: f296234c98a8 ("mptcp: Add handling of incoming MP_JOIN requests")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in protocol.c, because the context has changed in commit
      3ce0852c86b9 ("mptcp: enforce HoL-blocking estimation"), which is not
      in this version. This commit is unrelated to this modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mtd: make mtd_test.c a separate module [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed May 29 11:50:39 2024 +0200

    mtd: make mtd_test.c a separate module
    
    [ Upstream commit a5cf054d325e6f362e82fe6d124a1871a4af8174 ]
    
    This file gets linked into nine different modules, which causes a warning:
    
    scripts/Makefile.build:236: drivers/mtd/tests/Makefile: mtd_test.o is added to multiple modules: mtd_nandbiterrs mtd_oobtest mtd_pagetest mtd_readtest mtd_speedtest mtd_stresstest mtd_subpagetest mtd_torturetest
    
    Make it a separate module instead.
    
    Fixes: a995c792280d ("mtd: tests: rename sources in order to link a helper object")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/linux-mtd/20240529095049.1915393-1-arnd@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/iucv: fix use after free in iucv_sock_close() [+ + +]
Author: Alexandra Winter <wintera@linux.ibm.com>
Date:   Mon Jul 29 14:28:16 2024 +0200

    net/iucv: fix use after free in iucv_sock_close()
    
    [ Upstream commit f558120cd709682b739207b48cf7479fd9568431 ]
    
    iucv_sever_path() is called from process context and from bh context.
    iucv->path is used as indicator whether somebody else is taking care of
    severing the path (or it is already removed / never existed).
    This needs to be done with atomic compare and swap, otherwise there is a
    small window where iucv_sock_close() will try to work with a path that has
    already been severed and freed by iucv_callback_connrej() called by
    iucv_tasklet_fn().
    
    Example:
    [452744.123844] Call Trace:
    [452744.123845] ([<0000001e87f03880>] 0x1e87f03880)
    [452744.123966]  [<00000000d593001e>] iucv_path_sever+0x96/0x138
    [452744.124330]  [<000003ff801ddbca>] iucv_sever_path+0xc2/0xd0 [af_iucv]
    [452744.124336]  [<000003ff801e01b6>] iucv_sock_close+0xa6/0x310 [af_iucv]
    [452744.124341]  [<000003ff801e08cc>] iucv_sock_release+0x3c/0xd0 [af_iucv]
    [452744.124345]  [<00000000d574794e>] __sock_release+0x5e/0xe8
    [452744.124815]  [<00000000d5747a0c>] sock_close+0x34/0x48
    [452744.124820]  [<00000000d5421642>] __fput+0xba/0x268
    [452744.124826]  [<00000000d51b382c>] task_work_run+0xbc/0xf0
    [452744.124832]  [<00000000d5145710>] do_notify_resume+0x88/0x90
    [452744.124841]  [<00000000d5978096>] system_call+0xe2/0x2c8
    [452744.125319] Last Breaking-Event-Address:
    [452744.125321]  [<00000000d5930018>] iucv_path_sever+0x90/0x138
    [452744.125324]
    [452744.125325] Kernel panic - not syncing: Fatal exception in interrupt
    
    Note that bh_lock_sock() is not serializing the tasklet context against
    process context, because the check for sock_owned_by_user() and
    corresponding handling is missing.
    
    Ideas for a future clean-up patch:
    A) Correct usage of bh_lock_sock() in tasklet context, as described in
    Link: https://lore.kernel.org/netdev/1280155406.2899.407.camel@edumazet-laptop/
    Re-enqueue, if needed. This may require adding return values to the
    tasklet functions and thus changes to all users of iucv.
    
    B) Change iucv tasklet into worker and use only lock_sock() in af_iucv.
    
    Fixes: 7d316b945352 ("af_iucv: remove IUCV-pathes completely")
    Reviewed-by: Halil Pasic <pasic@linux.ibm.com>
    Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
    Link: https://patch.msgid.link/20240729122818.947756-1-wintera@linux.ibm.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Add a check for the return value from mlx5_port_set_eth_ptys [+ + +]
Author: Shahar Shitrit <shshitrit@nvidia.com>
Date:   Tue Jul 30 09:16:37 2024 +0300

    net/mlx5e: Add a check for the return value from mlx5_port_set_eth_ptys
    
    [ Upstream commit 3f8e82a020a5c22f9b791f4ac499b8e18007fbda ]
    
    Since the documentation for mlx5_toggle_port_link states that it should
    only be used after setting the port register, we add a check for the
    return value from mlx5_port_set_eth_ptys to ensure the register was
    successfully set before calling it.
    
    Fixes: 667daedaecd1 ("net/mlx5e: Toggle link only after modifying port parameters")
    Signed-off-by: Shahar Shitrit <shshitrit@nvidia.com>
    Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
    Link: https://patch.msgid.link/20240730061638.1831002-9-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/smc: set rmb's SG_MAX_SINGLE_ALLOC limitation only when CONFIG_ARCH_NO_SG_CHAIN is defined [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Mon Jun 3 11:00:18 2024 +0800

    net/smc: set rmb's SG_MAX_SINGLE_ALLOC limitation only when CONFIG_ARCH_NO_SG_CHAIN is defined
    
    [ Upstream commit 3ac14b9dfbd345e891d48d89f6c2fa519848f0f4 ]
    
    SG_MAX_SINGLE_ALLOC is used to limit maximum number of entries that
    will be allocated in one piece of scatterlist. When the entries of
    scatterlist exceeds SG_MAX_SINGLE_ALLOC, sg chain will be used. From
    commit 7c703e54cc71 ("arch: switch the default on ARCH_HAS_SG_CHAIN"),
    we can know that the macro CONFIG_ARCH_NO_SG_CHAIN is used to identify
    whether sg chain is supported. So, SMC-R's rmb buffer should be limited
    by SG_MAX_SINGLE_ALLOC only when the macro CONFIG_ARCH_NO_SG_CHAIN is
    defined.
    
    Fixes: a3fe3d01bd0d ("net/smc: introduce sg-logic for RMBs")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Co-developed-by: Wen Gu <guwen@linux.alibaba.com>
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: bonding: correctly annotate RCU in bond_should_notify_peers() [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Jul 19 09:41:18 2024 -0700

    net: bonding: correctly annotate RCU in bond_should_notify_peers()
    
    [ Upstream commit 3ba359c0cd6eb5ea772125a7aededb4a2d516684 ]
    
    RCU use in bond_should_notify_peers() looks wrong, since it does
    rcu_dereference(), leaves the critical section, and uses the
    pointer after that.
    
    Luckily, it's called either inside a nested RCU critical section
    or with the RTNL held.
    
    Annotate it with rcu_dereference_rtnl() instead, and remove the
    inner RCU critical section.
    
    Fixes: 4cb4f97b7e36 ("bonding: rebuild the lock use for bond_mii_monitor()")
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Acked-by: Jay Vosburgh <jv@jvosburgh.net>
    Link: https://patch.msgid.link/20240719094119.35c62455087d.I68eb9c0f02545b364b79a59f2110f2cf5682a8e2@changeid
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bridge: mcast: wait for previous gc cycles when removing port [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Aug 2 11:07:30 2024 +0300

    net: bridge: mcast: wait for previous gc cycles when removing port
    
    [ Upstream commit 92c4ee25208d0f35dafc3213cdf355fbe449e078 ]
    
    syzbot hit a use-after-free[1] which is caused because the bridge doesn't
    make sure that all previous garbage has been collected when removing a
    port. What happens is:
          CPU 1                   CPU 2
     start gc cycle           remove port
                             acquire gc lock first
     wait for lock
                             call br_multicasg_gc() directly
     acquire lock now but    free port
     the port can be freed
     while grp timers still
     running
    
    Make sure all previous gc cycles have finished by using flush_work before
    freeing the port.
    
    [1]
      BUG: KASAN: slab-use-after-free in br_multicast_port_group_expired+0x4c0/0x550 net/bridge/br_multicast.c:861
      Read of size 8 at addr ffff888071d6d000 by task syz.5.1232/9699
    
      CPU: 1 PID: 9699 Comm: syz.5.1232 Not tainted 6.10.0-rc5-syzkaller-00021-g24ca36a562d6 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/07/2024
      Call Trace:
       <IRQ>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:114
       print_address_description mm/kasan/report.c:377 [inline]
       print_report+0xc3/0x620 mm/kasan/report.c:488
       kasan_report+0xd9/0x110 mm/kasan/report.c:601
       br_multicast_port_group_expired+0x4c0/0x550 net/bridge/br_multicast.c:861
       call_timer_fn+0x1a3/0x610 kernel/time/timer.c:1792
       expire_timers kernel/time/timer.c:1843 [inline]
       __run_timers+0x74b/0xaf0 kernel/time/timer.c:2417
       __run_timer_base kernel/time/timer.c:2428 [inline]
       __run_timer_base kernel/time/timer.c:2421 [inline]
       run_timer_base+0x111/0x190 kernel/time/timer.c:2437
    
    Reported-by: syzbot+263426984509be19c9a0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=263426984509be19c9a0
    Fixes: e12cec65b554 ("net: bridge: mcast: destroy all entries via gc")
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Link: https://patch.msgid.link/20240802080730.3206303-1-razor@blackwall.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: Limit chip-wide jumbo frame config to CPU ports [+ + +]
Author: Martin Willi <martin@strongswan.org>
Date:   Wed Jul 17 11:08:20 2024 +0200

    net: dsa: b53: Limit chip-wide jumbo frame config to CPU ports
    
    [ Upstream commit c5118072e228e7e4385fc5ac46b2e31cf6c4f2d3 ]
    
    Broadcom switches supported by the b53 driver use a chip-wide jumbo frame
    configuration. In the commit referenced with the Fixes tag, the setting
    is applied just for the last port changing its MTU.
    
    While configuring CPU ports accounts for tagger overhead, user ports do
    not. When setting the MTU for a user port, the chip-wide setting is
    reduced to not include the tagger overhead, resulting in an potentially
    insufficient chip-wide maximum frame size for the CPU port.
    
    As, by design, the CPU port MTU is adjusted for any user port change,
    apply the chip-wide setting only for CPU ports. This aligns the driver
    to the behavior of other switch drivers.
    
    Fixes: 6ae5834b983a ("net: dsa: b53: add MTU configuration support")
    Suggested-by: Vladimir Oltean <olteanv@gmail.com>
    Signed-off-by: Martin Willi <martin@strongswan.org>
    Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: bcm_sf2: Fix a possible memory leak in bcm_sf2_mdio_register() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Tue Aug 6 10:13:27 2024 +0900

    net: dsa: bcm_sf2: Fix a possible memory leak in bcm_sf2_mdio_register()
    
    [ Upstream commit e3862093ee93fcfbdadcb7957f5f8974fffa806a ]
    
    bcm_sf2_mdio_register() calls of_phy_find_device() and then
    phy_device_remove() in a loop to remove existing PHY devices.
    of_phy_find_device() eventually calls bus_find_device(), which calls
    get_device() on the returned struct device * to increment the refcount.
    The current implementation does not decrement the refcount, which causes
    memory leak.
    
    This commit adds the missing phy_device_free() call to decrement the
    refcount via put_device() to balance the refcount.
    
    Fixes: 771089c2a485 ("net: dsa: bcm_sf2: Ensure that MDIO diversion is used")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20240806011327.3817861-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: Limit chip-wide frame size config to CPU ports [+ + +]
Author: Martin Willi <martin@strongswan.org>
Date:   Wed Jul 17 11:08:19 2024 +0200

    net: dsa: mv88e6xxx: Limit chip-wide frame size config to CPU ports
    
    [ Upstream commit 66b6095c264e1b4e0a441c6329861806504e06c6 ]
    
    Marvell chips not supporting per-port jumbo frame size configurations use
    a chip-wide frame size configuration. In the commit referenced with the
    Fixes tag, the setting is applied just for the last port changing its MTU.
    
    While configuring CPU ports accounts for tagger overhead, user ports do
    not. When setting the MTU for a user port, the chip-wide setting is
    reduced to not include the tagger overhead, resulting in an potentially
    insufficient maximum frame size for the CPU port. Specifically, sending
    full-size frames from the CPU port on a MV88E6097 having a user port MTU
    of 1500 bytes results in dropped frames.
    
    As, by design, the CPU port MTU is adjusted for any user port change,
    apply the chip-wide setting only for CPU ports.
    
    Fixes: 1baf0fac10fb ("net: dsa: mv88e6xxx: Use chip-wide max frame size for MTU")
    Suggested-by: Vladimir Oltean <olteanv@gmail.com>
    Signed-off-by: Martin Willi <martin@strongswan.org>
    Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: esp: cleanup esp_output_tail_tcp() in case of unsupported ESPINTCP [+ + +]
Author: Hagar Hemdan <hagarhem@amazon.com>
Date:   Sat May 18 13:04:39 2024 +0000

    net: esp: cleanup esp_output_tail_tcp() in case of unsupported ESPINTCP
    
    [ Upstream commit 96f887a612e4cda89efc3f54bc10c1997e3ab0e9 ]
    
    xmit() functions should consume skb or return error codes in error
    paths.
    When the configuration "CONFIG_INET_ESPINTCP" is not set, the
    implementation of the function "esp_output_tail_tcp" violates this rule.
    The function frees the skb and returns the error code.
    This change removes the kfree_skb from both functions, for both
    esp4 and esp6.
    WARN_ON is added because esp_output_tail_tcp() should never be called if
    CONFIG_INET_ESPINTCP is not set.
    
    This bug was discovered and resolved using Coverity Static Analysis
    Security Testing (SAST) by Synopsys, Inc.
    
    Fixes: e27cca96cd68 ("xfrm: add espintcp (RFC 8229)")
    Signed-off-by: Hagar Hemdan <hagarhem@amazon.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fec: Fix FEC_ECR_EN1588 being cleared on link-down [+ + +]
Author: Csókás, Bence <csokas.bence@prolan.hu>
Date:   Wed Jun 19 14:31:11 2024 +0200

    net: fec: Fix FEC_ECR_EN1588 being cleared on link-down
    
    [ Upstream commit c32fe1986f27cac329767d3497986e306cad1d5e ]
    
    FEC_ECR_EN1588 bit gets cleared after MAC reset in `fec_stop()`, which
    makes all 1588 functionality shut down, and all the extended registers
    disappear, on link-down, making the adapter fall back to compatibility
    "dumb mode". However, some functionality needs to be retained (e.g. PPS)
    even without link.
    
    Fixes: 6605b730c061 ("FEC: Add time stamping code and a PTP hardware clock")
    Cc: Richard Cochran <richardcochran@gmail.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/netdev/5fa9fadc-a89d-467a-aae9-c65469ff5fe1@lunn.ch/
    Signed-off-by: Csókás, Bence <csokas.bence@prolan.hu>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fec: Refactor: #define magic constants [+ + +]
Author: Csókás Bence <csokas.bence@prolan.hu>
Date:   Mon Feb 12 16:37:17 2024 +0100

    net: fec: Refactor: #define magic constants
    
    [ Upstream commit ff049886671ccd4e624a30ec464cb20e4c39a313 ]
    
    Add defines for bits of ECR, RCR control registers, TX watermark etc.
    
    Signed-off-by: Csókás Bence <csokas.bence@prolan.hu>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20240212153717.10023-1-csokas.bence@prolan.hu
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: c32fe1986f27 ("net: fec: Fix FEC_ECR_EN1588 being cleared on link-down")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fec: Stop PPS on driver remove [+ + +]
Author: Csókás, Bence <csokas.bence@prolan.hu>
Date:   Wed Aug 7 10:09:56 2024 +0200

    net: fec: Stop PPS on driver remove
    
    [ Upstream commit 8fee6d5ad5fa18c270eedb2a2cdf58dbadefb94b ]
    
    PPS was not stopped in `fec_ptp_stop()`, called when
    the adapter was removed. Consequentially, you couldn't
    safely reload the driver with the PPS signal on.
    
    Fixes: 32cba57ba74b ("net: fec: introduce fec_ptp_stop and use in probe fail path")
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Link: https://lore.kernel.org/netdev/CAOMZO5BzcZR8PwKKwBssQq_wAGzVgf1ffwe_nhpQJjviTdxy-w@mail.gmail.com/T/#m01dcb810bfc451a492140f6797ca77443d0cb79f
    Signed-off-by: Csókás, Bence <csokas.bence@prolan.hu>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20240807080956.2556602-1-csokas.bence@prolan.hu
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: linkwatch: use system_unbound_wq [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Aug 5 08:58:21 2024 +0000

    net: linkwatch: use system_unbound_wq
    
    [ Upstream commit 3e7917c0cdad835a5121520fc5686d954b7a61ab ]
    
    linkwatch_event() grabs possibly very contended RTNL mutex.
    
    system_wq is not suitable for such work.
    
    Inspired by many noisy syzbot reports.
    
    3 locks held by kworker/0:7/5266:
     #0: ffff888015480948 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work kernel/workqueue.c:3206 [inline]
     #0: ffff888015480948 ((wq_completion)events){+.+.}-{0:0}, at: process_scheduled_works+0x90a/0x1830 kernel/workqueue.c:3312
     #1: ffffc90003f6fd00 ((linkwatch_work).work){+.+.}-{0:0}, at: process_one_work kernel/workqueue.c:3207 [inline]
     , at: process_scheduled_works+0x945/0x1830 kernel/workqueue.c:3312
     #2: ffffffff8fa6f208 (rtnl_mutex){+.+.}-{3:3}, at: linkwatch_event+0xe/0x60 net/core/link_watch.c:276
    
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20240805085821.1616528-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: missing check virtio [+ + +]
Author: Denis Arefev <arefev@swemel.ru>
Date:   Thu Jun 13 12:54:48 2024 +0300

    net: missing check virtio
    
    [ Upstream commit e269d79c7d35aa3808b1f3c1737d63dab504ddc8 ]
    
    Two missing check in virtio_net_hdr_to_skb() allowed syzbot
    to crash kernels again
    
    1. After the skb_segment function the buffer may become non-linear
    (nr_frags != 0), but since the SKBTX_SHARED_FRAG flag is not set anywhere
    the __skb_linearize function will not be executed, then the buffer will
    remain non-linear. Then the condition (offset >= skb_headlen(skb))
    becomes true, which causes WARN_ON_ONCE in skb_checksum_help.
    
    2. The struct sk_buff and struct virtio_net_hdr members must be
    mathematically related.
    (gso_size) must be greater than (needed) otherwise WARN_ON_ONCE.
    (remainder) must be greater than (needed) otherwise WARN_ON_ONCE.
    (remainder) may be 0 if division is without remainder.
    
    offset+2 (4191) > skb_headlen() (1116)
    WARNING: CPU: 1 PID: 5084 at net/core/dev.c:3303 skb_checksum_help+0x5e2/0x740 net/core/dev.c:3303
    Modules linked in:
    CPU: 1 PID: 5084 Comm: syz-executor336 Not tainted 6.7.0-rc3-syzkaller-00014-gdf60cee26a2e #0
    Hardware name: Google Compute Engine/Google Compute Engine, BIOS Google 11/10/2023
    RIP: 0010:skb_checksum_help+0x5e2/0x740 net/core/dev.c:3303
    Code: 89 e8 83 e0 07 83 c0 03 38 d0 7c 08 84 d2 0f 85 52 01 00 00 44 89 e2 2b 53 74 4c 89 ee 48 c7 c7 40 57 e9 8b e8 af 8f dd f8 90 <0f> 0b 90 90 e9 87 fe ff ff e8 40 0f 6e f9 e9 4b fa ff ff 48 89 ef
    RSP: 0018:ffffc90003a9f338 EFLAGS: 00010286
    RAX: 0000000000000000 RBX: ffff888025125780 RCX: ffffffff814db209
    RDX: ffff888015393b80 RSI: ffffffff814db216 RDI: 0000000000000001
    RBP: ffff8880251257f4 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000001 R12: 000000000000045c
    R13: 000000000000105f R14: ffff8880251257f0 R15: 000000000000105d
    FS:  0000555555c24380(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000000002000f000 CR3: 0000000023151000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     ip_do_fragment+0xa1b/0x18b0 net/ipv4/ip_output.c:777
     ip_fragment.constprop.0+0x161/0x230 net/ipv4/ip_output.c:584
     ip_finish_output_gso net/ipv4/ip_output.c:286 [inline]
     __ip_finish_output net/ipv4/ip_output.c:308 [inline]
     __ip_finish_output+0x49c/0x650 net/ipv4/ip_output.c:295
     ip_finish_output+0x31/0x310 net/ipv4/ip_output.c:323
     NF_HOOK_COND include/linux/netfilter.h:303 [inline]
     ip_output+0x13b/0x2a0 net/ipv4/ip_output.c:433
     dst_output include/net/dst.h:451 [inline]
     ip_local_out+0xaf/0x1a0 net/ipv4/ip_output.c:129
     iptunnel_xmit+0x5b4/0x9b0 net/ipv4/ip_tunnel_core.c:82
     ipip6_tunnel_xmit net/ipv6/sit.c:1034 [inline]
     sit_tunnel_xmit+0xed2/0x28f0 net/ipv6/sit.c:1076
     __netdev_start_xmit include/linux/netdevice.h:4940 [inline]
     netdev_start_xmit include/linux/netdevice.h:4954 [inline]
     xmit_one net/core/dev.c:3545 [inline]
     dev_hard_start_xmit+0x13d/0x6d0 net/core/dev.c:3561
     __dev_queue_xmit+0x7c1/0x3d60 net/core/dev.c:4346
     dev_queue_xmit include/linux/netdevice.h:3134 [inline]
     packet_xmit+0x257/0x380 net/packet/af_packet.c:276
     packet_snd net/packet/af_packet.c:3087 [inline]
     packet_sendmsg+0x24ca/0x5240 net/packet/af_packet.c:3119
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg+0xd5/0x180 net/socket.c:745
     __sys_sendto+0x255/0x340 net/socket.c:2190
     __do_sys_sendto net/socket.c:2202 [inline]
     __se_sys_sendto net/socket.c:2198 [inline]
     __x64_sys_sendto+0xe0/0x1b0 net/socket.c:2198
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x40/0x110 arch/x86/entry/common.c:82
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller
    
    Fixes: 0f6925b3e8da ("virtio_net: Do not pull payload in skb->head")
    Signed-off-by: Denis Arefev <arefev@swemel.ru>
    Message-Id: <20240613095448.27118-1-arefev@swemel.ru>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mvpp2: Don't re-use loop iterator [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Wed Jul 24 11:06:56 2024 -0500

    net: mvpp2: Don't re-use loop iterator
    
    [ Upstream commit 0aa3ca956c46d849775eae1816cef8fe4bc8b50e ]
    
    This function has a nested loop.  The problem is that both the inside
    and outside loop use the same variable as an iterator.  I found this
    via static analysis so I'm not sure the impact.  It could be that it
    loops forever or, more likely, the loop exits early.
    
    Fixes: 3a616b92a9d1 ("net: mvpp2: Add TX flow control support for jumbo frames")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/eaa8f403-7779-4d81-973d-a9ecddc0bf6f@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: netconsole: Disable target before netpoll cleanup [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Fri Jul 12 07:34:15 2024 -0700

    net: netconsole: Disable target before netpoll cleanup
    
    commit 97d9fba9a812cada5484667a46e14a4c976ca330 upstream.
    
    Currently, netconsole cleans up the netpoll structure before disabling
    the target. This approach can lead to race conditions, as message
    senders (write_ext_msg() and write_msg()) check if the target is
    enabled before using netpoll. The sender can validate that the target is
    enabled, but, the netpoll might be de-allocated already, causing
    undesired behaviours.
    
    This patch reverses the order of operations:
    1. Disable the target
    2. Clean up the netpoll structure
    
    This change eliminates the potential race condition, ensuring that
    no messages are sent through a partially cleaned-up netpoll structure.
    
    Fixes: 2382b15bcc39 ("netconsole: take care of NETDEV_UNREGISTER event")
    Cc: stable@vger.kernel.org
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240712143415.1141039-1-leitao@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: nexthop: Initialize all fields in dumped nexthops [+ + +]
Author: Petr Machata <petrm@nvidia.com>
Date:   Tue Jul 23 18:04:16 2024 +0200

    net: nexthop: Initialize all fields in dumped nexthops
    
    [ Upstream commit 6d745cd0e9720282cd291d36b9db528aea18add2 ]
    
    struct nexthop_grp contains two reserved fields that are not initialized by
    nla_put_nh_group(), and carry garbage. This can be observed e.g. with
    strace (edited for clarity):
    
        # ip nexthop add id 1 dev lo
        # ip nexthop add id 101 group 1
        # strace -e recvmsg ip nexthop get id 101
        ...
        recvmsg(... [{nla_len=12, nla_type=NHA_GROUP},
                     [{id=1, weight=0, resvd1=0x69, resvd2=0x67}]] ...) = 52
    
    The fields are reserved and therefore not currently used. But as they are, they
    leak kernel memory, and the fact they are not just zero complicates repurposing
    of the fields for new ends. Initialize the full structure.
    
    Fixes: 430a049190de ("nexthop: Add support for nexthop groups")
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: Correct byte order of perfect_match [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Tue Jul 23 14:29:27 2024 +0100

    net: stmmac: Correct byte order of perfect_match
    
    [ Upstream commit e9dbebae2e3c338122716914fe105458f41e3a4a ]
    
    The perfect_match parameter of the update_vlan_hash operation is __le16,
    and is correctly converted from host byte-order in the lone caller,
    stmmac_vlan_update().
    
    However, the implementations of this caller, dwxgmac2_update_vlan_hash()
    and dwxgmac2_update_vlan_hash(), both treat this parameter as host byte
    order, using the following pattern:
    
            u32 value = ...
            ...
            writel(value | perfect_match, ...);
    
    This is not correct because both:
    1) value is host byte order; and
    2) writel expects a host byte order value as it's first argument
    
    I believe that this will break on big endian systems. And I expect it
    has gone unnoticed by only being exercised on little endian systems.
    
    The approach taken by this patch is to update the callback, and it's
    caller to simply use a host byte order value.
    
    Flagged by Sparse.
    Compile tested only.
    
    Fixes: c7ab0b8088d7 ("net: stmmac: Fallback to VLAN Perfect filtering if HASH is not available")
    Signed-off-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: Enable mac_managed_pm phylink config [+ + +]
Author: Shenwei Wang <shenwei.wang@nxp.com>
Date:   Sat Aug 3 19:30:44 2024 +0800

    net: stmmac: Enable mac_managed_pm phylink config
    
    commit f151c147b3afcf92dedff53f5f0e965414e4fd2c upstream
    
    Enable the mac_managed_pm configuration in the phylink_config
    structure to avoid the kernel warning during system resume.
    
    Fixes: 744d23c71af3 ("net: phy: Warn about incorrect mdio_bus_phy_resume() state")
    Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
    Acked-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: qmi_wwan: fix memory leak for not ip packets [+ + +]
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Thu Aug 1 15:55:12 2024 +0200

    net: usb: qmi_wwan: fix memory leak for not ip packets
    
    [ Upstream commit 7ab107544b777c3bd7feb9fe447367d8edd5b202 ]
    
    Free the unused skb when not ip packets arrive.
    
    Fixes: c6adf77953bc ("net: usb: qmi_wwan: add qmap mux protocol support")
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Acked-by: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: sr9700: fix uninitialized variable use in sr_mdio_read [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Thu Jul 25 10:29:42 2024 +0800

    net: usb: sr9700: fix uninitialized variable use in sr_mdio_read
    
    commit 08f3a5c38087d1569e982a121aad1e6acbf145ce upstream.
    
    It could lead to error happen because the variable res is not updated if
    the call to sr_share_read_word returns an error. In this particular case
    error code was returned and res stayed uninitialized. Same issue also
    applies to sr_read_reg.
    
    This can be avoided by checking the return value of sr_share_read_word
    and sr_read_reg, and propagating the error if the read operation failed.
    
    Found by code review.
    
    Cc: stable@vger.kernel.org
    Fixes: c9b37458e956 ("USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Reviewed-by: Shigeru Yoshida <syoshida@redhat.com>
    Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: ctnetlink: use helper function to calculate expect ID [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Sat Jul 13 16:47:38 2024 +0200

    netfilter: ctnetlink: use helper function to calculate expect ID
    
    [ Upstream commit 782161895eb4ac45cf7cfa8db375bd4766cb8299 ]
    
    Delete expectation path is missing a call to the nf_expect_get_id()
    helper function to calculate the expectation ID, otherwise LSB of the
    expectation object address is leaked to userspace.
    
    Fixes: 3c79107631db ("netfilter: ctnetlink: don't use conntrack/expect object addresses as id")
    Reported-by: zdi-disclosures@trendmicro.com
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ipset: Add list flush to cancel_gc [+ + +]
Author: Alexander Maltsev <keltar.gw@gmail.com>
Date:   Wed Apr 17 18:51:41 2024 +0500

    netfilter: ipset: Add list flush to cancel_gc
    
    [ Upstream commit c1193d9bbbd379defe9be3c6de566de684de8a6f ]
    
    Flushing list in cancel_gc drops references to other lists right away,
    without waiting for RCU to destroy list. Fixes race when referenced
    ipsets can't be destroyed while referring list is scheduled for destroy.
    
    Fixes: 97f7cf1cd80e ("netfilter: ipset: fix performance regression in swap operation")
    Signed-off-by: Alexander Maltsev <keltar.gw@gmail.com>
    Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: iptables: Fix null-ptr-deref in iptable_nat_table_init(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Thu Jul 25 12:28:20 2024 -0700

    netfilter: iptables: Fix null-ptr-deref in iptable_nat_table_init().
    
    [ Upstream commit 5830aa863981d43560748aa93589c0695191d95d ]
    
    We had a report that iptables-restore sometimes triggered null-ptr-deref
    at boot time. [0]
    
    The problem is that iptable_nat_table_init() is exposed to user space
    before the kernel fully initialises netns.
    
    In the small race window, a user could call iptable_nat_table_init()
    that accesses net_generic(net, iptable_nat_net_id), which is available
    only after registering iptable_nat_net_ops.
    
    Let's call register_pernet_subsys() before xt_register_template().
    
    [0]:
    bpfilter: Loaded bpfilter_umh pid 11702
    Started bpfilter
    BUG: kernel NULL pointer dereference, address: 0000000000000013
     PF: supervisor write access in kernel mode
     PF: error_code(0x0002) - not-present page
    PGD 0 P4D 0
    PREEMPT SMP NOPTI
    CPU: 2 PID: 11879 Comm: iptables-restor Not tainted 6.1.92-99.174.amzn2023.x86_64 #1
    Hardware name: Amazon EC2 c6i.4xlarge/, BIOS 1.0 10/16/2017
    RIP: 0010:iptable_nat_table_init (net/ipv4/netfilter/iptable_nat.c:87 net/ipv4/netfilter/iptable_nat.c:121) iptable_nat
    Code: 10 4c 89 f6 48 89 ef e8 0b 19 bb ff 41 89 c4 85 c0 75 38 41 83 c7 01 49 83 c6 28 41 83 ff 04 75 dc 48 8b 44 24 08 48 8b 0c 24 <48> 89 08 4c 89 ef e8 a2 3b a2 cf 48 83 c4 10 44 89 e0 5b 5d 41 5c
    RSP: 0018:ffffbef902843cd0 EFLAGS: 00010246
    RAX: 0000000000000013 RBX: ffff9f4b052caa20 RCX: ffff9f4b20988d80
    RDX: 0000000000000000 RSI: 0000000000000064 RDI: ffffffffc04201c0
    RBP: ffff9f4b29394000 R08: ffff9f4b07f77258 R09: ffff9f4b07f77240
    R10: 0000000000000000 R11: ffff9f4b09635388 R12: 0000000000000000
    R13: ffff9f4b1a3c6c00 R14: ffff9f4b20988e20 R15: 0000000000000004
    FS:  00007f6284340000(0000) GS:ffff9f51fe280000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000013 CR3: 00000001d10a6005 CR4: 00000000007706e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? show_trace_log_lvl (arch/x86/kernel/dumpstack.c:259)
     ? show_trace_log_lvl (arch/x86/kernel/dumpstack.c:259)
     ? xt_find_table_lock (net/netfilter/x_tables.c:1259)
     ? __die_body.cold (arch/x86/kernel/dumpstack.c:478 arch/x86/kernel/dumpstack.c:420)
     ? page_fault_oops (arch/x86/mm/fault.c:727)
     ? exc_page_fault (./arch/x86/include/asm/irqflags.h:40 ./arch/x86/include/asm/irqflags.h:75 arch/x86/mm/fault.c:1470 arch/x86/mm/fault.c:1518)
     ? asm_exc_page_fault (./arch/x86/include/asm/idtentry.h:570)
     ? iptable_nat_table_init (net/ipv4/netfilter/iptable_nat.c:87 net/ipv4/netfilter/iptable_nat.c:121) iptable_nat
     xt_find_table_lock (net/netfilter/x_tables.c:1259)
     xt_request_find_table_lock (net/netfilter/x_tables.c:1287)
     get_info (net/ipv4/netfilter/ip_tables.c:965)
     ? security_capable (security/security.c:809 (discriminator 13))
     ? ns_capable (kernel/capability.c:376 kernel/capability.c:397)
     ? do_ipt_get_ctl (net/ipv4/netfilter/ip_tables.c:1656)
     ? bpfilter_send_req (net/bpfilter/bpfilter_kern.c:52) bpfilter
     nf_getsockopt (net/netfilter/nf_sockopt.c:116)
     ip_getsockopt (net/ipv4/ip_sockglue.c:1827)
     __sys_getsockopt (net/socket.c:2327)
     __x64_sys_getsockopt (net/socket.c:2342 net/socket.c:2339 net/socket.c:2339)
     do_syscall_64 (arch/x86/entry/common.c:51 arch/x86/entry/common.c:81)
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
    RIP: 0033:0x7f62844685ee
    Code: 48 8b 0d 45 28 0f 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 37 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 0a c3 66 0f 1f 84 00 00 00 00 00 48 8b 15 09
    RSP: 002b:00007ffd1f83d638 EFLAGS: 00000246 ORIG_RAX: 0000000000000037
    RAX: ffffffffffffffda RBX: 00007ffd1f83d680 RCX: 00007f62844685ee
    RDX: 0000000000000040 RSI: 0000000000000000 RDI: 0000000000000004
    RBP: 0000000000000004 R08: 00007ffd1f83d670 R09: 0000558798ffa2a0
    R10: 00007ffd1f83d680 R11: 0000000000000246 R12: 00007ffd1f83e3b2
    R13: 00007f628455baa0 R14: 00007ffd1f83d7b0 R15: 00007f628457a008
     </TASK>
    Modules linked in: iptable_nat(+) bpfilter rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache veth xt_state xt_connmark xt_nat xt_statistic xt_MASQUERADE xt_mark xt_addrtype ipt_REJECT nf_reject_ipv4 nft_chain_nat nf_nat xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 xt_comment nft_compat nf_tables nfnetlink overlay nls_ascii nls_cp437 vfat fat ghash_clmulni_intel aesni_intel ena crypto_simd ptp cryptd i8042 pps_core serio button sunrpc sch_fq_codel configfs loop dm_mod fuse dax dmi_sysfs crc32_pclmul crc32c_intel efivarfs
    CR2: 0000000000000013
    
    Fixes: fdacd57c79b7 ("netfilter: x_tables: never register tables by default")
    Reported-by: Takahiro Kawahara <takawaha@amazon.co.jp>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: iptables: Fix potential null-ptr-deref in ip6table_nat_table_init(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Thu Jul 25 12:28:21 2024 -0700

    netfilter: iptables: Fix potential null-ptr-deref in ip6table_nat_table_init().
    
    [ Upstream commit c22921df777de5606f1047b1345b8d22ef1c0b34 ]
    
    ip6table_nat_table_init() accesses net->gen->ptr[ip6table_nat_net_ops.id],
    but the function is exposed to user space before the entry is allocated
    via register_pernet_subsys().
    
    Let's call register_pernet_subsys() before xt_register_template().
    
    Fixes: fdacd57c79b7 ("netfilter: x_tables: never register tables by default")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_set_pipapo: fix initial map fill [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Mon Jul 15 13:54:03 2024 +0200

    netfilter: nf_set_pipapo: fix initial map fill
    
    [ Upstream commit 791a615b7ad2258c560f91852be54b0480837c93 ]
    
    The initial buffer has to be inited to all-ones, but it must restrict
    it to the size of the first field, not the total field size.
    
    After each round in the map search step, the result and the fill map
    are swapped, so if we have a set where f->bsize of the first element
    is smaller than m->bsize_max, those one-bits are leaked into future
    rounds result map.
    
    This makes pipapo find an incorrect matching results for sets where
    first field size is not the largest.
    
    Followup patch adds a test case to nft_concat_range.sh selftest script.
    
    Thanks to Stefano Brivio for pointing out that we need to zero out
    the remainder explicitly, only correcting memset() argument isn't enough.
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Reported-by: Yi Chen <yiche@redhat.com>
    Cc: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: allow clone callbacks to sleep [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Mon Aug 12 12:24:45 2024 +0200

    netfilter: nf_tables: allow clone callbacks to sleep
    
    commit fa23e0d4b756d25829e124d6b670a4c6bbd4bf7e upstream.
    
    Sven Auhagen reports transaction failures with following error:
      ./main.nft:13:1-26: Error: Could not process rule: Cannot allocate memory
      percpu: allocation failed, size=16 align=8 atomic=1, atomic alloc failed, no space left
    
    This points to failing pcpu allocation with GFP_ATOMIC flag.
    However, transactions happen from user context and are allowed to sleep.
    
    One case where we can call into percpu allocator with GFP_ATOMIC is
    nft_counter expression.
    
    Normally this happens from control plane, so this could use GFP_KERNEL
    instead.  But one use case, element insertion from packet path,
    needs to use GFP_ATOMIC allocations (nft_dynset expression).
    
    At this time, .clone callbacks always use GFP_ATOMIC for this reason.
    
    Add gfp_t argument to the .clone function and pass GFP_KERNEL or
    GFP_ATOMIC flag depending on context, this allows all clone memory
    allocations to sleep for the normal (transaction) case.
    
    Cc: Sven Auhagen <sven.auhagen@voleatech.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: bail out if stateful expression provides no .clone [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon Aug 12 12:24:44 2024 +0200

    netfilter: nf_tables: bail out if stateful expression provides no .clone
    
    commit 3c13725f43dcf43ad8a9bcd6a9f12add19a8f93e upstream.
    
    All existing NFT_EXPR_STATEFUL provide a .clone interface, remove
    fallback to copy content of stateful expression since this is never
    exercised and bail out if .clone interface is not defined.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: prefer nft_chain_validate [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Mon Aug 12 12:24:46 2024 +0200

    netfilter: nf_tables: prefer nft_chain_validate
    
    commit cff3bd012a9512ac5ed858d38e6ed65f6391008c upstream.
    
    nft_chain_validate already performs loop detection because a cycle will
    result in a call stack overflow (ctx->level >= NFT_JUMP_STACK_SIZE).
    
    It also follows maps via ->validate callback in nft_lookup, so there
    appears no reason to iterate the maps again.
    
    nf_tables_check_loops() and all its helper functions can be removed.
    This improves ruleset load time significantly, from 23s down to 12s.
    
    This also fixes a crash bug. Old loop detection code can result in
    unbounded recursion:
    
    BUG: TASK stack guard page was hit at ....
    Oops: stack guard page: 0000 [#1] PREEMPT SMP KASAN
    CPU: 4 PID: 1539 Comm: nft Not tainted 6.10.0-rc5+ #1
    [..]
    
    with a suitable ruleset during validation of register stores.
    
    I can't see any actual reason to attempt to check for this from
    nft_validate_register_store(), at this point the transaction is still in
    progress, so we don't have a full picture of the rule graph.
    
    For nf-next it might make sense to either remove it or make this depend
    on table->validate_state in case we could catch an error earlier
    (for improved error reporting to userspace).
    
    Fixes: 20a69341f2d0 ("netfilter: nf_tables: add netlink set API")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: rise cap on SELinux secmark context [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon Jun 3 20:16:59 2024 +0200

    netfilter: nf_tables: rise cap on SELinux secmark context
    
    [ Upstream commit e29630247be24c3987e2b048f8e152771b32d38b ]
    
    secmark context is artificially limited 256 bytes, rise it to 4Kbytes.
    
    Fixes: fb961945457f ("netfilter: nf_tables: add SECMARK support")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: set element extended ACK reporting support [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon Aug 12 12:24:42 2024 +0200

    netfilter: nf_tables: set element extended ACK reporting support
    
    commit b53c116642502b0c85ecef78bff4f826a7dd4145 upstream.
    
    Report the element that causes problems via netlink extended ACK for set
    element commands.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: use timestamp to check for set element timeout [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Mon Aug 12 12:24:43 2024 +0200

    netfilter: nf_tables: use timestamp to check for set element timeout
    
    commit 7395dfacfff65e9938ac0889dafa1ab01e987d15 upstream
    
    Add a timestamp field at the beginning of the transaction, store it
    in the nftables per-netns area.
    
    Update set backend .insert, .deactivate and sync gc path to use the
    timestamp, this avoids that an element expires while control plane
    transaction is still unfinished.
    
    .lookup and .update, which are used from packet path, still use the
    current time to check if the element has expired. And .get path and dump
    also since this runs lockless under rcu read size lock. Then, there is
    async gc which also needs to check the current time since it runs
    asynchronously from a workqueue.
    
    Fixes: c3e1b005ed1c ("netfilter: nf_tables: add set element timeout support")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: constify lookup fn args where possible [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Feb 13 16:23:37 2024 +0100

    netfilter: nft_set_pipapo: constify lookup fn args where possible
    
    [ Upstream commit f04df573faf90bb828a2241b650598c02c074323 ]
    
    Those get called from packet path, content must not be modified.
    No functional changes intended.
    
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: 791a615b7ad2 ("netfilter: nf_set_pipapo: fix initial map fill")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_pipapo_avx2: disable softinterrupts [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Jul 19 13:19:26 2024 +0200

    netfilter: nft_set_pipapo_avx2: disable softinterrupts
    
    [ Upstream commit a16909ae9982e931841c456061cb57fbaec9c59e ]
    
    We need to disable softinterrupts, else we get following problem:
    
    1. pipapo_avx2 called from process context; fpu usable
    2. preempt_disable() called, pcpu scratchmap in use
    3. softirq handles rx or tx, we re-enter pipapo_avx2
    4. fpu busy, fallback to generic non-avx version
    5. fallback reuses scratch map and index, which are in use
       by the preempted process
    
    Handle this same way as generic version by first disabling
    softinterrupts while the scratchmap is in use.
    
    Fixes: f0b3d338064e ("netfilter: nft_set_pipapo_avx2: Add irq_fpu_usable() check, fallback to non-AVX2 version")
    Cc: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: NFSv4.1 another fix for EXCHGID4_FLAG_USE_PNFS_DS for DS server [+ + +]
Author: Olga Kornievskaia <kolga@netapp.com>
Date:   Mon Jun 24 09:28:27 2024 -0400

    NFSv4.1 another fix for EXCHGID4_FLAG_USE_PNFS_DS for DS server
    
    [ Upstream commit 4840c00003a2275668a13b82c9f5b1aed80183aa ]
    
    Previously in order to mark the communication with the DS server,
    we tried to use NFS_CS_DS in cl_flags. However, this flag would
    only be saved for the DS server and in case where DS equals MDS,
    the client would not find a matching nfs_client in nfs_match_client
    that represents the MDS (but is also a DS).
    
    Instead, don't rely on the NFS_CS_DS but instead use NFS_CS_PNFS.
    
    Fixes: 379e4adfddd6 ("NFSv4.1: fixup use EXCHGID4_FLAG_USE_PNFS_DS for DS server")
    Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: avoid undefined behavior in nilfs_cnt32_ge macro [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Wed Jul 3 03:35:12 2024 +0900

    nilfs2: avoid undefined behavior in nilfs_cnt32_ge macro
    
    [ Upstream commit 0f3819e8c483771a59cf9d3190cd68a7a990083c ]
    
    According to the C standard 3.4.3p3, the result of signed integer overflow
    is undefined.  The macro nilfs_cnt32_ge(), which compares two sequence
    numbers, uses signed integer subtraction that can overflow, and therefore
    the result of the calculation may differ from what is expected due to
    undefined behavior in different environments.
    
    Similar to an earlier change to the jiffies-related comparison macros in
    commit 5a581b367b5d ("jiffies: Avoid undefined behavior from signed
    overflow"), avoid this potential issue by changing the definition of the
    macro to perform the subtraction as unsigned integers, then cast the
    result to a signed integer for comparison.
    
    Link: https://lkml.kernel.org/r/20130727225828.GA11864@linux.vnet.ibm.com
    Link: https://lkml.kernel.org/r/20240702183512.6390-1-konishi.ryusuke@gmail.com
    Fixes: 9ff05123e3bf ("nilfs2: segment constructor")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nilfs2: handle inconsistent state in nilfs_btnode_create_block() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Thu Jul 25 14:20:07 2024 +0900

    nilfs2: handle inconsistent state in nilfs_btnode_create_block()
    
    commit 4811f7af6090e8f5a398fbdd766f903ef6c0d787 upstream.
    
    Syzbot reported that a buffer state inconsistency was detected in
    nilfs_btnode_create_block(), triggering a kernel bug.
    
    It is not appropriate to treat this inconsistency as a bug; it can occur
    if the argument block address (the buffer index of the newly created
    block) is a virtual block number and has been reallocated due to
    corruption of the bitmap used to manage its allocation state.
    
    So, modify nilfs_btnode_create_block() and its callers to treat it as a
    possible filesystem error, rather than triggering a kernel bug.
    
    Link: https://lkml.kernel.org/r/20240725052007.4562-1-konishi.ryusuke@gmail.com
    Fixes: a60be987d45d ("nilfs2: B-tree node cache")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+89cc4f2324ed37988b60@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=89cc4f2324ed37988b60
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ntp: Clamp maxerror and esterror to operating range [+ + +]
Author: Justin Stitt <justinstitt@google.com>
Date:   Fri May 17 20:22:44 2024 +0000

    ntp: Clamp maxerror and esterror to operating range
    
    [ Upstream commit 87d571d6fb77ec342a985afa8744bb9bb75b3622 ]
    
    Using syzkaller alongside the newly reintroduced signed integer overflow
    sanitizer spits out this report:
    
    UBSAN: signed-integer-overflow in ../kernel/time/ntp.c:461:16
    9223372036854775807 + 500 cannot be represented in type 'long'
    Call Trace:
     handle_overflow+0x171/0x1b0
     second_overflow+0x2d6/0x500
     accumulate_nsecs_to_secs+0x60/0x160
     timekeeping_advance+0x1fe/0x890
     update_wall_time+0x10/0x30
    
    time_maxerror is unconditionally incremented and the result is checked
    against NTP_PHASE_LIMIT, but the increment itself can overflow, resulting
    in wrap-around to negative space.
    
    Before commit eea83d896e31 ("ntp: NTP4 user space bits update") the user
    supplied value was sanity checked to be in the operating range. That change
    removed the sanity check and relied on clamping in handle_overflow() which
    does not work correctly when the user supplied value is in the overflow
    zone of the '+ 500' operation.
    
    The operation requires CAP_SYS_TIME and the side effect of the overflow is
    NTP getting out of sync.
    
    Miroslav confirmed that the input value should be clamped to the operating
    range and the same applies to time_esterror. The latter is not used by the
    kernel, but the value still should be in the operating range as it was
    before the sanity check got removed.
    
    Clamp them to the operating range.
    
    [ tglx: Changed it to clamping and included time_esterror ]
    
    Fixes: eea83d896e31 ("ntp: NTP4 user space bits update")
    Signed-off-by: Justin Stitt <justinstitt@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Miroslav Lichvar <mlichvar@redhat.com>
    Link: https://lore.kernel.org/all/20240517-b4-sio-ntp-usec-v2-1-d539180f2b79@google.com
    Closes: https://github.com/KSPP/linux/issues/354
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ntp: Safeguard against time_constant overflow [+ + +]
Author: Justin Stitt <justinstitt@google.com>
Date:   Fri May 17 00:47:10 2024 +0000

    ntp: Safeguard against time_constant overflow
    
    commit 06c03c8edce333b9ad9c6b207d93d3a5ae7c10c0 upstream.
    
    Using syzkaller with the recently reintroduced signed integer overflow
    sanitizer produces this UBSAN report:
    
    UBSAN: signed-integer-overflow in ../kernel/time/ntp.c:738:18
    9223372036854775806 + 4 cannot be represented in type 'long'
    Call Trace:
     handle_overflow+0x171/0x1b0
     __do_adjtimex+0x1236/0x1440
     do_adjtimex+0x2be/0x740
    
    The user supplied time_constant value is incremented by four and then
    clamped to the operating range.
    
    Before commit eea83d896e31 ("ntp: NTP4 user space bits update") the user
    supplied value was sanity checked to be in the operating range. That change
    removed the sanity check and relied on clamping after incrementing which
    does not work correctly when the user supplied value is in the overflow
    zone of the '+ 4' operation.
    
    The operation requires CAP_SYS_TIME and the side effect of the overflow is
    NTP getting out of sync.
    
    Similar to the fixups for time_maxerror and time_esterror, clamp the user
    space supplied value to the operating range.
    
    [ tglx: Switch to clamping ]
    
    Fixes: eea83d896e31 ("ntp: NTP4 user space bits update")
    Signed-off-by: Justin Stitt <justinstitt@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Miroslav Lichvar <mlichvar@redhat.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20240517-b4-sio-ntp-c-v2-1-f3a80096f36f@google.com
    Closes: https://github.com/KSPP/linux/issues/352
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-pci: add missing condition check for existence of mapped data [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Wed Jul 24 13:31:14 2024 +0300

    nvme-pci: add missing condition check for existence of mapped data
    
    [ Upstream commit c31fad1470389666ac7169fe43aa65bf5b7e2cfd ]
    
    nvme_map_data() is called when request has physical segments, hence
    the nvme_unmap_data() should have same condition to avoid dereference.
    
    Fixes: 4aedb705437f ("nvme-pci: split metadata handling from nvme_map_data / nvme_unmap_data")
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme/pci: Add APST quirk for Lenovo N60z laptop [+ + +]
Author: WangYuli <wangyuli@uniontech.com>
Date:   Mon Jul 15 17:31:44 2024 +0800

    nvme/pci: Add APST quirk for Lenovo N60z laptop
    
    commit ab091ec536cb7b271983c0c063b17f62f3591583 upstream.
    
    There is a hardware power-saving problem with the Lenovo N60z
    board. When turn it on and leave it for 10 hours, there is a
    20% chance that a nvme disk will not wake up until reboot.
    
    Link: https://lore.kernel.org/all/2B5581C46AC6E335+9c7a81f1-05fb-4fd0-9fbb-108757c21628@uniontech.com
    Signed-off-by: hmy <huanglin@uniontech.com>
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: WangYuli <wangyuli@uniontech.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme: separate command prep and issue [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Fri Oct 29 14:34:11 2021 -0600

    nvme: separate command prep and issue
    
    [ Upstream commit 62451a2b2e7ea17c4a547ada6a5deebf8787a27a ]
    
    Add a nvme_prep_rq() helper to setup a command, and nvme_queue_rq() is
    adapted to use this helper.
    
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: c31fad147038 ("nvme-pci: add missing condition check for existence of mapped data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nvme: split command copy into a helper [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Fri Oct 29 14:32:44 2021 -0600

    nvme: split command copy into a helper
    
    [ Upstream commit 3233b94cf842984ea7e208d5be1ad2f2af02d495 ]
    
    We'll need it for batched submit as well. Since we now have a copy
    helper, get rid of the nvme_submit_cmd() wrapper.
    
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: c31fad147038 ("nvme-pci: add missing condition check for existence of mapped data")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
padata: Fix possible divide-by-0 panic in padata_mt_helper() [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Tue Aug 6 13:46:47 2024 -0400

    padata: Fix possible divide-by-0 panic in padata_mt_helper()
    
    commit 6d45e1c948a8b7ed6ceddb14319af69424db730c upstream.
    
    We are hit with a not easily reproducible divide-by-0 panic in padata.c at
    bootup time.
    
      [   10.017908] Oops: divide error: 0000 1 PREEMPT SMP NOPTI
      [   10.017908] CPU: 26 PID: 2627 Comm: kworker/u1666:1 Not tainted 6.10.0-15.el10.x86_64 #1
      [   10.017908] Hardware name: Lenovo ThinkSystem SR950 [7X12CTO1WW]/[7X12CTO1WW], BIOS [PSE140J-2.30] 07/20/2021
      [   10.017908] Workqueue: events_unbound padata_mt_helper
      [   10.017908] RIP: 0010:padata_mt_helper+0x39/0xb0
        :
      [   10.017963] Call Trace:
      [   10.017968]  <TASK>
      [   10.018004]  ? padata_mt_helper+0x39/0xb0
      [   10.018084]  process_one_work+0x174/0x330
      [   10.018093]  worker_thread+0x266/0x3a0
      [   10.018111]  kthread+0xcf/0x100
      [   10.018124]  ret_from_fork+0x31/0x50
      [   10.018138]  ret_from_fork_asm+0x1a/0x30
      [   10.018147]  </TASK>
    
    Looking at the padata_mt_helper() function, the only way a divide-by-0
    panic can happen is when ps->chunk_size is 0.  The way that chunk_size is
    initialized in padata_do_multithreaded(), chunk_size can be 0 when the
    min_chunk in the passed-in padata_mt_job structure is 0.
    
    Fix this divide-by-0 panic by making sure that chunk_size will be at least
    1 no matter what the input parameters are.
    
    Link: https://lkml.kernel.org/r/20240806174647.1050398-1-longman@redhat.com
    Fixes: 004ed42638f4 ("padata: add basic support for multithreaded jobs")
    Signed-off-by: Waiman Long <longman@redhat.com>
    Cc: Daniel Jordan <daniel.m.jordan@oracle.com>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: Waiman Long <longman@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI/DPC: Fix use-after-free on concurrent DPC and hot-removal [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Tue Jul 30 12:58:55 2024 +0200

    PCI/DPC: Fix use-after-free on concurrent DPC and hot-removal
    
    commit 11a1f4bc47362700fcbde717292158873fb847ed upstream.
    
    Keith reports a use-after-free when a DPC event occurs concurrently to
    hot-removal of the same portion of the hierarchy:
    
    The dpc_handler() awaits readiness of the secondary bus below the
    Downstream Port where the DPC event occurred.  To do so, it polls the
    config space of the first child device on the secondary bus.  If that
    child device is concurrently removed, accesses to its struct pci_dev
    cause the kernel to oops.
    
    That's because pci_bridge_wait_for_secondary_bus() neglects to hold a
    reference on the child device.  Before v6.3, the function was only
    called on resume from system sleep or on runtime resume.  Holding a
    reference wasn't necessary back then because the pciehp IRQ thread
    could never run concurrently.  (On resume from system sleep, IRQs are
    not enabled until after the resume_noirq phase.  And runtime resume is
    always awaited before a PCI device is removed.)
    
    However starting with v6.3, pci_bridge_wait_for_secondary_bus() is also
    called on a DPC event.  Commit 53b54ad074de ("PCI/DPC: Await readiness
    of secondary bus after reset"), which introduced that, failed to
    appreciate that pci_bridge_wait_for_secondary_bus() now needs to hold a
    reference on the child device because dpc_handler() and pciehp may
    indeed run concurrently.  The commit was backported to v5.10+ stable
    kernels, so that's the oldest one affected.
    
    Add the missing reference acquisition.
    
    Abridged stack trace:
    
      BUG: unable to handle page fault for address: 00000000091400c0
      CPU: 15 PID: 2464 Comm: irq/53-pcie-dpc 6.9.0
      RIP: pci_bus_read_config_dword+0x17/0x50
      pci_dev_wait()
      pci_bridge_wait_for_secondary_bus()
      dpc_reset_link()
      pcie_do_recovery()
      dpc_handler()
    
    Fixes: 53b54ad074de ("PCI/DPC: Await readiness of secondary bus after reset")
    Closes: https://lore.kernel.org/r/20240612181625.3604512-3-kbusch@meta.com/
    Link: https://lore.kernel.org/linux-pci/8e4bcd4116fd94f592f2bf2749f168099c480ddf.1718707743.git.lukas@wunner.de
    Reported-by: Keith Busch <kbusch@kernel.org>
    Tested-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Reviewed-by: Keith Busch <kbusch@kernel.org>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Cc: stable@vger.kernel.org # v5.10+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: Add Edimax Vendor ID to pci_ids.h [+ + +]
Author: FUJITA Tomonori <fujita.tomonori@gmail.com>
Date:   Mon Jun 24 08:55:01 2024 +0900

    PCI: Add Edimax Vendor ID to pci_ids.h
    
    [ Upstream commit eee5528890d54b22b46f833002355a5ee94c3bb4 ]
    
    Add the Edimax Vendor ID (0x1432) for an ethernet driver for Tehuti
    Networks TN40xx chips. This ID can be used for Realtek 8180 and Ralink
    rt28xx wireless drivers.
    
    Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
    Acked-by: Bjorn Helgaas <bhelgaas@google.com>
    Link: https://patch.msgid.link/20240623235507.108147-2-fujita.tomonori@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: dw-rockchip: Fix initial PERST# GPIO value [+ + +]
Author: Niklas Cassel <cassel@kernel.org>
Date:   Wed Apr 17 18:42:26 2024 +0200

    PCI: dw-rockchip: Fix initial PERST# GPIO value
    
    commit 28b8d7793b8573563b3d45321376f36168d77b1e upstream.
    
    PERST# is active low according to the PCIe specification.
    
    However, the existing pcie-dw-rockchip.c driver does:
    
      gpiod_set_value(..., 0); msleep(100); gpiod_set_value(..., 1);
    
    when asserting + deasserting PERST#.
    
    This is of course wrong, but because all the device trees for this
    compatible string have also incorrectly marked this GPIO as ACTIVE_HIGH:
    
      $ git grep -B 10 reset-gpios arch/arm64/boot/dts/rockchip/rk3568*
      $ git grep -B 10 reset-gpios arch/arm64/boot/dts/rockchip/rk3588*
    
    The actual toggling of PERST# is correct, and we cannot change it anyway,
    since that would break device tree compatibility.
    
    However, this driver does request the GPIO to be initialized as
    GPIOD_OUT_HIGH, which does cause a silly sequence where PERST# gets
    toggled back and forth for no good reason.
    
    Fix this by requesting the GPIO to be initialized as GPIOD_OUT_LOW (which
    for this driver means PERST# asserted).
    
    This will avoid an unnecessary signal change where PERST# gets deasserted
    (by devm_gpiod_get_optional()) and then gets asserted (by
    rockchip_pcie_start_link()) just a few instructions later.
    
    Before patch, debug prints on EP side, when booting RC:
    
      [  845.606810] pci: PERST# asserted by host!
      [  852.483985] pci: PERST# de-asserted by host!
      [  852.503041] pci: PERST# asserted by host!
      [  852.610318] pci: PERST# de-asserted by host!
    
    After patch, debug prints on EP side, when booting RC:
    
      [  125.107921] pci: PERST# asserted by host!
      [  132.111429] pci: PERST# de-asserted by host!
    
    This extra, very short, PERST# assertion + deassertion has been reported to
    cause issues with certain WLAN controllers, e.g. RTL8822CE.
    
    Fixes: 0e898eb8df4e ("PCI: rockchip-dwc: Add Rockchip RK356X host controller driver")
    Link: https://lore.kernel.org/linux-pci/20240417164227.398901-1-cassel@kernel.org
    Tested-by: Heiko Stuebner <heiko@sntech.de>
    Tested-by: Jianfeng Liu <liujianfeng1994@gmail.com>
    Signed-off-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Cc: stable@vger.kernel.org      # v5.15+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: dwc: Restore MSI Receiver mask during resume [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Sat Aug 3 19:28:52 2024 +0800

    PCI: dwc: Restore MSI Receiver mask during resume
    
    commit 815953dc2011ad7a34de355dfa703dcef1085219 upstream
    
    If a host that uses the IP's integrated MSI Receiver lost power
    during suspend, we call dw_pcie_setup_rc() to reinit the RC. But
    dw_pcie_setup_rc() always sets pp->irq_mask[ctrl] to ~0, so the mask
    register is always set as 0xffffffff incorrectly, thus the MSI can't
    work after resume.
    
    Fix this issue by moving pp->irq_mask[ctrl] initialization to
    dw_pcie_host_init() so we can correctly set the mask reg during both
    boot and resume.
    
    Tested-by: Richard Zhu <hongxing.zhu@nxp.com>
    Link: https://lore.kernel.org/r/20211226074019.2556-1-jszhang@kernel.org
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: endpoint: Clean up error handling in vpci_scan_bus() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Jun 10 12:33:39 2024 +0300

    PCI: endpoint: Clean up error handling in vpci_scan_bus()
    
    [ Upstream commit 8e0f5a96c534f781e8c57ca30459448b3bfe5429 ]
    
    Smatch complains about inconsistent NULL checking in vpci_scan_bus():
    
        drivers/pci/endpoint/functions/pci-epf-vntb.c:1024 vpci_scan_bus() error: we previously assumed 'vpci_bus' could be null (see line 1021)
    
    Instead of printing an error message and then crashing we should return
    an error code and clean up.
    
    Also the NULL check is reversed so it prints an error for success
    instead of failure.
    
    Fixes: e35f56bb0330 ("PCI: endpoint: Support NTB transfer between RC and EP")
    Link: https://lore.kernel.org/linux-pci/68e0f6a4-fd57-45d0-945b-0876f2c8cb86@moroto.mountain
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Fix resource double counting on remove & rescan [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Tue May 7 13:25:16 2024 +0300

    PCI: Fix resource double counting on remove & rescan
    
    [ Upstream commit 903534fa7d30214d8ba840ab1cd9e917e0c88e41 ]
    
    pbus_size_mem() keeps the size of the optional resources in
    children_add_size. When calculating the PCI bridge window size,
    calculate_memsize() lower bounds size by old_size before adding
    children_add_size and performing the window size alignment. This
    results in double counting for the resources in children_add_size
    because old_size may be based on the previous size of the bridge
    window after it has already included children_add_size (that is,
    size1 in pbus_size_mem() from an earlier invocation of that
    function).
    
    As a result, on repeated remove of the bus & rescan cycles the resource
    size keeps increasing when children_add_size is non-zero as can be seen
    from this extract:
    
      iomem0:  23fffd00000-23fffdfffff : PCI Bus 0000:03    # 1MiB
      iomem1:  20000000000-200001fffff : PCI Bus 0000:03    # 2MiB
      iomem2:  20000000000-200002fffff : PCI Bus 0000:03    # 3MiB
      iomem3:  20000000000-200003fffff : PCI Bus 0000:03    # 4MiB
      iomem4:  20000000000-200004fffff : PCI Bus 0000:03    # 5MiB
    
    Solve the double counting by moving old_size check later in
    calculate_memsize() so that children_add_size is already accounted for.
    
    After the patch, the bridge window retains its size as expected:
    
      iomem0:  23fffd00000-23fffdfffff : PCI Bus 0000:03    # 1MiB
      iomem1:  20000000000-200000fffff : PCI Bus 0000:03    # 1MiB
      iomem2:  20000000000-200000fffff : PCI Bus 0000:03    # 1MiB
    
    Fixes: a4ac9fea016f ("PCI : Calculate right add_size")
    Link: https://lore.kernel.org/r/20240507102523.57320-2-ilpo.jarvinen@linux.intel.com
    Tested-by: Lidong Wang <lidong.wang@intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: hv: Return zero, not garbage, when reading PCI_INTERRUPT_PIN [+ + +]
Author: Wei Liu <wei.liu@kernel.org>
Date:   Mon Jul 1 20:26:05 2024 +0000

    PCI: hv: Return zero, not garbage, when reading PCI_INTERRUPT_PIN
    
    commit fea93a3e5d5e6a09eb153866d2ce60ea3287a70d upstream.
    
    The intent of the code snippet is to always return 0 for both
    PCI_INTERRUPT_LINE and PCI_INTERRUPT_PIN.
    
    The check misses PCI_INTERRUPT_PIN. This patch fixes that.
    
    This is discovered by this call in VFIO:
    
        pci_read_config_byte(vdev->pdev, PCI_INTERRUPT_PIN, &pin);
    
    The old code does not set *val to 0 because it misses the check for
    PCI_INTERRUPT_PIN. Garbage is returned in that case.
    
    Fixes: 4daace0d8ce8 ("PCI: hv: Add paravirtual PCI front-end for Microsoft Hyper-V VMs")
    Link: https://lore.kernel.org/linux-pci/20240701202606.129606-1-wei.liu@kernel.org
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Reviewed-by: Michael Kelley <mhklinux@outlook.com>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: rockchip: Use GPIOD_OUT_LOW flag while requesting ep_gpio [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Date:   Tue Apr 16 11:12:35 2024 +0530

    PCI: rockchip: Use GPIOD_OUT_LOW flag while requesting ep_gpio
    
    commit 840b7a5edf88fe678c60dee88a135647c0ea4375 upstream.
    
    Rockchip platforms use 'GPIO_ACTIVE_HIGH' flag in the devicetree definition
    for ep_gpio. This means, whatever the logical value set by the driver for
    the ep_gpio, physical line will output the same logic level.
    
    For instance,
    
      gpiod_set_value_cansleep(rockchip->ep_gpio, 0); --> Level low
      gpiod_set_value_cansleep(rockchip->ep_gpio, 1); --> Level high
    
    But while requesting the ep_gpio, GPIOD_OUT_HIGH flag is currently used.
    Now, this also causes the physical line to output 'high' creating trouble
    for endpoint devices during host reboot.
    
    When host reboot happens, the ep_gpio will initially output 'low' due to
    the GPIO getting reset to its POR value. Then during host controller probe,
    it will output 'high' due to GPIOD_OUT_HIGH flag. Then during
    rockchip_pcie_host_init_port(), it will first output 'low' and then 'high'
    indicating the completion of controller initialization.
    
    On the endpoint side, each output 'low' of ep_gpio is accounted for PERST#
    assert and 'high' for PERST# deassert. With the above mentioned flow during
    host reboot, endpoint will witness below state changes for PERST#:
    
      (1) PERST# assert - GPIO POR state
      (2) PERST# deassert - GPIOD_OUT_HIGH while requesting GPIO
      (3) PERST# assert - rockchip_pcie_host_init_port()
      (4) PERST# deassert - rockchip_pcie_host_init_port()
    
    Now the time interval between (2) and (3) is very short as both happen
    during the driver probe(), and this results in a race in the endpoint.
    Because, before completing the PERST# deassertion in (2), endpoint got
    another PERST# assert in (3).
    
    A proper way to fix this issue is to change the GPIOD_OUT_HIGH flag in (2)
    to GPIOD_OUT_LOW. Because the usual convention is to request the GPIO with
    a state corresponding to its 'initial/default' value and let the driver
    change the state of the GPIO when required.
    
    As per that, the ep_gpio should be requested with GPIOD_OUT_LOW as it
    corresponds to the POR value of '0' (PERST# assert in the endpoint). Then
    the driver can change the state of the ep_gpio later in
    rockchip_pcie_host_init_port() as per the initialization sequence.
    
    This fixes the firmware crash issue in Qcom based modems connected to
    Rockpro64 based board.
    
    Fixes: e77f847df54c ("PCI: rockchip: Add Rockchip PCIe controller support")
    Closes: https://lore.kernel.org/mhi/20240402045647.GG2933@thinkpad/
    Link: https://lore.kernel.org/linux-pci/20240416-pci-rockchip-perst-fix-v1-1-4800b1d4d954@linaro.org
    Reported-by: Slark Xiao <slark_xiao@163.com>
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Niklas Cassel <cassel@kernel.org>
    Cc: stable@vger.kernel.org      # v4.9
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf intel-pt: Fix aux_watermark calculation for 64-bit size [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Tue Jun 25 13:45:31 2024 +0300

    perf intel-pt: Fix aux_watermark calculation for 64-bit size
    
    [ Upstream commit 36b4cd990a8fd3f5b748883050e9d8c69fe6398d ]
    
    aux_watermark is a u32. For a 64-bit size, cap the aux_watermark
    calculation at UINT_MAX instead of truncating it to 32-bits.
    
    Fixes: 874fc35cdd55 ("perf intel-pt: Use aux_watermark")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20240625104532.11990-2-adrian.hunter@intel.com
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf intel-pt: Fix exclude_guest setting [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Tue Jun 25 13:45:32 2024 +0300

    perf intel-pt: Fix exclude_guest setting
    
    [ Upstream commit b40934ae32232140e85dc7dc1c3ea0e296986723 ]
    
    In the past, the exclude_guest setting has had no effect on Intel PT
    tracing, but that may not be the case in the future.
    
    Set the flag correctly based upon whether KVM is using Intel PT
    "Host/Guest" mode, which is determined by the kvm_intel module
    parameter pt_mode:
    
     pt_mode=0      System-wide mode : host and guest output to host buffer
     pt_mode=1      Host/Guest mode : host/guest output to host/guest
                    buffers respectively
    
    Fixes: 6e86bfdc4a60 ("perf intel-pt: Support decoding of guest kernel")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20240625104532.11990-3-adrian.hunter@intel.com
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf report: Fix condition in sort__sym_cmp() [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Fri Jun 21 10:05:25 2024 -0700

    perf report: Fix condition in sort__sym_cmp()
    
    [ Upstream commit cb39d05e67dc24985ff9f5150e71040fa4d60ab8 ]
    
    It's expected that both hist entries are in the same hists when
    comparing two.  But the current code in the function checks one without
    dso sort key and other with the key.  This would make the condition true
    in any case.
    
    I guess the intention of the original commit was to add '!' for the
    right side too.  But as it should be the same, let's just remove it.
    
    Fixes: 69849fc5d2119 ("perf hists: Move sort__has_dso into struct perf_hpp_list")
    Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Link: https://lore.kernel.org/r/20240621170528.608772-2-namhyung@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/x86/intel/pt: Fix a topa_entry base address calculation [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Jun 24 23:10:56 2024 +0300

    perf/x86/intel/pt: Fix a topa_entry base address calculation
    
    commit ad97196379d0b8cb24ef3d5006978a6554e6467f upstream.
    
    topa_entry->base is a bit-field. Bit-fields are not promoted to a 64-bit
    type, even if the underlying type is 64-bit, and so, if necessary, must
    be cast to a larger type when calculations are done.
    
    Fix a topa_entry->base address calculation by adding a cast.
    
    Without the cast, the address was limited to 36-bits i.e. 64GiB.
    
    The address calculation is used on systems that do not support Multiple
    Entry ToPA (only Broadwell), and affects physical addresses on or above
    64GiB. Instead of writing to the correct address, the address comprising
    the first 36 bits would be written to.
    
    Intel PT snapshot and sampling modes are not affected.
    
    Fixes: 52ca9ced3f70 ("perf/x86/intel/pt: Add Intel PT PMU driver")
    Reported-by: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240624201101.60186-3-adrian.hunter@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

perf/x86/intel/pt: Fix pt_topa_entry_for_page() address calculation [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Jun 24 23:10:57 2024 +0300

    perf/x86/intel/pt: Fix pt_topa_entry_for_page() address calculation
    
    [ Upstream commit 3520b251dcae2b4a27b95cd6f745c54fd658bda5 ]
    
    Currently, perf allocates an array of page pointers which is limited in
    size by MAX_PAGE_ORDER. That in turn limits the maximum Intel PT buffer
    size to 2GiB. Should that limitation be lifted, the Intel PT driver can
    support larger sizes, except for one calculation in
    pt_topa_entry_for_page(), which is limited to 32-bits.
    
    Fix pt_topa_entry_for_page() address calculation by adding a cast.
    
    Fixes: 39152ee51b77 ("perf/x86/intel/pt: Get rid of reverse lookup table for ToPA")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240624201101.60186-4-adrian.hunter@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf/x86/intel/pt: Fix topa_entry base length [+ + +]
Author: Marco Cavenati <cavenati.marco@gmail.com>
Date:   Mon Jun 24 23:10:55 2024 +0300

    perf/x86/intel/pt: Fix topa_entry base length
    
    commit 5638bd722a44bbe97c1a7b3fae5b9efddb3e70ff upstream.
    
    topa_entry->base needs to store a pfn.  It obviously needs to be
    large enough to store the largest possible x86 pfn which is
    MAXPHYADDR-PAGE_SIZE (52-12).  So it is 4 bits too small.
    
    Increase the size of topa_entry->base from 36 bits to 40 bits.
    
    Note, systems where physical addresses can be 256TiB or more are affected.
    
    [ Adrian: Amend commit message as suggested by Dave Hansen ]
    
    Fixes: 52ca9ced3f70 ("perf/x86/intel/pt: Add Intel PT PMU driver")
    Signed-off-by: Marco Cavenati <cavenati.marco@gmail.com>
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240624201101.60186-2-adrian.hunter@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf/x86/intel/uncore: Fix the bits of the CHA extended umask for SPR [+ + +]
Author: Kan Liang <kan.liang@linux.intel.com>
Date:   Mon Jul 8 11:55:24 2024 -0700

    perf/x86/intel/uncore: Fix the bits of the CHA extended umask for SPR
    
    commit a5a6ff3d639d088d4af7e2935e1ee0d8b4e817d4 upstream.
    
    The perf stat errors out with UNC_CHA_TOR_INSERTS.IA_HIT_CXL_ACC_LOCAL
    event.
    
     $perf stat -e uncore_cha_55/event=0x35,umask=0x10c0008101/ -a -- ls
        event syntax error: '..0x35,umask=0x10c0008101/'
                                          \___ Bad event or PMU
    
    The definition of the CHA umask is config:8-15,32-55, which is 32bit.
    However, the umask of the event is bigger than 32bit.
    This is an error in the original uncore spec.
    
    Add a new umask_ext5 for the new CHA umask range.
    
    Fixes: 949b11381f81 ("perf/x86/intel/uncore: Add Sapphire Rapids server CHA support")
    Closes: https://lore.kernel.org/linux-perf-users/alpine.LRH.2.20.2401300733310.11354@Diego/
    Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Ian Rogers <irogers@google.com>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20240708185524.1185505-1-kan.liang@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf: Fix default aux_watermark calculation [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Jun 24 23:11:00 2024 +0300

    perf: Fix default aux_watermark calculation
    
    [ Upstream commit 43deb76b19663a96ec2189d8f4eb9a9dc2d7623f ]
    
    The default aux_watermark is half the AUX area buffer size. In general,
    on a 64-bit architecture, the AUX area buffer size could be a bigger than
    fits in a 32-bit type, but the calculation does not allow for that
    possibility.
    
    However the aux_watermark value is recorded in a u32, so should not be
    more than U32_MAX either.
    
    Fix by doing the calculation in a correctly sized type, and limiting the
    result to U32_MAX.
    
    Fixes: d68e6799a5c8 ("perf: Cap allocation order at aux_watermark")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240624201101.60186-7-adrian.hunter@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf: Fix event leak upon exec and file release [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Fri Jun 21 11:16:01 2024 +0200

    perf: Fix event leak upon exec and file release
    
    commit 3a5465418f5fd970e86a86c7f4075be262682840 upstream.
    
    The perf pending task work is never waited upon the matching event
    release. In the case of a child event, released via free_event()
    directly, this can potentially result in a leaked event, such as in the
    following scenario that doesn't even require a weak IRQ work
    implementation to trigger:
    
    schedule()
       prepare_task_switch()
    =======> <NMI>
          perf_event_overflow()
             event->pending_sigtrap = ...
             irq_work_queue(&event->pending_irq)
    <======= </NMI>
          perf_event_task_sched_out()
              event_sched_out()
                  event->pending_sigtrap = 0;
                  atomic_long_inc_not_zero(&event->refcount)
                  task_work_add(&event->pending_task)
       finish_lock_switch()
    =======> <IRQ>
       perf_pending_irq()
          //do nothing, rely on pending task work
    <======= </IRQ>
    
    begin_new_exec()
       perf_event_exit_task()
          perf_event_exit_event()
             // If is child event
             free_event()
                WARN(atomic_long_cmpxchg(&event->refcount, 1, 0) != 1)
                // event is leaked
    
    Similar scenarios can also happen with perf_event_remove_on_exec() or
    simply against concurrent perf_event_release().
    
    Fix this with synchonizing against the possibly remaining pending task
    work while freeing the event, just like is done with remaining pending
    IRQ work. This means that the pending task callback neither need nor
    should hold a reference to the event, preventing it from ever beeing
    freed.
    
    Fixes: 517e6a301f34 ("perf: Fix perf_pending_task() UaF")
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240621091601.18227-5-frederic@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

perf: Fix event leak upon exit [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Fri Jun 21 11:16:00 2024 +0200

    perf: Fix event leak upon exit
    
    commit 2fd5ad3f310de22836cdacae919dd99d758a1f1b upstream.
    
    When a task is scheduled out, pending sigtrap deliveries are deferred
    to the target task upon resume to userspace via task_work.
    
    However failures while adding an event's callback to the task_work
    engine are ignored. And since the last call for events exit happen
    after task work is eventually closed, there is a small window during
    which pending sigtrap can be queued though ignored, leaking the event
    refcount addition such as in the following scenario:
    
        TASK A
        -----
    
        do_exit()
           exit_task_work(tsk);
    
           <IRQ>
           perf_event_overflow()
              event->pending_sigtrap = pending_id;
              irq_work_queue(&event->pending_irq);
           </IRQ>
        =========> PREEMPTION: TASK A -> TASK B
           event_sched_out()
              event->pending_sigtrap = 0;
              atomic_long_inc_not_zero(&event->refcount)
              // FAILS: task work has exited
              task_work_add(&event->pending_task)
           [...]
           <IRQ WORK>
           perf_pending_irq()
              // early return: event->oncpu = -1
           </IRQ WORK>
           [...]
        =========> TASK B -> TASK A
           perf_event_exit_task(tsk)
              perf_event_exit_event()
                 free_event()
                    WARN(atomic_long_cmpxchg(&event->refcount, 1, 0) != 1)
                    // leak event due to unexpected refcount == 2
    
    As a result the event is never released while the task exits.
    
    Fix this with appropriate task_work_add()'s error handling.
    
    Fixes: 517e6a301f34 ("perf: Fix perf_pending_task() UaF")
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240621091601.18227-4-frederic@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

perf: Fix perf_aux_size() for greater-than 32-bit size [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Jun 24 23:10:58 2024 +0300

    perf: Fix perf_aux_size() for greater-than 32-bit size
    
    [ Upstream commit 3df94a5b1078dfe2b0c03f027d018800faf44c82 ]
    
    perf_buffer->aux_nr_pages uses a 32-bit type, so a cast is needed to
    calculate a 64-bit size.
    
    Fixes: 45bfb2e50471 ("perf: Add AUX area to ring buffer for raw data streams")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240624201101.60186-5-adrian.hunter@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf: Prevent passing zero nr_pages to rb_alloc_aux() [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Jun 24 23:10:59 2024 +0300

    perf: Prevent passing zero nr_pages to rb_alloc_aux()
    
    [ Upstream commit dbc48c8f41c208082cfa95e973560134489e3309 ]
    
    nr_pages is unsigned long but gets passed to rb_alloc_aux() as an int,
    and is stored as an int.
    
    Only power-of-2 values are accepted, so if nr_pages is a 64_bit value, it
    will be passed to rb_alloc_aux() as zero.
    
    That is not ideal because:
     1. the value is incorrect
     2. rb_alloc_aux() is at risk of misbehaving, although it manages to
     return -ENOMEM in that case, it is a result of passing zero to get_order()
     even though the get_order() result is documented to be undefined in that
     case.
    
    Fix by simply validating the maximum supported value in the first place.
    Use -ENOMEM error code for consistency with the current error code that
    is returned in that case.
    
    Fixes: 45bfb2e50471 ("perf: Add AUX area to ring buffer for raw data streams")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240624201101.60186-6-adrian.hunter@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
phy: cadence-torrent: Check return value on register read [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Tue Jul 2 11:20:42 2024 +0800

    phy: cadence-torrent: Check return value on register read
    
    [ Upstream commit 967969cf594ed3c1678a9918d6e9bb2d1591cbe9 ]
    
    cdns_torrent_dp_set_power_state() does not consider that ret might be
    overwritten. Add return value check of regmap_read_poll_timeout() after
    register read in cdns_torrent_dp_set_power_state().
    
    Fixes: 5b16a790f18d ("phy: cadence-torrent: Reorder few functions to remove function declarations")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Reviewed-by: Roger Quadros <rogerq@kernel.org>
    Link: https://lore.kernel.org/r/20240702032042.3993031-1-make24@iscas.ac.cn
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: core: fix possible memory leak when pinctrl_enable() fails [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Jun 6 10:37:02 2024 +0800

    pinctrl: core: fix possible memory leak when pinctrl_enable() fails
    
    [ Upstream commit ae1cf4759972c5fe665ee4c5e0c29de66fe3cf4a ]
    
    In devm_pinctrl_register(), if pinctrl_enable() fails in pinctrl_register(),
    the "pctldev" has not been added to dev resources, so devm_pinctrl_dev_release()
    can not be called, it leads memory leak.
    
    Introduce pinctrl_uninit_controller(), call it in the error path to free memory.
    
    Fixes: 5038a66dad01 ("pinctrl: core: delete incorrect free in pinctrl_enable()")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/20240606023704.3931561-2-yangyingliang@huawei.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: freescale: mxs: Fix refcount of child [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Sat May 4 21:20:16 2024 +0800

    pinctrl: freescale: mxs: Fix refcount of child
    
    [ Upstream commit 7f500f2011c0bbb6e1cacab74b4c99222e60248e ]
    
    of_get_next_child() will increase refcount of the returned node, need
    use of_node_put() on it when done.
    
    Per current implementation, 'child' will be override by
    for_each_child_of_node(np, child), so use of_get_child_count to avoid
    refcount leakage.
    
    Fixes: 17723111e64f ("pinctrl: add pinctrl-mxs support")
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Link: https://lore.kernel.org/20240504-pinctrl-cleanup-v2-18-26c5f2dc1181@nxp.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: rockchip: update rk3308 iomux routes [+ + +]
Author: Dmitry Yashin <dmt.yashin@gmail.com>
Date:   Wed May 15 17:16:32 2024 +0500

    pinctrl: rockchip: update rk3308 iomux routes
    
    [ Upstream commit a8f2548548584549ea29d43431781d67c4afa42b ]
    
    Some of the rk3308 iomux routes in rk3308_mux_route_data belong to
    the rk3308b SoC. Remove them and correct i2c3 routes.
    
    Fixes: 7825aeb7b208 ("pinctrl: rockchip: add rk3308 SoC support")
    Signed-off-by: Dmitry Yashin <dmt.yashin@gmail.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://lore.kernel.org/r/20240515121634.23945-2-dmt.yashin@gmail.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: single: fix possible memory leak when pinctrl_enable() fails [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Jun 6 10:37:03 2024 +0800

    pinctrl: single: fix possible memory leak when pinctrl_enable() fails
    
    [ Upstream commit 8f773bfbdd428819328a2d185976cfc6ae811cd3 ]
    
    This driver calls pinctrl_register_and_init() which is not
    devm_ managed, it will leads memory leak if pinctrl_enable()
    fails. Replace it with devm_pinctrl_register_and_init().
    And call pcs_free_resources() if pinctrl_enable() fails.
    
    Fixes: 5038a66dad01 ("pinctrl: core: delete incorrect free in pinctrl_enable()")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/20240606023704.3931561-3-yangyingliang@huawei.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: ti: ti-iodelay: Drop if block with always false condition [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Mon Oct 9 10:38:39 2023 +0200

    pinctrl: ti: ti-iodelay: Drop if block with always false condition
    
    [ Upstream commit 88b3f108502bc45e6ebd005702add46759f3f45a ]
    
    ti_iodelay_remove() is only called after ti_iodelay_probe() completed
    successfully. In this case platform_set_drvdata() was called with a
    non-NULL argument and so platform_get_drvdata() won't return NULL.
    
    Simplify by removing the if block with the always false condition.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/20231009083856.222030-4-u.kleine-koenig@pengutronix.de
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Stable-dep-of: 9b401f4a7170 ("pinctrl: ti: ti-iodelay: fix possible memory leak when pinctrl_enable() fails")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: ti: ti-iodelay: fix possible memory leak when pinctrl_enable() fails [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Jun 6 10:37:04 2024 +0800

    pinctrl: ti: ti-iodelay: fix possible memory leak when pinctrl_enable() fails
    
    [ Upstream commit 9b401f4a7170125365160c9af267a41ff6b39001 ]
    
    This driver calls pinctrl_register_and_init() which is not
    devm_ managed, it will leads memory leak if pinctrl_enable()
    fails. Replace it with devm_pinctrl_register_and_init().
    And add missing of_node_put() in the error path.
    
    Fixes: 5038a66dad01 ("pinctrl: core: delete incorrect free in pinctrl_enable()")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/20240606023704.3931561-4-yangyingliang@huawei.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/chrome: cros_ec_debugfs: fix wrong EC message version [+ + +]
Author: Tzung-Bi Shih <tzungbi@kernel.org>
Date:   Tue Jun 11 11:31:10 2024 +0000

    platform/chrome: cros_ec_debugfs: fix wrong EC message version
    
    [ Upstream commit c2a28647bbb4e0894e8824362410f72b06ac57a4 ]
    
    ec_read_version_supported() uses ec_params_get_cmd_versions_v1 but it
    wrongly uses message version 0.
    
    Fix it.
    
    Fixes: e86264595225 ("mfd: cros_ec: add debugfs, console log file")
    Reviewed-by: Guenter Roeck <groeck@chromium.org>
    Link: https://lore.kernel.org/r/20240611113110.16955-1-tzungbi@kernel.org
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/chrome: cros_ec_proto: Lock device when updating MKBP version [+ + +]
Author: Patryk Duda <patrykd@google.com>
Date:   Tue Jul 30 10:44:25 2024 +0000

    platform/chrome: cros_ec_proto: Lock device when updating MKBP version
    
    commit df615907f1bf907260af01ccb904d0e9304b5278 upstream.
    
    The cros_ec_get_host_command_version_mask() function requires that the
    caller must have ec_dev->lock mutex before calling it. This requirement
    was not met and as a result it was possible that two commands were sent
    to the device at the same time.
    
    The problem was observed while using UART backend which doesn't use any
    additional locks, unlike SPI backend which locks the controller until
    response is received.
    
    Fixes: f74c7557ed0d ("platform/chrome: cros_ec_proto: Update version on GET_NEXT_EVENT failure")
    Cc: stable@vger.kernel.org
    Signed-off-by: Patryk Duda <patrykd@google.com>
    Link: https://lore.kernel.org/r/20240730104425.607083-1-patrykd@google.com
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform: mips: cpu_hwmon: Disable driver on unsupported hardware [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Jun 14 16:40:15 2024 +0100

    platform: mips: cpu_hwmon: Disable driver on unsupported hardware
    
    commit f4d430db17b4ef4e9c3c352a04b2fe3c93011978 upstream.
    
    cpu_hwmon is unsupported on CPUs without loongson_chiptemp
    register and csr.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
power: supply: axp288_charger: Fix constant_charge_voltage writes [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Wed Jul 17 22:03:32 2024 +0200

    power: supply: axp288_charger: Fix constant_charge_voltage writes
    
    commit b34ce4a59cfe9cd0d6f870e6408e8ec88a964585 upstream.
    
    info->max_cv is in millivolts, divide the microvolt value being written
    to constant_charge_voltage by 1000 *before* clamping it to info->max_cv.
    
    Before this fix the code always tried to set constant_charge_voltage
    to max_cv / 1000 = 4 millivolt, which ends up in setting it to 4.1V
    which is the lowest supported value.
    
    Fixes: 843735b788a4 ("power: axp288_charger: axp288 charger driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240717200333.56669-1-hdegoede@redhat.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

power: supply: axp288_charger: Round constant_charge_voltage writes down [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Wed Jul 17 22:03:33 2024 +0200

    power: supply: axp288_charger: Round constant_charge_voltage writes down
    
    commit 81af7f2342d162e24ac820c10e68684d9f927663 upstream.
    
    Round constant_charge_voltage writes down to the first supported lower
    value, rather then rounding them up to the first supported higher value.
    
    This fixes e.g. writing 4250000 resulting in a value of 4350000 which
    might be dangerous, instead writing 4250000 will now result in a safe
    4200000 value.
    
    Fixes: 843735b788a4 ("power: axp288_charger: axp288 charger driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240717200333.56669-2-hdegoede@redhat.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

power: supply: bq24190_charger: replace deprecated strncpy with strscpy [+ + +]
Author: Justin Stitt <justinstitt@google.com>
Date:   Fri Oct 20 18:14:47 2023 +0000

    power: supply: bq24190_charger: replace deprecated strncpy with strscpy
    
    [ Upstream commit b0009b8bed98bd5d59449af48781703df261c247 ]
    
    strncpy() is deprecated for use on NUL-terminated destination strings
    [1] and as such we should prefer more robust and less ambiguous string
    interfaces.
    
    We expect bdi->model_name to be NUL-terminated based on its usage with
    sysfs_emit and format strings:
    
    val->strval is assigned to bdi->model_name in
    bq24190_charger_get_property():
    1186 | val->strval = bdi->model_name;
    
    ... then in power_supply_sysfs.c we use value.strval with a format string:
    311  | ret = sysfs_emit(buf, "%s\n", value.strval);
    
    we assigned value.strval via:
    285  | ret = power_supply_get_property(psy, psp, &value);
    ... which invokes psy->desc->get_property():
    1210 | return psy->desc->get_property(psy, psp, val);
    
    with bq24190_charger_get_property():
    1320 | static const struct power_supply_desc bq24190_charger_desc = {
    ...
    1325 |  .get_property           = bq24190_charger_get_property,
    
    Moreover, no NUL-padding is required as bdi is zero-allocated in
    bq24190_charger.c:
    1798 | bdi = devm_kzalloc(dev, sizeof(*bdi), GFP_KERNEL);
    
    Considering the above, a suitable replacement is `strscpy` [2] due to
    the fact that it guarantees NUL-termination on the destination buffer
    without unnecessarily NUL-padding.
    
    Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
    Link: https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html [2]
    Link: https://github.com/KSPP/linux/issues/90
    Cc: linux-hardening@vger.kernel.org
    Signed-off-by: Justin Stitt <justinstitt@google.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20231020-strncpy-drivers-power-supply-bq24190_charger-c-v1-1-e896223cb795@google.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/configs: Update defconfig with now user-visible CONFIG_FSL_IFC [+ + +]
Author: Esben Haabendal <esben@geanix.com>
Date:   Thu May 30 16:46:37 2024 +0200

    powerpc/configs: Update defconfig with now user-visible CONFIG_FSL_IFC
    
    commit 45547a0a93d85f704b49788cde2e1d9ab9cd363b upstream.
    
    With CONFIG_FSL_IFC now being user-visible, and thus changed from a select
    to depends in CONFIG_MTD_NAND_FSL_IFC, the dependencies needs to be
    selected in defconfigs.
    
    Depends-on: 9ba0cae3cac0 ("memory: fsl_ifc: Make FSL_IFC config visible and selectable")
    Signed-off-by: Esben Haabendal <esben@geanix.com>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240530-fsl-ifc-config-v3-2-1fd2c3d233dd@geanix.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc/xmon: Fix disassembly CPU feature checks [+ + +]
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Thu May 9 22:12:47 2024 +1000

    powerpc/xmon: Fix disassembly CPU feature checks
    
    [ Upstream commit 14196e47c5ffe32af7ed5a51c9e421c5ea5bccce ]
    
    In the xmon disassembly code there are several CPU feature checks to
    determine what dialects should be passed to the disassembler. The
    dialect controls which instructions the disassembler will recognise.
    
    Unfortunately the checks are incorrect, because instead of passing a
    single CPU feature they are passing a mask of feature bits.
    
    For example the code:
    
      if (cpu_has_feature(CPU_FTRS_POWER5))
          dialect |= PPC_OPCODE_POWER5;
    
    Is trying to check if the system is running on a Power5 CPU. But
    CPU_FTRS_POWER5 is a mask of *all* the feature bits that are enabled on
    a Power5.
    
    In practice the test will always return true for any 64-bit CPU, because
    at least one bit in the mask will be present in the CPU_FTRS_ALWAYS
    mask.
    
    Similarly for all the other checks against CPU_FTRS_xx masks.
    
    Rather than trying to match the disassembly behaviour exactly to the
    current CPU, just differentiate between 32-bit and 64-bit, and Altivec,
    VSX and HTM.
    
    That will cause some instructions to be shown in disassembly even
    on a CPU that doesn't support them, but that's OK, objdump -d output
    has the same behaviour, and if anything it's less confusing than some
    instructions not being disassembled.
    
    Fixes: 897f112bb42e ("[POWERPC] Import updated version of ppc disassembly code for xmon")
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240509121248.270878-2-mpe@ellerman.id.au
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt. [+ + +]
Author: Mahesh Salgaonkar <mahesh@linux.ibm.com>
Date:   Wed Apr 10 10:00:06 2024 +0530

    powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt.
    
    commit 0db880fc865ffb522141ced4bfa66c12ab1fbb70 upstream.
    
    nmi_enter()/nmi_exit() touches per cpu variables which can lead to kernel
    crash when invoked during real mode interrupt handling (e.g. early HMI/MCE
    interrupt handler) if percpu allocation comes from vmalloc area.
    
    Early HMI/MCE handlers are called through DEFINE_INTERRUPT_HANDLER_NMI()
    wrapper which invokes nmi_enter/nmi_exit calls. We don't see any issue when
    percpu allocation is from the embedded first chunk. However with
    CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK enabled there are chances where percpu
    allocation can come from the vmalloc area.
    
    With kernel command line "percpu_alloc=page" we can force percpu allocation
    to come from vmalloc area and can see kernel crash in machine_check_early:
    
    [    1.215714] NIP [c000000000e49eb4] rcu_nmi_enter+0x24/0x110
    [    1.215717] LR [c0000000000461a0] machine_check_early+0xf0/0x2c0
    [    1.215719] --- interrupt: 200
    [    1.215720] [c000000fffd73180] [0000000000000000] 0x0 (unreliable)
    [    1.215722] [c000000fffd731b0] [0000000000000000] 0x0
    [    1.215724] [c000000fffd73210] [c000000000008364] machine_check_early_common+0x134/0x1f8
    
    Fix this by avoiding use of nmi_enter()/nmi_exit() in real mode if percpu
    first chunk is not embedded.
    
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Tested-by: Shirisha Ganta <shirisha@linux.ibm.com>
    Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240410043006.81577-1-mahesh@linux.ibm.com
    [ Conflicts in arch/powerpc/include/asm/interrupt.h
      because interrupt_nmi_enter_prepare() and interrupt_nmi_exit_prepare()
      has been refactored. ]
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

powerpc: fix a file leak in kvm_vcpu_ioctl_enable_cap() [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu May 30 23:54:55 2024 -0400

    powerpc: fix a file leak in kvm_vcpu_ioctl_enable_cap()
    
    [ Upstream commit b4cf5fc01ce83e5c0bcf3dbb9f929428646b9098 ]
    
    missing fdput() on one of the failure exits
    
    Fixes: eacc56bb9de3e # v5.2
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
profiling: remove profile=sleep support [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Sun Aug 4 18:48:10 2024 +0900

    profiling: remove profile=sleep support
    
    commit b88f55389ad27f05ed84af9e1026aa64dbfabc9a upstream.
    
    The kernel sleep profile is no longer working due to a recursive locking
    bug introduced by commit 42a20f86dc19 ("sched: Add wrapper for get_wchan()
    to keep task blocked")
    
    Booting with the 'profile=sleep' kernel command line option added or
    executing
    
      # echo -n sleep > /sys/kernel/profiling
    
    after boot causes the system to lock up.
    
    Lockdep reports
    
      kthreadd/3 is trying to acquire lock:
      ffff93ac82e08d58 (&p->pi_lock){....}-{2:2}, at: get_wchan+0x32/0x70
    
      but task is already holding lock:
      ffff93ac82e08d58 (&p->pi_lock){....}-{2:2}, at: try_to_wake_up+0x53/0x370
    
    with the call trace being
    
       lock_acquire+0xc8/0x2f0
       get_wchan+0x32/0x70
       __update_stats_enqueue_sleeper+0x151/0x430
       enqueue_entity+0x4b0/0x520
       enqueue_task_fair+0x92/0x6b0
       ttwu_do_activate+0x73/0x140
       try_to_wake_up+0x213/0x370
       swake_up_locked+0x20/0x50
       complete+0x2f/0x40
       kthread+0xfb/0x180
    
    However, since nobody noticed this regression for more than two years,
    let's remove 'profile=sleep' support based on the assumption that nobody
    needs this functionality.
    
    Fixes: 42a20f86dc19 ("sched: Add wrapper for get_wchan() to keep task blocked")
    Cc: stable@vger.kernel.org # v5.16+
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: protect the fetch of ->fd[fd] in do_dup2() from mispredictions [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Aug 1 15:22:22 2024 -0400

    protect the fetch of ->fd[fd] in do_dup2() from mispredictions
    
    commit 8aa37bde1a7b645816cda8b80df4753ecf172bf1 upstream.
    
    both callers have verified that fd is not greater than ->max_fds;
    however, misprediction might end up with
            tofree = fdt->fd[fd];
    being speculatively executed.  That's wrong for the same reasons
    why it's wrong in close_fd()/file_close_fd_locked(); the same
    solution applies - array_index_nospec(fd, fdt->max_fds) could differ
    from fd only in case of speculative execution on mispredicted path.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pwm: stm32: Always do lazy disabling [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Date:   Wed Jul 3 13:00:06 2024 +0200

    pwm: stm32: Always do lazy disabling
    
    [ Upstream commit 7346e7a058a2c9aa9ff1cc699c7bf18a402d9f84 ]
    
    When the state changes from enabled to disabled, polarity, duty_cycle
    and period are not configured in hardware and TIM_CCER_CCxE is just
    cleared. However if the state changes from one disabled state to
    another, all parameters are written to hardware because the early exit
    from stm32_pwm_apply() is only taken if the pwm is currently enabled.
    
    This yields surprises like: Applying
    
            { .period = 1, .duty_cycle = 0, .enabled = false }
    
    succeeds if the pwm is initially on, but fails if it's already off
    because 1 is a too small period.
    
    Update the check for lazy disable to always exit early if the target
    state is disabled, no matter what is currently configured.
    
    Fixes: 7edf7369205b ("pwm: Add driver for STM32 plaftorm")
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Link: https://lore.kernel.org/r/20240703110010.672654-2-u.kleine-koenig@baylibre.com
    Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
r8169: don't increment tx_dropped in case of NETDEV_TX_BUSY [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Tue Jul 30 21:51:52 2024 +0200

    r8169: don't increment tx_dropped in case of NETDEV_TX_BUSY
    
    commit d516b187a9cc2e842030dd005be2735db3e8f395 upstream.
    
    The skb isn't consumed in case of NETDEV_TX_BUSY, therefore don't
    increment the tx_dropped counter.
    
    Fixes: 188f4af04618 ("r8169: use NETDEV_TX_{BUSY/OK}")
    Cc: stable@vger.kernel.org
    Suggested-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
    Link: https://patch.msgid.link/bbba9c48-8bac-4932-9aa1-d2ed63bc9433@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rbd: don't assume rbd_is_lock_owner() for exclusive mappings [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Tue Jul 23 18:08:08 2024 +0200

    rbd: don't assume rbd_is_lock_owner() for exclusive mappings
    
    commit 3ceccb14f5576e02b81cc8b105ab81f224bd87f6 upstream.
    
    Expanding on the previous commit, assuming that rbd_is_lock_owner()
    always returns true (i.e. that we are either in RBD_LOCK_STATE_LOCKED
    or RBD_LOCK_STATE_QUIESCING) if the mapping is exclusive is wrong too.
    In case ceph_cls_set_cookie() fails, the lock would be temporarily
    released even if the mapping is exclusive, meaning that we can end up
    even in RBD_LOCK_STATE_UNLOCKED.
    
    IOW, exclusive mappings are really "just" about disabling automatic
    lock transitions (as documented in the man page), not about grabbing
    the lock and holding on to it whatever it takes.
    
    Cc: stable@vger.kernel.org
    Fixes: 637cd060537d ("rbd: new exclusive lock wait/wake code")
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rbd: don't assume RBD_LOCK_STATE_LOCKED for exclusive mappings [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Tue Jul 23 18:07:59 2024 +0200

    rbd: don't assume RBD_LOCK_STATE_LOCKED for exclusive mappings
    
    commit 2237ceb71f89837ac47c5dce2aaa2c2b3a337a3c upstream.
    
    Every time a watch is reestablished after getting lost, we need to
    update the cookie which involves quiescing exclusive lock.  For this,
    we transition from RBD_LOCK_STATE_LOCKED to RBD_LOCK_STATE_QUIESCING
    roughly for the duration of rbd_reacquire_lock() call.  If the mapping
    is exclusive and I/O happens to arrive in this time window, it's failed
    with EROFS (later translated to EIO) based on the wrong assumption in
    rbd_img_exclusive_lock() -- "lock got released?" check there stopped
    making sense with commit a2b1da09793d ("rbd: lock should be quiesced on
    reacquire").
    
    To make it worse, any such I/O is added to the acquiring list before
    EROFS is returned and this sets up for violating rbd_lock_del_request()
    precondition that the request is either on the running list or not on
    any list at all -- see commit ded080c86b3f ("rbd: don't move requests
    to the running list on errors").  rbd_lock_del_request() ends up
    processing these requests as if they were on the running list which
    screws up quiescing_wait completion counter and ultimately leads to
    
        rbd_assert(!completion_done(&rbd_dev->quiescing_wait));
    
    being triggered on the next watch error.
    
    Cc: stable@vger.kernel.org # 06ef84c4e9c4: rbd: rename RBD_LOCK_STATE_RELEASING and releasing_wait
    Cc: stable@vger.kernel.org
    Fixes: 637cd060537d ("rbd: new exclusive lock wait/wake code")
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rbd: rename RBD_LOCK_STATE_RELEASING and releasing_wait [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Tue Jul 23 17:54:39 2024 +0200

    rbd: rename RBD_LOCK_STATE_RELEASING and releasing_wait
    
    commit f5c466a0fdb2d9f3650d2e3911b0735f17ba00cf upstream.
    
    ... to RBD_LOCK_STATE_QUIESCING and quiescing_wait to recognize that
    this state and the associated completion are backing rbd_quiesce_lock(),
    which isn't specific to releasing the lock.
    
    While exclusive lock does get quiesced before it's released, it also
    gets quiesced before an attempt to update the cookie is made and there
    the lock is not released as long as ceph_cls_set_cookie() succeeds.
    
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rcutorture: Fix rcu_torture_fwd_cb_cr() data race [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Fri Apr 5 12:02:11 2024 -0700

    rcutorture: Fix rcu_torture_fwd_cb_cr() data race
    
    [ Upstream commit 6040072f4774a575fa67b912efe7722874be337b ]
    
    On powerpc systems, spinlock acquisition does not order prior stores
    against later loads.  This means that this statement:
    
            rfcp->rfc_next = NULL;
    
    Can be reordered to follow this statement:
    
            WRITE_ONCE(*rfcpp, rfcp);
    
    Which is then a data race with rcu_torture_fwd_prog_cr(), specifically,
    this statement:
    
            rfcpn = READ_ONCE(rfcp->rfc_next)
    
    KCSAN located this data race, which represents a real failure on powerpc.
    
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Acked-by: Marco Elver <elver@google.com>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: <kasan-dev@googlegroups.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/cache: Release GID table even if leak is detected [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Tue May 28 15:52:51 2024 +0300

    RDMA/cache: Release GID table even if leak is detected
    
    [ Upstream commit a92fbeac7e94a420b55570c10fe1b90e64da4025 ]
    
    When the table is released, we nullify pointer to GID table, it means
    that in case GID entry leak is detected, we will leak table too.
    
    Delete code that prevents table destruction.
    
    Fixes: b150c3862d21 ("IB/core: Introduce GID entry reference counts")
    Link: https://lore.kernel.org/r/a62560af06ba82c88ef9194982bfa63d14768ff9.1716900410.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/device: Return error earlier if port in not valid [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Mon Jun 24 16:24:32 2024 +0300

    RDMA/device: Return error earlier if port in not valid
    
    [ Upstream commit 917918f57a7b139c043e78c502876f2c286f4f0a ]
    
    There is no need to allocate port data if port provided is not valid.
    
    Fixes: c2261dd76b54 ("RDMA/device: Add ib_device_set_netdev() as an alternative to get_netdev")
    Link: https://lore.kernel.org/r/022047a8b16988fc88d4426da50bf60a4833311b.1719235449.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/hns: Fix insufficient extend DB for VFs. [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Wed Jul 10 21:37:04 2024 +0800

    RDMA/hns: Fix insufficient extend DB for VFs.
    
    [ Upstream commit 0b8e658f70ffd5dc7cda3872fd524d657d4796b7 ]
    
    VFs and its PF will share the memory of the extend DB. Currently,
    the number of extend DB allocated by driver is only enough for PF.
    This leads to a probability of DB loss and some other problems in
    scenarios where both PF and VFs use a large number of QPs.
    
    Fixes: 6b63597d3540 ("RDMA/hns: Add TSQ link table support")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://lore.kernel.org/r/20240710133705.896445-8-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix missing pagesize and alignment check in FRMR [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Wed Jul 10 21:37:01 2024 +0800

    RDMA/hns: Fix missing pagesize and alignment check in FRMR
    
    [ Upstream commit d387d4b54eb84208bd4ca13572e106851d0a0819 ]
    
    The offset requires 128B alignment and the page size ranges from
    4K to 128M.
    
    Fixes: 68a997c5d28c ("RDMA/hns: Add FRMR support for hip08")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://lore.kernel.org/r/20240710133705.896445-5-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix undifined behavior caused by invalid max_sge [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Wed Jul 10 21:37:03 2024 +0800

    RDMA/hns: Fix undifined behavior caused by invalid max_sge
    
    [ Upstream commit 36397b907355e2fdb5a25a02a7921a937fd8ef4c ]
    
    If max_sge has been set to 0, roundup_pow_of_two() in
    set_srq_basic_param() may have undefined behavior.
    
    Fixes: 9dd052474a26 ("RDMA/hns: Allocate one more recv SGE for HIP08")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://lore.kernel.org/r/20240710133705.896445-7-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/iwcm: Fix a use-after-free related to destroying CM IDs [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Wed Jun 5 08:51:01 2024 -0600

    RDMA/iwcm: Fix a use-after-free related to destroying CM IDs
    
    commit aee2424246f9f1dadc33faa78990c1e2eb7826e4 upstream.
    
    iw_conn_req_handler() associates a new struct rdma_id_private (conn_id) with
    an existing struct iw_cm_id (cm_id) as follows:
    
            conn_id->cm_id.iw = cm_id;
            cm_id->context = conn_id;
            cm_id->cm_handler = cma_iw_handler;
    
    rdma_destroy_id() frees both the cm_id and the struct rdma_id_private. Make
    sure that cm_work_handler() does not trigger a use-after-free by only
    freeing of the struct rdma_id_private after all pending work has finished.
    
    Cc: stable@vger.kernel.org
    Fixes: 59c68ac31e15 ("iw_cm: free cm_id resources on the last deref")
    Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20240605145117.397751-6-bvanassche@acm.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/mlx4: Fix truncated output warning in alias_GUID.c [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Sun Jun 16 19:17:30 2024 +0300

    RDMA/mlx4: Fix truncated output warning in alias_GUID.c
    
    [ Upstream commit 5953e0647cec703ef436ead37fed48943507b433 ]
    
    drivers/infiniband/hw/mlx4/alias_GUID.c: In function ‘mlx4_ib_init_alias_guid_service’:
    drivers/infiniband/hw/mlx4/alias_GUID.c:878:74: error: ‘%d’ directive
    output may be truncated writing between 1 and 11 bytes into a region of
    size 5 [-Werror=format-truncation=]
      878 |                 snprintf(alias_wq_name, sizeof alias_wq_name, "alias_guid%d", i);
          |                                                                          ^~
    drivers/infiniband/hw/mlx4/alias_GUID.c:878:63: note: directive argument in the range [-2147483641, 2147483646]
      878 |                 snprintf(alias_wq_name, sizeof alias_wq_name, "alias_guid%d", i);
          |                                                               ^~~~~~~~~~~~~~
    drivers/infiniband/hw/mlx4/alias_GUID.c:878:17: note: ‘snprintf’ output
    between 12 and 22 bytes into a destination of size 15
      878 |                 snprintf(alias_wq_name, sizeof alias_wq_name, "alias_guid%d", i);
          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors
    
    Fixes: a0c64a17aba8 ("mlx4: Add alias_guid mechanism")
    Link: https://lore.kernel.org/r/1951c9500109ca7e36dcd523f8a5f2d0d2a608d1.1718554641.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/mlx4: Fix truncated output warning in mad.c [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Sun Jun 16 19:16:33 2024 +0300

    RDMA/mlx4: Fix truncated output warning in mad.c
    
    [ Upstream commit 0d2e6992fc956e3308cd5376c18567def4cb3967 ]
    
    Increase size of the name array to avoid truncated output warning.
    
    drivers/infiniband/hw/mlx4/mad.c: In function ‘mlx4_ib_alloc_demux_ctx’:
    drivers/infiniband/hw/mlx4/mad.c:2197:47: error: ‘%d’ directive output
    may be truncated writing between 1 and 11 bytes into a region of size 4
    [-Werror=format-truncation=]
     2197 |         snprintf(name, sizeof(name), "mlx4_ibt%d", port);
          |                                               ^~
    drivers/infiniband/hw/mlx4/mad.c:2197:38: note: directive argument in
    the range [-2147483645, 2147483647]
     2197 |         snprintf(name, sizeof(name), "mlx4_ibt%d", port);
          |                                      ^~~~~~~~~~~~
    drivers/infiniband/hw/mlx4/mad.c:2197:9: note: ‘snprintf’ output between
    10 and 20 bytes into a destination of size 12
     2197 |         snprintf(name, sizeof(name), "mlx4_ibt%d", port);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/infiniband/hw/mlx4/mad.c:2205:48: error: ‘%d’ directive output
    may be truncated writing between 1 and 11 bytes into a region of size 3
    [-Werror=format-truncation=]
     2205 |         snprintf(name, sizeof(name), "mlx4_ibwi%d", port);
          |                                                ^~
    drivers/infiniband/hw/mlx4/mad.c:2205:38: note: directive argument in
    the range [-2147483645, 2147483647]
     2205 |         snprintf(name, sizeof(name), "mlx4_ibwi%d", port);
          |                                      ^~~~~~~~~~~~~
    drivers/infiniband/hw/mlx4/mad.c:2205:9: note: ‘snprintf’ output between
    11 and 21 bytes into a destination of size 12
     2205 |         snprintf(name, sizeof(name), "mlx4_ibwi%d", port);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/infiniband/hw/mlx4/mad.c:2213:48: error: ‘%d’ directive output
    may be truncated writing between 1 and 11 bytes into a region of size 3
    [-Werror=format-truncation=]
     2213 |         snprintf(name, sizeof(name), "mlx4_ibud%d", port);
          |                                                ^~
    drivers/infiniband/hw/mlx4/mad.c:2213:38: note: directive argument in
    the range [-2147483645, 2147483647]
     2213 |         snprintf(name, sizeof(name), "mlx4_ibud%d", port);
          |                                      ^~~~~~~~~~~~~
    drivers/infiniband/hw/mlx4/mad.c:2213:9: note: ‘snprintf’ output between
    11 and 21 bytes into a destination of size 12
     2213 |         snprintf(name, sizeof(name), "mlx4_ibud%d", port);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors
    make[6]: *** [scripts/Makefile.build:244: drivers/infiniband/hw/mlx4/mad.o] Error 1
    
    Fixes: fc06573dfaf8 ("IB/mlx4: Initialize SR-IOV IB support for slaves in master context")
    Link: https://lore.kernel.org/r/f3798b3ce9a410257d7e1ec7c9e285f1352e256a.1718554569.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/mlx5: Set mkeys for dmabuf at PAGE_SIZE [+ + +]
Author: Chiara Meiohas <cmeiohas@nvidia.com>
Date:   Thu Jun 13 21:01:42 2024 +0300

    RDMA/mlx5: Set mkeys for dmabuf at PAGE_SIZE
    
    [ Upstream commit a4e540119be565f47c305f295ed43f8e0bc3f5c3 ]
    
    Set the mkey for dmabuf at PAGE_SIZE to support any SGL
    after a move operation.
    
    ib_umem_find_best_pgsz returns 0 on error, so it is
    incorrect to check the returned page_size against PAGE_SIZE
    
    Fixes: 90da7dc8206a ("RDMA/mlx5: Support dma-buf based userspace memory region")
    Signed-off-by: Chiara Meiohas <cmeiohas@nvidia.com>
    Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
    Link: https://lore.kernel.org/r/1e2289b9133e89f273a4e68d459057d032cbc2ce.1718301631.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rxe: Don't set BTH_ACK_MASK for UC or UD QPs [+ + +]
Author: Honggang LI <honggangli@163.com>
Date:   Mon Jun 24 10:03:48 2024 +0800

    RDMA/rxe: Don't set BTH_ACK_MASK for UC or UD QPs
    
    [ Upstream commit 4adcaf969d77d3d3aa3871bbadc196258a38aec6 ]
    
    BTH_ACK_MASK bit is used to indicate that an acknowledge
    (for this packet) should be scheduled by the responder.
    Both UC and UD QPs are unacknowledged, so don't set
    BTH_ACK_MASK for UC or UD QPs.
    
    Fixes: 8700e3e7c485 ("Soft RoCE driver")
    Signed-off-by: Honggang LI <honggangli@163.com>
    Link: https://lore.kernel.org/r/20240624020348.494338-1-honggangli@163.com
    Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
remoteproc: imx_rproc: Fix refcount mistake in imx_rproc_addr_init [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Wed Jun 12 16:17:14 2024 +0300

    remoteproc: imx_rproc: Fix refcount mistake in imx_rproc_addr_init
    
    [ Upstream commit dce68a49be26abf52712e0ee452a45fa01ab4624 ]
    
    In imx_rproc_addr_init() strcmp() is performed over the node after the
    of_node_put() is performed over it.
    Fix this error by moving of_node_put() calls.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 5e4c1243071d ("remoteproc: imx_rproc: support remote cores booted before Linux Kernel")
    Cc: stable@vger.kernel.org
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Link: https://lore.kernel.org/r/20240612131714.12907-1-amishin@t-argos.ru
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

remoteproc: imx_rproc: Skip over memory region when node value is NULL [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Thu Jun 6 10:52:04 2024 +0300

    remoteproc: imx_rproc: Skip over memory region when node value is NULL
    
    commit 2fa26ca8b786888673689ccc9da6094150939982 upstream.
    
    In imx_rproc_addr_init() "nph = of_count_phandle_with_args()" just counts
    number of phandles. But phandles may be empty. So of_parse_phandle() in
    the parsing loop (0 < a < nph) may return NULL which is later dereferenced.
    Adjust this issue by adding NULL-return check.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: a0ff4aa6f010 ("remoteproc: imx_rproc: add a NXP/Freescale imx_rproc driver")
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Reviewed-by: Peng Fan <peng.fan@nxp.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240606075204.12354-1-amishin@t-argos.ru
    [Fixed title to fit within the prescribed 70-75 charcters]
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

remoteproc: stm32_rproc: Fix mailbox interrupts queuing [+ + +]
Author: Gwenael Treuveur <gwenael.treuveur@foss.st.com>
Date:   Tue May 21 18:23:16 2024 +0200

    remoteproc: stm32_rproc: Fix mailbox interrupts queuing
    
    commit c3281abea67c9c0dc6219bbc41d1feae05a16da3 upstream.
    
    Manage interrupt coming from coprocessor also when state is
    ATTACHED.
    
    Fixes: 35bdafda40cc ("remoteproc: stm32_rproc: Add mutex protection for workqueue")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gwenael Treuveur <gwenael.treuveur@foss.st.com>
    Acked-by: Arnaud Pouliquen <arnaud.pouliquen@foss.st.com>
    Link: https://lore.kernel.org/r/20240521162316.156259-1-gwenael.treuveur@foss.st.com
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "ALSA: firewire-lib: obsolete workqueue for period update" [+ + +]
Author: Edmund Raile <edmund.raile@protonmail.com>
Date:   Tue Jul 30 19:53:26 2024 +0000

    Revert "ALSA: firewire-lib: obsolete workqueue for period update"
    
    commit 6ccf9984d6be3c2f804087b736db05c2ec42664b upstream.
    
    prepare resolution of AB/BA deadlock competition for substream lock:
    restore workqueue previously used for process context:
    
    revert commit b5b519965c4c ("ALSA: firewire-lib: obsolete workqueue
    for period update")
    
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/kwryofzdmjvzkuw6j3clftsxmoolynljztxqwg76hzeo4simnl@jn3eo7pe642q/
    Signed-off-by: Edmund Raile <edmund.raile@protonmail.com>
    Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20240730195318.869840-2-edmund.raile@protonmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Revert "ALSA: firewire-lib: operate for period elapse event in process context" [+ + +]
Author: Edmund Raile <edmund.raile@protonmail.com>
Date:   Tue Jul 30 19:53:29 2024 +0000

    Revert "ALSA: firewire-lib: operate for period elapse event in process context"
    
    commit 3dab73ab925a51ab05543b491bf17463a48ca323 upstream.
    
    Commit 7ba5ca32fe6e ("ALSA: firewire-lib: operate for period elapse event
    in process context") removed the process context workqueue from
    amdtp_domain_stream_pcm_pointer() and update_pcm_pointers() to remove
    its overhead.
    
    With RME Fireface 800, this lead to a regression since
    Kernels 5.14.0, causing an AB/BA deadlock competition for the
    substream lock with eventual system freeze under ALSA operation:
    
    thread 0:
        * (lock A) acquire substream lock by
            snd_pcm_stream_lock_irq() in
            snd_pcm_status64()
        * (lock B) wait for tasklet to finish by calling
            tasklet_unlock_spin_wait() in
            tasklet_disable_in_atomic() in
            ohci_flush_iso_completions() of ohci.c
    
    thread 1:
        * (lock B) enter tasklet
        * (lock A) attempt to acquire substream lock,
            waiting for it to be released:
            snd_pcm_stream_lock_irqsave() in
            snd_pcm_period_elapsed() in
            update_pcm_pointers() in
            process_ctx_payloads() in
            process_rx_packets() of amdtp-stream.c
    
    ? tasklet_unlock_spin_wait
     </NMI>
     <TASK>
    ohci_flush_iso_completions firewire_ohci
    amdtp_domain_stream_pcm_pointer snd_firewire_lib
    snd_pcm_update_hw_ptr0 snd_pcm
    snd_pcm_status64 snd_pcm
    
    ? native_queued_spin_lock_slowpath
     </NMI>
     <IRQ>
    _raw_spin_lock_irqsave
    snd_pcm_period_elapsed snd_pcm
    process_rx_packets snd_firewire_lib
    irq_target_callback snd_firewire_lib
    handle_it_packet firewire_ohci
    context_tasklet firewire_ohci
    
    Restore the process context work queue to prevent deadlock
    AB/BA deadlock competition for ALSA substream lock of
    snd_pcm_stream_lock_irq() in snd_pcm_status64()
    and snd_pcm_stream_lock_irqsave() in snd_pcm_period_elapsed().
    
    revert commit 7ba5ca32fe6e ("ALSA: firewire-lib: operate for period
    elapse event in process context")
    
    Replace inline description to prevent future deadlock.
    
    Cc: stable@vger.kernel.org
    Fixes: 7ba5ca32fe6e ("ALSA: firewire-lib: operate for period elapse event in process context")
    Reported-by: edmund.raile <edmund.raile@proton.me>
    Closes: https://lore.kernel.org/r/kwryofzdmjvzkuw6j3clftsxmoolynljztxqwg76hzeo4simnl@jn3eo7pe642q/
    Signed-off-by: Edmund Raile <edmund.raile@protonmail.com>
    Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20240730195318.869840-3-edmund.raile@protonmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error" [+ + +]
Author: Niklas Cassel <cassel@kernel.org>
Date:   Tue Aug 13 15:19:01 2024 +0200

    Revert "ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error"
    
    commit fa0db8e568787c665384430eaf2221b299b85367 upstream.
    
    This reverts commit 28ab9769117ca944cb6eb537af5599aa436287a4.
    
    Sense data can be in either fixed format or descriptor format.
    
    SAT-6 revision 1, "10.4.6 Control mode page", defines the D_SENSE bit:
    "The SATL shall support this bit as defined in SPC-5 with the following
    exception: if the D_ SENSE bit is set to zero (i.e., fixed format sense
    data), then the SATL should return fixed format sense data for ATA
    PASS-THROUGH commands."
    
    The libata SATL has always kept D_SENSE set to zero by default. (It is
    however possible to change the value using a MODE SELECT SG_IO command.)
    
    Failed ATA PASS-THROUGH commands correctly respected the D_SENSE bit,
    however, successful ATA PASS-THROUGH commands incorrectly returned the
    sense data in descriptor format (regardless of the D_SENSE bit).
    
    Commit 28ab9769117c ("ata: libata-scsi: Honor the D_SENSE bit for
    CK_COND=1 and no error") fixed this bug for successful ATA PASS-THROUGH
    commands.
    
    However, after commit 28ab9769117c ("ata: libata-scsi: Honor the D_SENSE
    bit for CK_COND=1 and no error"), there were bug reports that hdparm,
    hddtemp, and udisks were no longer working as expected.
    
    These applications incorrectly assume the returned sense data is in
    descriptor format, without even looking at the RESPONSE CODE field in the
    returned sense data (to see which format the returned sense data is in).
    
    Considering that there will be broken versions of these applications around
    roughly forever, we are stuck with being bug compatible with older kernels.
    
    Cc: stable@vger.kernel.org # 4.19+
    Reported-by: Stephan Eisvogel <eisvogel@seitics.de>
    Reported-by: Christian Heusel <christian@heusel.eu>
    Closes: https://lore.kernel.org/linux-ide/0bf3f2f0-0fc6-4ba5-a420-c0874ef82d64@heusel.eu/
    Fixes: 28ab9769117c ("ata: libata-scsi: Honor the D_SENSE bit for CK_COND=1 and no error")
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Link: https://lore.kernel.org/r/20240813131900.1285842-2-cassel@kernel.org
    Signed-off-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "leds: led-core: Fix refcount leak in of_led_get()" [+ + +]
Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date:   Tue Jun 25 10:34:38 2024 +0200

    Revert "leds: led-core: Fix refcount leak in of_led_get()"
    
    [ Upstream commit 940b27161afc6ec53fc66245a4fb3518394cdc92 ]
    
    This reverts commit da1afe8e6099980fe1e2fd7436dca284af9d3f29.
    
    Commit 699a8c7c4bd3 ("leds: Add of_led_get() and led_put()"), introduced in
    5.5, added of_led_get() and led_put() but missed a put_device() in
    led_put(), thus creating a leak in case the consumer device is removed.
    
    Arguably device removal was not very popular, so this went apparently
    unnoticed until 2022. In January 2023 two different patches got merged to
    fix the same bug:
    
     - commit da1afe8e6099 ("leds: led-core: Fix refcount leak in of_led_get()")
     - commit 445110941eb9 ("leds: led-class: Add missing put_device() to led_put()")
    
    They fix the bug in two different ways, which creates no patch conflicts,
    and both were merged in v6.2. The result is that now there is one more
    put_device() than get_device()s, instead of one less.
    
    Arguably device removal is not very popular yet, so this apparently hasn't
    been noticed as well up to now. But it blew up here while I'm working with
    device tree overlay insertion and removal. The symptom is an apparently
    unrelated list of oopses on device removal, with reasons:
    
      kernfs: can not remove 'uevent', no directory
      kernfs: can not remove 'brightness', no directory
      kernfs: can not remove 'max_brightness', no directory
      ...
    
    Here sysfs fails removing attribute files, which is because the device name
    changed and so the sysfs path. This is because the device name string got
    corrupted, which is because it got freed too early and its memory reused.
    
    Different symptoms could appear in different use cases.
    
    Fix by removing one of the two fixes.
    
    The choice was to remove commit da1afe8e6099 because:
    
     * it is calling put_device() inside of_led_get() just after getting the
       device, thus it is basically not refcounting the LED device at all
       during its entire lifetime
     * it does not add a corresponding put_device() in led_get(), so it fixes
       only the OF case
    
    The other fix (445110941eb9) is adding the put_device() in led_put() so it
    covers the entire lifetime, and it works even in the non-DT case.
    
    Fixes: da1afe8e6099 ("leds: led-core: Fix refcount leak in of_led_get()")
    Co-developed-by: Hervé Codina <herve.codina@bootlin.com>
    Signed-off-by: Hervé Codina <herve.codina@bootlin.com>
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Link: https://lore.kernel.org/r/20240625-led-class-device-leak-v2-1-75fdccf47421@bootlin.com
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
riscv/mm: Add handling for VM_FAULT_SIGSEGV in mm_fault_error() [+ + +]
Author: Zhe Qiao <qiaozhe@iscas.ac.cn>
Date:   Wed Jul 31 16:45:47 2024 +0800

    riscv/mm: Add handling for VM_FAULT_SIGSEGV in mm_fault_error()
    
    [ Upstream commit 0c710050c47d45eb77b28c271cddefc5c785cb40 ]
    
    Handle VM_FAULT_SIGSEGV in the page fault path so that we correctly
    kill the process and we don't BUG() the kernel.
    
    Fixes: 07037db5d479 ("RISC-V: Paging and MMU")
    Signed-off-by: Zhe Qiao <qiaozhe@iscas.ac.cn>
    Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/20240731084547.85380-1-qiaozhe@iscas.ac.cn
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtc: cmos: Fix return value of nvmem callbacks [+ + +]
Author: Joy Chakraborty <joychakr@google.com>
Date:   Wed Jun 12 08:36:35 2024 +0000

    rtc: cmos: Fix return value of nvmem callbacks
    
    commit 1c184baccf0d5e2ef4cc1562261d0e48508a1c2b upstream.
    
    Read/write callbacks registered with nvmem core expect 0 to be returned
    on success and a negative value to be returned on failure.
    
    cmos_nvram_read()/cmos_nvram_write() currently return the number of
    bytes read or written, fix to return 0 on success and -EIO incase number
    of bytes requested was not read or written.
    
    Fixes: 8b5b7958fd1c ("rtc: cmos: use generic nvmem")
    Cc: stable@vger.kernel.org
    Signed-off-by: Joy Chakraborty <joychakr@google.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/20240612083635.1253039-1-joychakr@google.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rtc: interface: Add RTC offset to alarm after fix-up [+ + +]
Author: Csókás, Bence <csokas.bence@prolan.hu>
Date:   Wed Jun 19 16:04:52 2024 +0200

    rtc: interface: Add RTC offset to alarm after fix-up
    
    [ Upstream commit 463927a8902a9f22c3633960119410f57d4c8920 ]
    
    `rtc_add_offset()` is called by `__rtc_read_time()`
    and `__rtc_read_alarm()` to add the RTC's offset to
    the raw read-outs from the device drivers. However,
    in the latter case, a fix-up algorithm is run if
    the RTC device does not report a full `struct rtc_time`
    alarm value. In that case, the offset was forgot to be
    added.
    
    Fixes: fd6792bb022e ("rtc: fix alarm read and set offset")
    
    Signed-off-by: Csókás, Bence <csokas.bence@prolan.hu>
    Link: https://lore.kernel.org/r/20240619140451.2800578-1-csokas.bence@prolan.hu
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rtc: isl1208: Fix return value of nvmem callbacks [+ + +]
Author: Joy Chakraborty <joychakr@google.com>
Date:   Wed Jun 12 08:08:31 2024 +0000

    rtc: isl1208: Fix return value of nvmem callbacks
    
    commit 70f1ae5f0e7f44edf842444044615da7b59838c1 upstream.
    
    Read/write callbacks registered with nvmem core expect 0 to be returned
    on success and a negative value to be returned on failure.
    
    isl1208_nvmem_read()/isl1208_nvmem_write() currently return the number of
    bytes read/written on success, fix to return 0 on success and negative on
    failure.
    
    Fixes: c3544f6f51ed ("rtc: isl1208: Add new style nvmem support to driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Joy Chakraborty <joychakr@google.com>
    Link: https://lore.kernel.org/r/20240612080831.1227131-1-joychakr@google.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rtnetlink: Don't ignore IFLA_TARGET_NETNSID when ifname is specified in rtnl_dellink(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Jul 26 17:19:53 2024 -0700

    rtnetlink: Don't ignore IFLA_TARGET_NETNSID when ifname is specified in rtnl_dellink().
    
    [ Upstream commit 9415d375d8520e0ed55f0c0b058928da9a5b5b3d ]
    
    The cited commit accidentally replaced tgt_net with net in rtnl_dellink().
    
    As a result, IFLA_TARGET_NETNSID is ignored if the interface is specified
    with IFLA_IFNAME or IFLA_ALT_IFNAME.
    
    Let's pass tgt_net to rtnl_dev_get().
    
    Fixes: cc6090e985d7 ("net: rtnetlink: introduce helper to get net_device instance by ifname")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rtnetlink: enable alt_ifname for setlink/newlink [+ + +]
Author: Florent Fourcot <florent.fourcot@wifirst.fr>
Date:   Fri Apr 15 18:53:28 2022 +0200

    rtnetlink: enable alt_ifname for setlink/newlink
    
    [ Upstream commit 5ea08b5286f66ee5ac0150668c92d1718e83e1ad ]
    
    buffer called "ifname" given in function rtnl_dev_get
    is always valid when called by setlink/newlink,
    but contains only empty string when IFLA_IFNAME is not given. So
    IFLA_ALT_IFNAME is always ignored
    
    This patch fixes rtnl_dev_get function with a remove of ifname argument,
    and move ifname copy in do_setlink when required.
    
    It extends feature of commit 76c9ac0ee878,
    "net: rtnetlink: add possibility to use alternative names as message
    handle""
    
    CC: Jiri Pirko <jiri@mellanox.com>
    Signed-off-by: Florent Fourcot <florent.fourcot@wifirst.fr>
    Signed-off-by: Brian Baboch <brian.baboch@wifirst.fr>
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 9415d375d852 ("rtnetlink: Don't ignore IFLA_TARGET_NETNSID when ifname is specified in rtnl_dellink().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/sclp: Prevent release of buffer in I/O [+ + +]
Author: Peter Oberparleiter <oberpar@linux.ibm.com>
Date:   Thu Jun 20 14:20:27 2024 +0200

    s390/sclp: Prevent release of buffer in I/O
    
    [ Upstream commit bf365071ea92b9579d5a272679b74052a5643e35 ]
    
    When a task waiting for completion of a Store Data operation is
    interrupted, an attempt is made to halt this operation. If this attempt
    fails due to a hardware or firmware problem, there is a chance that the
    SCLP facility might store data into buffers referenced by the original
    operation at a later time.
    
    Handle this situation by not releasing the referenced data buffers if
    the halt attempt fails. For current use cases, this might result in a
    leak of few pages of memory in case of a rare hardware/firmware
    malfunction.
    
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
saa7134: Unchecked i2c_transfer function result fixed [+ + +]
Author: Aleksandr Burakov <a.burakov@rosalinux.ru>
Date:   Fri Feb 16 15:40:06 2024 +0300

    saa7134: Unchecked i2c_transfer function result fixed
    
    [ Upstream commit 9d8683b3fd93f0e378f24dc3d9604e5d7d3e0a17 ]
    
    Return value of function 'i2c_transfer' is not checked that
    may cause undefined behaviour.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 2cf36ac44730 ("[PATCH] v4l: 656: added support for the following cards")
    Signed-off-by: Aleksandr Burakov <a.burakov@rosalinux.ru>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/cputime: Fix mul_u64_u64_div_u64() precision for cputime [+ + +]
Author: Zheng Zucheng <zhengzucheng@huawei.com>
Date:   Fri Jul 26 02:32:35 2024 +0000

    sched/cputime: Fix mul_u64_u64_div_u64() precision for cputime
    
    commit 77baa5bafcbe1b2a15ef9c37232c21279c95481c upstream.
    
    In extreme test scenarios:
    the 14th field utime in /proc/xx/stat is greater than sum_exec_runtime,
    utime = 18446744073709518790 ns, rtime = 135989749728000 ns
    
    In cputime_adjust() process, stime is greater than rtime due to
    mul_u64_u64_div_u64() precision problem.
    before call mul_u64_u64_div_u64(),
    stime = 175136586720000, rtime = 135989749728000, utime = 1416780000.
    after call mul_u64_u64_div_u64(),
    stime = 135989949653530
    
    unsigned reversion occurs because rtime is less than stime.
    utime = rtime - stime = 135989749728000 - 135989949653530
                          = -199925530
                          = (u64)18446744073709518790
    
    Trigger condition:
      1). User task run in kernel mode most of time
      2). ARM64 architecture
      3). TICK_CPU_ACCOUNTING=y
          CONFIG_VIRT_CPU_ACCOUNTING_NATIVE is not set
    
    Fix mul_u64_u64_div_u64() conversion precision by reset stime to rtime
    
    Fixes: 3dc167ba5729 ("sched/cputime: Improve cputime_adjust()")
    Signed-off-by: Zheng Zucheng <zhengzucheng@huawei.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: <stable@vger.kernel.org>
    Link: https://lkml.kernel.org/r/20240726023235.217771-1-zhengzucheng@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/fair: set_load_weight() must also call reweight_task() for SCHED_IDLE tasks [+ + +]
Author: Tejun Heo <tj@kernel.org>
Date:   Tue Jun 25 15:29:58 2024 -1000

    sched/fair: set_load_weight() must also call reweight_task() for SCHED_IDLE tasks
    
    commit d329605287020c3d1c3b0dadc63d8208e7251382 upstream.
    
    When a task's weight is being changed, set_load_weight() is called with
    @update_load set. As weight changes aren't trivial for the fair class,
    set_load_weight() calls fair.c::reweight_task() for fair class tasks.
    
    However, set_load_weight() first tests task_has_idle_policy() on entry and
    skips calling reweight_task() for SCHED_IDLE tasks. This is buggy as
    SCHED_IDLE tasks are just fair tasks with a very low weight and they would
    incorrectly skip load, vlag and position updates.
    
    Fix it by updating reweight_task() to take struct load_weight as idle weight
    can't be expressed with prio and making set_load_weight() call
    reweight_task() for SCHED_IDLE tasks too when @update_load is set.
    
    Fixes: 9059393e4ec1 ("sched/fair: Use reweight_entity() for set_user_nice()")
    Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org # v4.15+
    Link: http://lkml.kernel.org/r/20240624102331.GI31592@noisy.programming.kicks-ass.net
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched/fair: Use all little CPUs for CPU-bound workloads [+ + +]
Author: Pierre Gondois <pierre.gondois@arm.com>
Date:   Wed Dec 6 10:00:43 2023 +0100

    sched/fair: Use all little CPUs for CPU-bound workloads
    
    commit 3af7524b14198f5159a86692d57a9f28ec9375ce upstream.
    
    Running N CPU-bound tasks on an N CPUs platform:
    
    - with asymmetric CPU capacity
    
    - not being a DynamIq system (i.e. having a PKG level sched domain
      without the SD_SHARE_PKG_RESOURCES flag set)
    
    .. might result in a task placement where two tasks run on a big CPU
    and none on a little CPU. This placement could be more optimal by
    using all CPUs.
    
    Testing platform:
    
      Juno-r2:
        - 2 big CPUs (1-2), maximum capacity of 1024
        - 4 little CPUs (0,3-5), maximum capacity of 383
    
    Testing workload ([1]):
    
      Spawn 6 CPU-bound tasks. During the first 100ms (step 1), each tasks
      is affine to a CPU, except for:
    
        - one little CPU which is left idle.
        - one big CPU which has 2 tasks affine.
    
      After the 100ms (step 2), remove the cpumask affinity.
    
    Behavior before the patch:
    
      During step 2, the load balancer running from the idle CPU tags sched
      domains as:
    
      - little CPUs: 'group_has_spare'. Cf. group_has_capacity() and
        group_is_overloaded(), 3 CPU-bound tasks run on a 4 CPUs
        sched-domain, and the idle CPU provides enough spare capacity
        regarding the imbalance_pct
    
      - big CPUs: 'group_overloaded'. Indeed, 3 tasks run on a 2 CPUs
        sched-domain, so the following path is used:
    
          group_is_overloaded()
          \-if (sgs->sum_nr_running <= sgs->group_weight) return true;
    
        The following path which would change the migration type to
        'migrate_task' is not taken:
    
          calculate_imbalance()
          \-if (env->idle != CPU_NOT_IDLE && env->imbalance == 0)
    
        as the local group has some spare capacity, so the imbalance
        is not 0.
    
      The migration type requested is 'migrate_util' and the busiest
      runqueue is the big CPU's runqueue having 2 tasks (each having a
      utilization of 512). The idle little CPU cannot pull one of these
      task as its capacity is too small for the task. The following path
      is used:
    
       detach_tasks()
       \-case migrate_util:
         \-if (util > env->imbalance) goto next;
    
    After the patch:
    
    As the number of failed balancing attempts grows (with
    'nr_balance_failed'), progressively make it easier to migrate
    a big task to the idling little CPU. A similar mechanism is
    used for the 'migrate_load' migration type.
    
    Improvement:
    
    Running the testing workload [1] with the step 2 representing
    a ~10s load for a big CPU:
    
      Before patch: ~19.3s
      After patch:  ~18s (-6.7%)
    
    Similar issue reported at:
    
      https://lore.kernel.org/lkml/20230716014125.139577-1-qyousef@layalina.io/
    
    Suggested-by: Vincent Guittot <vincent.guittot@linaro.org>
    Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
    Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Acked-by: Qais Yousef <qyousef@layalina.io>
    Link: https://lore.kernel.org/r/20231206090043.634697-1-pierre.gondois@arm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/smt: Fix unbalance sched_smt_present dec/inc [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Wed Jul 3 11:16:08 2024 +0800

    sched/smt: Fix unbalance sched_smt_present dec/inc
    
    commit e22f910a26cc2a3ac9c66b8e935ef2a7dd881117 upstream.
    
    I got the following warn report while doing stress test:
    
    jump label: negative count!
    WARNING: CPU: 3 PID: 38 at kernel/jump_label.c:263 static_key_slow_try_dec+0x9d/0xb0
    Call Trace:
     <TASK>
     __static_key_slow_dec_cpuslocked+0x16/0x70
     sched_cpu_deactivate+0x26e/0x2a0
     cpuhp_invoke_callback+0x3ad/0x10d0
     cpuhp_thread_fun+0x3f5/0x680
     smpboot_thread_fn+0x56d/0x8d0
     kthread+0x309/0x400
     ret_from_fork+0x41/0x70
     ret_from_fork_asm+0x1b/0x30
     </TASK>
    
    Because when cpuset_cpu_inactive() fails in sched_cpu_deactivate(),
    the cpu offline failed, but sched_smt_present is decremented before
    calling sched_cpu_deactivate(), it leads to unbalanced dec/inc, so
    fix it by incrementing sched_smt_present in the error path.
    
    Fixes: c5511d03ec09 ("sched/smt: Make sched_smt_present track topology")
    Cc: stable@kernel.org
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Chen Yu <yu.c.chen@intel.com>
    Reviewed-by: Tim Chen <tim.c.chen@linux.intel.com>
    Link: https://lore.kernel.org/r/20240703031610.587047-3-yangyingliang@huaweicloud.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched/smt: Introduce sched_smt_present_inc/dec() helper [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Wed Jul 3 11:16:07 2024 +0800

    sched/smt: Introduce sched_smt_present_inc/dec() helper
    
    commit 31b164e2e4af84d08d2498083676e7eeaa102493 upstream.
    
    Introduce sched_smt_present_inc/dec() helper, so it can be called
    in normal or error path simply. No functional changed.
    
    Cc: stable@kernel.org
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240703031610.587047-2-yangyingliang@huaweicloud.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched: act_ct: take care of padding in struct zones_ht_key [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jul 25 09:27:45 2024 +0000

    sched: act_ct: take care of padding in struct zones_ht_key
    
    [ Upstream commit 2191a54f63225b548fd8346be3611c3219a24738 ]
    
    Blamed commit increased lookup key size from 2 bytes to 16 bytes,
    because zones_ht_key got a struct net pointer.
    
    Make sure rhashtable_lookup() is not using the padding bytes
    which are not initialized.
    
     BUG: KMSAN: uninit-value in rht_ptr_rcu include/linux/rhashtable.h:376 [inline]
     BUG: KMSAN: uninit-value in __rhashtable_lookup include/linux/rhashtable.h:607 [inline]
     BUG: KMSAN: uninit-value in rhashtable_lookup include/linux/rhashtable.h:646 [inline]
     BUG: KMSAN: uninit-value in rhashtable_lookup_fast include/linux/rhashtable.h:672 [inline]
     BUG: KMSAN: uninit-value in tcf_ct_flow_table_get+0x611/0x2260 net/sched/act_ct.c:329
      rht_ptr_rcu include/linux/rhashtable.h:376 [inline]
      __rhashtable_lookup include/linux/rhashtable.h:607 [inline]
      rhashtable_lookup include/linux/rhashtable.h:646 [inline]
      rhashtable_lookup_fast include/linux/rhashtable.h:672 [inline]
      tcf_ct_flow_table_get+0x611/0x2260 net/sched/act_ct.c:329
      tcf_ct_init+0xa67/0x2890 net/sched/act_ct.c:1408
      tcf_action_init_1+0x6cc/0xb30 net/sched/act_api.c:1425
      tcf_action_init+0x458/0xf00 net/sched/act_api.c:1488
      tcf_action_add net/sched/act_api.c:2061 [inline]
      tc_ctl_action+0x4be/0x19d0 net/sched/act_api.c:2118
      rtnetlink_rcv_msg+0x12fc/0x1410 net/core/rtnetlink.c:6647
      netlink_rcv_skb+0x375/0x650 net/netlink/af_netlink.c:2550
      rtnetlink_rcv+0x34/0x40 net/core/rtnetlink.c:6665
      netlink_unicast_kernel net/netlink/af_netlink.c:1331 [inline]
      netlink_unicast+0xf52/0x1260 net/netlink/af_netlink.c:1357
      netlink_sendmsg+0x10da/0x11e0 net/netlink/af_netlink.c:1901
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:745
      ____sys_sendmsg+0x877/0xb60 net/socket.c:2597
      ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2651
      __sys_sendmsg net/socket.c:2680 [inline]
      __do_sys_sendmsg net/socket.c:2689 [inline]
      __se_sys_sendmsg net/socket.c:2687 [inline]
      __x64_sys_sendmsg+0x307/0x4a0 net/socket.c:2687
      x64_sys_call+0x2dd6/0x3c10 arch/x86/include/generated/asm/syscalls_64.h:47
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Local variable key created at:
      tcf_ct_flow_table_get+0x4a/0x2260 net/sched/act_ct.c:324
      tcf_ct_init+0xa67/0x2890 net/sched/act_ct.c:1408
    
    Fixes: 88c67aeb1407 ("sched: act_ct: add netns into the key of tcf_ct_flow_table")
    Reported-by: syzbot+1b5e4e187cc586d05ea0@syzkaller.appspotmail.com
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: mpi3mr: Avoid IOMMU page faults on REPORT ZONES [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Fri Jul 19 16:39:11 2024 +0900

    scsi: mpi3mr: Avoid IOMMU page faults on REPORT ZONES
    
    commit 1abc900ddda8ad2ef739fedf498d415655b6c3b8 upstream.
    
    Some firmware versions of the 9600 series SAS HBA byte-swap the REPORT
    ZONES command reply buffer from ATA-ZAC devices by directly accessing the
    buffer in the host memory. This does not respect the default command DMA
    direction and causes IOMMU page faults on architectures with an IOMMU
    enforcing write-only mappings for DMA_FROM_DEVICE DMA direction (e.g. AMD
    hosts), leading to the device capacity to be dropped to 0:
    
    scsi 18:0:58:0: Direct-Access-ZBC ATA      WDC  WSH722626AL W930 PQ: 0 ANSI: 7
    scsi 18:0:58:0: Power-on or device reset occurred
    sd 18:0:58:0: Attached scsi generic sg9 type 20
    sd 18:0:58:0: [sdj] Host-managed zoned block device
    mpi3mr 0000:c1:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0001 address=0xfec0c400 flags=0x0050]
    mpi3mr 0000:c1:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0001 address=0xfec0c500 flags=0x0050]
    sd 18:0:58:0: [sdj] REPORT ZONES start lba 0 failed
    sd 18:0:58:0: [sdj] REPORT ZONES: Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK
    sd 18:0:58:0: [sdj] 0 4096-byte logical blocks: (0 B/0 B)
    sd 18:0:58:0: [sdj] Write Protect is off
    sd 18:0:58:0: [sdj] Mode Sense: 6b 00 10 08
    sd 18:0:58:0: [sdj] Write cache: enabled, read cache: enabled, supports DPO and FUA
    sd 18:0:58:0: [sdj] Attached SCSI disk
    
    Avoid this issue by always mapping the buffer of REPORT ZONES commands
    using DMA_BIDIRECTIONAL, that is, using a read-write IOMMU mapping.
    
    Suggested-by: Christoph Hellwig <hch@lst.de>
    Fixes: 023ab2a9b4ed ("scsi: mpi3mr: Add support for queue command processing")
    Cc: stable@vger.kernel.org
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20240719073913.179559-2-dlemoal@kernel.org
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: mpt3sas: Avoid IOMMU page faults on REPORT ZONES [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Fri Jul 19 16:39:12 2024 +0900

    scsi: mpt3sas: Avoid IOMMU page faults on REPORT ZONES
    
    commit 82dbb57ac8d06dfe8227ba9ab11a49de2b475ae5 upstream.
    
    Some firmware versions of the 9600 series SAS HBA byte-swap the REPORT
    ZONES command reply buffer from ATA-ZAC devices by directly accessing the
    buffer in the host memory. This does not respect the default command DMA
    direction and causes IOMMU page faults on architectures with an IOMMU
    enforcing write-only mappings for DMA_FROM_DEVICE DMA driection (e.g. AMD
    hosts).
    
    scsi 18:0:0:0: Direct-Access-ZBC ATA      WDC  WSH722020AL W870 PQ: 0 ANSI: 6
    scsi 18:0:0:0: SATA: handle(0x0027), sas_addr(0x300062b2083e7c40), phy(0), device_name(0x5000cca29dc35e11)
    scsi 18:0:0:0: enclosure logical id (0x300062b208097c40), slot(0)
    scsi 18:0:0:0: enclosure level(0x0000), connector name( C0.0)
    scsi 18:0:0:0: atapi(n), ncq(y), asyn_notify(n), smart(y), fua(y), sw_preserve(y)
    scsi 18:0:0:0: qdepth(32), tagged(1), scsi_level(7), cmd_que(1)
    sd 18:0:0:0: Attached scsi generic sg2 type 20
    sd 18:0:0:0: [sdc] Host-managed zoned block device
    mpt3sas 0000:41:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0021 address=0xfff9b200 flags=0x0050]
    mpt3sas 0000:41:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0021 address=0xfff9b300 flags=0x0050]
    mpt3sas_cm0: mpt3sas_ctl_pre_reset_handler: Releasing the trace buffer due to adapter reset.
    mpt3sas_cm0 fault info from func: mpt3sas_base_make_ioc_ready
    mpt3sas_cm0: fault_state(0x2666)!
    mpt3sas_cm0: sending diag reset !!
    mpt3sas_cm0: diag reset: SUCCESS
    sd 18:0:0:0: [sdc] REPORT ZONES start lba 0 failed
    sd 18:0:0:0: [sdc] REPORT ZONES: Result: hostbyte=DID_RESET driverbyte=DRIVER_OK
    sd 18:0:0:0: [sdc] 0 4096-byte logical blocks: (0 B/0 B)
    
    Avoid such issue by always mapping the buffer of REPORT ZONES commands
    using DMA_BIDIRECTIONAL (read+write IOMMU mapping). This is done by
    introducing the helper function _base_scsi_dma_map() and using this helper
    in _base_build_sg_scmd() and _base_build_sg_scmd_ieee() instead of calling
    directly scsi_dma_map().
    
    Fixes: 471ef9d4e498 ("mpt3sas: Build MPI SGL LIST on GEN2 HBAs and IEEE SGL LIST on GEN3 HBAs")
    Cc: stable@vger.kernel.org
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20240719073913.179559-3-dlemoal@kernel.org
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Complete command early within lock [+ + +]
Author: Shreyas Deodhar <sdeodhar@marvell.com>
Date:   Wed Jul 10 22:40:52 2024 +0530

    scsi: qla2xxx: Complete command early within lock
    
    commit 4475afa2646d3fec176fc4d011d3879b26cb26e3 upstream.
    
    A crash was observed while performing NPIV and FW reset,
    
     BUG: kernel NULL pointer dereference, address: 000000000000001c
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 0 P4D 0
     Oops: 0000 1 PREEMPT_RT SMP NOPTI
     RIP: 0010:dma_direct_unmap_sg+0x51/0x1e0
     RSP: 0018:ffffc90026f47b88 EFLAGS: 00010246
     RAX: 0000000000000000 RBX: 0000000000000021 RCX: 0000000000000002
     RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff8881041130d0
     RBP: ffff8881041130d0 R08: 0000000000000000 R09: 0000000000000034
     R10: ffffc90026f47c48 R11: 0000000000000031 R12: 0000000000000000
     R13: 0000000000000000 R14: ffff8881565e4a20 R15: 0000000000000000
     FS: 00007f4c69ed3d00(0000) GS:ffff889faac80000(0000) knlGS:0000000000000000
     CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 000000000000001c CR3: 0000000288a50002 CR4: 00000000007706e0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Call Trace:
     <TASK>
     ? __die_body+0x1a/0x60
     ? page_fault_oops+0x16f/0x4a0
     ? do_user_addr_fault+0x174/0x7f0
     ? exc_page_fault+0x69/0x1a0
     ? asm_exc_page_fault+0x22/0x30
     ? dma_direct_unmap_sg+0x51/0x1e0
     ? preempt_count_sub+0x96/0xe0
     qla2xxx_qpair_sp_free_dma+0x29f/0x3b0 [qla2xxx]
     qla2xxx_qpair_sp_compl+0x60/0x80 [qla2xxx]
     __qla2x00_abort_all_cmds+0xa2/0x450 [qla2xxx]
    
    The command completion was done early while aborting the commands in driver
    unload path but outside lock to avoid the WARN_ON condition of performing
    dma_free_attr within the lock. However this caused race condition while
    command completion via multiple paths causing system crash.
    
    Hence complete the command early in unload path but within the lock to
    avoid race condition.
    
    Fixes: 0367076b0817 ("scsi: qla2xxx: Perform lockless command completion in abort path")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-7-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: During vport delete send async logout explicitly [+ + +]
Author: Manish Rangankar <mrangankar@marvell.com>
Date:   Wed Jul 10 22:40:53 2024 +0530

    scsi: qla2xxx: During vport delete send async logout explicitly
    
    commit 76f480d7c717368f29a3870f7d64471ce0ff8fb2 upstream.
    
    During vport delete, it is observed that during unload we hit a crash
    because of stale entries in outstanding command array.  For all these stale
    I/O entries, eh_abort was issued and aborted (fast_fail_io = 2009h) but
    I/Os could not complete while vport delete is in process of deleting.
    
      BUG: kernel NULL pointer dereference, address: 000000000000001c
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 0 P4D 0
      Oops: 0000 [#1] PREEMPT SMP NOPTI
      Workqueue: qla2xxx_wq qla_do_work [qla2xxx]
      RIP: 0010:dma_direct_unmap_sg+0x51/0x1e0
      RSP: 0018:ffffa1e1e150fc68 EFLAGS: 00010046
      RAX: 0000000000000000 RBX: 0000000000000021 RCX: 0000000000000001
      RDX: 0000000000000021 RSI: 0000000000000000 RDI: ffff8ce208a7a0d0
      RBP: ffff8ce208a7a0d0 R08: 0000000000000000 R09: ffff8ce378aac9c8
      R10: ffff8ce378aac8a0 R11: ffffa1e1e150f9d8 R12: 0000000000000000
      R13: 0000000000000000 R14: ffff8ce378aac9c8 R15: 0000000000000000
      FS:  0000000000000000(0000) GS:ffff8d217f000000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 000000000000001c CR3: 0000002089acc000 CR4: 0000000000350ee0
      Call Trace:
      <TASK>
      qla2xxx_qpair_sp_free_dma+0x417/0x4e0
      ? qla2xxx_qpair_sp_compl+0x10d/0x1a0
      ? qla2x00_status_entry+0x768/0x2830
      ? newidle_balance+0x2f0/0x430
      ? dequeue_entity+0x100/0x3c0
      ? qla24xx_process_response_queue+0x6a1/0x19e0
      ? __schedule+0x2d5/0x1140
      ? qla_do_work+0x47/0x60
      ? process_one_work+0x267/0x440
      ? process_one_work+0x440/0x440
      ? worker_thread+0x2d/0x3d0
      ? process_one_work+0x440/0x440
      ? kthread+0x156/0x180
      ? set_kthread_struct+0x50/0x50
      ? ret_from_fork+0x22/0x30
      </TASK>
    
    Send out async logout explicitly for all the ports during vport delete.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Manish Rangankar <mrangankar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-8-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix flash read failure [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Wed Jul 10 22:40:51 2024 +0530

    scsi: qla2xxx: Fix flash read failure
    
    commit 29e222085d8907ccff18ecd931bdd4c6b1f11b92 upstream.
    
    Link up failure is observed as a result of flash read failure.  Current
    code does not check flash read return code where it relies on FW checksum
    to detect the problem.
    
    Add check of flash read failure to detect the problem sooner.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/all/202406210815.rPDRDMBi-lkp@intel.com/
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-6-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix for possible memory corruption [+ + +]
Author: Shreyas Deodhar <sdeodhar@marvell.com>
Date:   Wed Jul 10 22:40:49 2024 +0530

    scsi: qla2xxx: Fix for possible memory corruption
    
    commit c03d740152f78e86945a75b2ad541bf972fab92a upstream.
    
    Init Control Block is dereferenced incorrectly.  Correctly dereference ICB
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-4-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix optrom version displayed in FDMI [+ + +]
Author: Shreyas Deodhar <sdeodhar@marvell.com>
Date:   Wed Jul 10 22:40:54 2024 +0530

    scsi: qla2xxx: Fix optrom version displayed in FDMI
    
    commit 348744f27a35e087acc9378bf53537fbfb072775 upstream.
    
    Bios version was popluated for FDMI response. Systems with EFI would show
    optrom version as 0.  EFI version is populated here and BIOS version is
    already displayed under FDMI_HBA_BOOT_BIOS_NAME.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-9-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Return ENOBUFS if sg_cnt is more than one for ELS cmds [+ + +]
Author: Saurav Kashyap <skashyap@marvell.com>
Date:   Wed Jul 10 22:40:50 2024 +0530

    scsi: qla2xxx: Return ENOBUFS if sg_cnt is more than one for ELS cmds
    
    commit ce2065c4cc4f05635413f63f6dc038d7d4842e31 upstream.
    
    Firmware only supports single DSDs in ELS Pass-through IOCB (0x53h), sg cnt
    is decided by the SCSI ML. User is not aware of the cause of an acutal
    error.
    
    Return the appropriate return code that will be decoded by API and
    application and proper error message will be displayed to user.
    
    Fixes: 6e98016ca077 ("[SCSI] qla2xxx: Re-organized BSG interface specific code.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Saurav Kashyap <skashyap@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-5-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Unable to act on RSCN for port online [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Wed Jul 10 22:40:47 2024 +0530

    scsi: qla2xxx: Unable to act on RSCN for port online
    
    commit c3d98b12eef8db436e32f1a8c5478be57dc15621 upstream.
    
    The device does not come online when the target port is online. There were
    multiple RSCNs indicating multiple devices were affected. Driver is in the
    process of finishing a fabric scan. A new RSCN (device up) arrived at the
    tail end of the last fabric scan. Driver mistakenly thinks the new RSCN is
    being taken care of by the previous fabric scan, where this notification is
    cleared and not acted on. The laser needs to be blinked again to get the
    device to show up.
    
    To prevent driver from accidentally clearing the RSCN notification, each
    RSCN is given a generation value.  A fabric scan will scan for that
    generation(s).  Any new RSCN arrive after the scan start will have a new
    generation value. This will trigger another scan to get latest data. The
    RSCN notification flag will be cleared when the scan is associate to that
    generation.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202406210538.w875N70K-lkp@intel.com/
    Fixes: bb2ca6b3f09a ("scsi: qla2xxx: Relogin during fabric disturbance")
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-2-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Use QP lock to search for bsg [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Wed Jul 10 22:40:56 2024 +0530

    scsi: qla2xxx: Use QP lock to search for bsg
    
    commit c449b4198701d828e40d60a2abd30970b74a1d75 upstream.
    
    On bsg timeout, hardware_lock is used as part of search for the srb.
    Instead, qpair lock should be used to iterate through different qpair.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-11-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: validate nvme_local_port correctly [+ + +]
Author: Nilesh Javali <njavali@marvell.com>
Date:   Wed Jul 10 22:40:48 2024 +0530

    scsi: qla2xxx: validate nvme_local_port correctly
    
    commit eb1d4ce2609584eeb7694866f34d4b213caa3af9 upstream.
    
    The driver load failed with error message,
    
    qla2xxx [0000:04:00.0]-ffff:0: register_localport failed: ret=ffffffef
    
    and with a kernel crash,
    
            BUG: unable to handle kernel NULL pointer dereference at 0000000000000070
            Workqueue: events_unbound qla_register_fcport_fn [qla2xxx]
            RIP: 0010:nvme_fc_register_remoteport+0x16/0x430 [nvme_fc]
            RSP: 0018:ffffaaa040eb3d98 EFLAGS: 00010282
            RAX: 0000000000000000 RBX: ffff9dfb46b78c00 RCX: 0000000000000000
            RDX: ffff9dfb46b78da8 RSI: ffffaaa040eb3e08 RDI: 0000000000000000
            RBP: ffff9dfb612a0a58 R08: ffffffffaf1d6270 R09: 3a34303a30303030
            R10: 34303a303030305b R11: 2078787832616c71 R12: ffff9dfb46b78dd4
            R13: ffff9dfb46b78c24 R14: ffff9dfb41525300 R15: ffff9dfb46b78da8
            FS:  0000000000000000(0000) GS:ffff9dfc67c00000(0000) knlGS:0000000000000000
            CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
            CR2: 0000000000000070 CR3: 000000018da10004 CR4: 00000000000206f0
            Call Trace:
            qla_nvme_register_remote+0xeb/0x1f0 [qla2xxx]
            ? qla2x00_dfs_create_rport+0x231/0x270 [qla2xxx]
            qla2x00_update_fcport+0x2a1/0x3c0 [qla2xxx]
            qla_register_fcport_fn+0x54/0xc0 [qla2xxx]
    
    Exit the qla_nvme_register_remote() function when qla_nvme_register_hba()
    fails and correctly validate nvme_local_port.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-3-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: ufs: core: Fix hba->last_dme_cmd_tstamp timestamp updating logic [+ + +]
Author: Vamshi Gajjela <vamshigajjela@google.com>
Date:   Wed Jul 24 19:21:26 2024 +0530

    scsi: ufs: core: Fix hba->last_dme_cmd_tstamp timestamp updating logic
    
    commit ab9fd06cb8f0db0854291833fc40c789e43a361f upstream.
    
    The ufshcd_add_delay_before_dme_cmd() always introduces a delay of
    MIN_DELAY_BEFORE_DME_CMDS_US between DME commands even when it's not
    required. The delay is added when the UFS host controller supplies the
    quirk UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS.
    
    Fix the logic to update hba->last_dme_cmd_tstamp to ensure subsequent DME
    commands have the correct delay in the range of 0 to
    MIN_DELAY_BEFORE_DME_CMDS_US.
    
    Update the timestamp at the end of the function to ensure it captures the
    latest time after any necessary delay has been applied.
    
    Signed-off-by: Vamshi Gajjela <vamshigajjela@google.com>
    Link: https://lore.kernel.org/r/20240724135126.1786126-1-vamshigajjela@google.com
    Fixes: cad2e03d8607 ("ufs: add support to allow non standard behaviours (quirks)")
    Cc: stable@vger.kernel.org
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sctp: Fix null-ptr-deref in reuseport_add_sock(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Wed Jul 31 16:46:24 2024 -0700

    sctp: Fix null-ptr-deref in reuseport_add_sock().
    
    [ Upstream commit 9ab0faa7f9ffe31296dbb9bbe6f76c72c14eea18 ]
    
    syzbot reported a null-ptr-deref while accessing sk2->sk_reuseport_cb in
    reuseport_add_sock(). [0]
    
    The repro first creates a listener with SO_REUSEPORT.  Then, it creates
    another listener on the same port and concurrently closes the first
    listener.
    
    The second listen() calls reuseport_add_sock() with the first listener as
    sk2, where sk2->sk_reuseport_cb is not expected to be cleared concurrently,
    but the close() does clear it by reuseport_detach_sock().
    
    The problem is SCTP does not properly synchronise reuseport_alloc(),
    reuseport_add_sock(), and reuseport_detach_sock().
    
    The caller of reuseport_alloc() and reuseport_{add,detach}_sock() must
    provide synchronisation for sockets that are classified into the same
    reuseport group.
    
    Otherwise, such sockets form multiple identical reuseport groups, and
    all groups except one would be silently dead.
    
      1. Two sockets call listen() concurrently
      2. No socket in the same group found in sctp_ep_hashtable[]
      3. Two sockets call reuseport_alloc() and form two reuseport groups
      4. Only one group hit first in __sctp_rcv_lookup_endpoint() receives
          incoming packets
    
    Also, the reported null-ptr-deref could occur.
    
    TCP/UDP guarantees that would not happen by holding the hash bucket lock.
    
    Let's apply the locking strategy to __sctp_hash_endpoint() and
    __sctp_unhash_endpoint().
    
    [0]:
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000002: 0000 [#1] PREEMPT SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
    CPU: 1 UID: 0 PID: 10230 Comm: syz-executor119 Not tainted 6.10.0-syzkaller-12585-g301927d2d2eb #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/27/2024
    RIP: 0010:reuseport_add_sock+0x27e/0x5e0 net/core/sock_reuseport.c:350
    Code: 00 0f b7 5d 00 bf 01 00 00 00 89 de e8 1b a4 ff f7 83 fb 01 0f 85 a3 01 00 00 e8 6d a0 ff f7 49 8d 7e 12 48 89 f8 48 c1 e8 03 <42> 0f b6 04 28 84 c0 0f 85 4b 02 00 00 41 0f b7 5e 12 49 8d 7e 14
    RSP: 0018:ffffc9000b947c98 EFLAGS: 00010202
    RAX: 0000000000000002 RBX: ffff8880252ddf98 RCX: ffff888079478000
    RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000012
    RBP: 0000000000000001 R08: ffffffff8993e18d R09: 1ffffffff1fef385
    R10: dffffc0000000000 R11: fffffbfff1fef386 R12: ffff8880252ddac0
    R13: dffffc0000000000 R14: 0000000000000000 R15: 0000000000000000
    FS:  00007f24e45b96c0(0000) GS:ffff8880b9300000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ffcced5f7b8 CR3: 00000000241be000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     __sctp_hash_endpoint net/sctp/input.c:762 [inline]
     sctp_hash_endpoint+0x52a/0x600 net/sctp/input.c:790
     sctp_listen_start net/sctp/socket.c:8570 [inline]
     sctp_inet_listen+0x767/0xa20 net/sctp/socket.c:8625
     __sys_listen_socket net/socket.c:1883 [inline]
     __sys_listen+0x1b7/0x230 net/socket.c:1894
     __do_sys_listen net/socket.c:1902 [inline]
     __se_sys_listen net/socket.c:1900 [inline]
     __x64_sys_listen+0x5a/0x70 net/socket.c:1900
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f24e46039b9
    Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 91 1a 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f24e45b9228 EFLAGS: 00000246 ORIG_RAX: 0000000000000032
    RAX: ffffffffffffffda RBX: 00007f24e468e428 RCX: 00007f24e46039b9
    RDX: 00007f24e46039b9 RSI: 0000000000000003 RDI: 0000000000000004
    RBP: 00007f24e468e420 R08: 00007f24e45b96c0 R09: 00007f24e45b96c0
    R10: 00007f24e45b96c0 R11: 0000000000000246 R12: 00007f24e468e42c
    R13: 00007f24e465a5dc R14: 0020000000000001 R15: 00007ffcced5f7d8
     </TASK>
    Modules linked in:
    
    Fixes: 6ba845740267 ("sctp: process sk_reuseport in sctp_get_port_local")
    Reported-by: syzbot+e6979a5d2f10ecb700e4@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=e6979a5d2f10ecb700e4
    Tested-by: syzbot+e6979a5d2f10ecb700e4@syzkaller.appspotmail.com
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/20240731234624.94055-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sctp: move hlist_node and hashent out of sctp_ep_common [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Tue Dec 21 16:40:30 2021 -0500

    sctp: move hlist_node and hashent out of sctp_ep_common
    
    [ Upstream commit 3d3b2f57d4447e6e9f4096ad01d0e4129f7bc7e9 ]
    
    Struct sctp_ep_common is included in both asoc and ep, but hlist_node
    and hashent are only needed by ep after asoc_hashtable was dropped by
    Commit b5eff7128366 ("sctp: drop the old assoc hashtable of sctp").
    
    So it is better to move hlist_node and hashent from sctp_ep_common to
    sctp_endpoint, and it saves some space for each asoc.
    
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 9ab0faa7f9ff ("sctp: Fix null-ptr-deref in reuseport_add_sock().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/bpf: Check length of recv in test_sockmap [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Thu May 23 14:50:03 2024 +0800

    selftests/bpf: Check length of recv in test_sockmap
    
    [ Upstream commit de1b5ea789dc28066cc8dc634b6825bd6148f38b ]
    
    The value of recv in msg_loop may be negative, like EWOULDBLOCK, so it's
    necessary to check if it is positive before accumulating it to bytes_recvd.
    
    Fixes: 16962b2404ac ("bpf: sockmap, add selftests")
    Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Jakub Sitnicki <jakub@cloudflare.com>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/5172563f7c7b2a2e953cef02e89fc34664a7b190.1716446893.git.tanggeliang@kylinos.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Close fd in error path in drop_on_reuseport [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Tue Jul 9 17:16:19 2024 +0800

    selftests/bpf: Close fd in error path in drop_on_reuseport
    
    [ Upstream commit adae187ebedcd95d02f045bc37dfecfd5b29434b ]
    
    In the error path when update_lookup_map() fails in drop_on_reuseport in
    prog_tests/sk_lookup.c, "server1", the fd of server 1, should be closed.
    This patch fixes this by using "goto close_srv1" lable instead of "detach"
    to close "server1" in this case.
    
    Fixes: 0ab5539f8584 ("selftests/bpf: Tests for BPF_SK_LOOKUP attach point")
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
    Link: https://lore.kernel.org/r/86aed33b4b0ea3f04497c757845cff7e8e621a2d.1720515893.git.tanggeliang@kylinos.cn
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix prog numbers in test_sockmap [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Fri May 17 14:21:46 2024 +0800

    selftests/bpf: Fix prog numbers in test_sockmap
    
    [ Upstream commit 6c8d7598dfed759bf1d9d0322b4c2b42eb7252d8 ]
    
    bpf_prog5 and bpf_prog7 are removed from progs/test_sockmap_kern.h in
    commit d79a32129b21 ("bpf: Selftests, remove prints from sockmap tests"),
    now there are only 9 progs in it, not 11:
    
            SEC("sk_skb1")
            int bpf_prog1(struct __sk_buff *skb)
            SEC("sk_skb2")
            int bpf_prog2(struct __sk_buff *skb)
            SEC("sk_skb3")
            int bpf_prog3(struct __sk_buff *skb)
            SEC("sockops")
            int bpf_sockmap(struct bpf_sock_ops *skops)
            SEC("sk_msg1")
            int bpf_prog4(struct sk_msg_md *msg)
            SEC("sk_msg2")
            int bpf_prog6(struct sk_msg_md *msg)
            SEC("sk_msg3")
            int bpf_prog8(struct sk_msg_md *msg)
            SEC("sk_msg4")
            int bpf_prog9(struct sk_msg_md *msg)
            SEC("sk_msg5")
            int bpf_prog10(struct sk_msg_md *msg)
    
    This patch updates the array sizes of prog_fd[], prog_attach_type[] and
    prog_type[] from 11 to 9 accordingly.
    
    Fixes: d79a32129b21 ("bpf: Selftests, remove prints from sockmap tests")
    Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/9c10d9f974f07fcb354a43a8eca67acb2fafc587.1715926605.git.tanggeliang@kylinos.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix send_signal test with nested CONFIG_PARAVIRT [+ + +]
Author: Yonghong Song <yonghong.song@linux.dev>
Date:   Wed Jun 5 13:12:03 2024 -0700

    selftests/bpf: Fix send_signal test with nested CONFIG_PARAVIRT
    
    [ Upstream commit 7015843afcaf68c132784c89528dfddc0005e483 ]
    
    Alexei reported that send_signal test may fail with nested CONFIG_PARAVIRT
    configs. In this particular case, the base VM is AMD with 166 cpus, and I
    run selftests with regular qemu on top of that and indeed send_signal test
    failed. I also tried with an Intel box with 80 cpus and there is no issue.
    
    The main qemu command line includes:
    
      -enable-kvm -smp 16 -cpu host
    
    The failure log looks like:
    
      $ ./test_progs -t send_signal
      [   48.501588] watchdog: BUG: soft lockup - CPU#9 stuck for 26s! [test_progs:2225]
      [   48.503622] Modules linked in: bpf_testmod(O)
      [   48.503622] CPU: 9 PID: 2225 Comm: test_progs Tainted: G           O       6.9.0-08561-g2c1713a8f1c9-dirty #69
      [   48.507629] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org 04/01/2014
      [   48.511635] RIP: 0010:handle_softirqs+0x71/0x290
      [   48.511635] Code: [...] 10 0a 00 00 00 31 c0 65 66 89 05 d5 f4 fa 7e fb bb ff ff ff ff <49> c7 c2 cb
      [   48.518527] RSP: 0018:ffffc90000310fa0 EFLAGS: 00000246
      [   48.519579] RAX: 0000000000000000 RBX: 00000000ffffffff RCX: 00000000000006e0
      [   48.522526] RDX: 0000000000000006 RSI: ffff88810791ae80 RDI: 0000000000000000
      [   48.523587] RBP: ffffc90000fabc88 R08: 00000005a0af4f7f R09: 0000000000000000
      [   48.525525] R10: 0000000561d2f29c R11: 0000000000006534 R12: 0000000000000280
      [   48.528525] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
      [   48.528525] FS:  00007f2f2885cd00(0000) GS:ffff888237c40000(0000) knlGS:0000000000000000
      [   48.531600] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   48.535520] CR2: 00007f2f287059f0 CR3: 0000000106a28002 CR4: 00000000003706f0
      [   48.537538] Call Trace:
      [   48.537538]  <IRQ>
      [   48.537538]  ? watchdog_timer_fn+0x1cd/0x250
      [   48.539590]  ? lockup_detector_update_enable+0x50/0x50
      [   48.539590]  ? __hrtimer_run_queues+0xff/0x280
      [   48.542520]  ? hrtimer_interrupt+0x103/0x230
      [   48.544524]  ? __sysvec_apic_timer_interrupt+0x4f/0x140
      [   48.545522]  ? sysvec_apic_timer_interrupt+0x3a/0x90
      [   48.547612]  ? asm_sysvec_apic_timer_interrupt+0x1a/0x20
      [   48.547612]  ? handle_softirqs+0x71/0x290
      [   48.547612]  irq_exit_rcu+0x63/0x80
      [   48.551585]  sysvec_apic_timer_interrupt+0x75/0x90
      [   48.552521]  </IRQ>
      [   48.553529]  <TASK>
      [   48.553529]  asm_sysvec_apic_timer_interrupt+0x1a/0x20
      [   48.555609] RIP: 0010:finish_task_switch.isra.0+0x90/0x260
      [   48.556526] Code: [...] 9f 58 0a 00 00 48 85 db 0f 85 89 01 00 00 4c 89 ff e8 53 d9 bd 00 fb 66 90 <4d> 85 ed 74
      [   48.562524] RSP: 0018:ffffc90000fabd38 EFLAGS: 00000282
      [   48.563589] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff83385620
      [   48.563589] RDX: ffff888237c73ae4 RSI: 0000000000000000 RDI: ffff888237c6fd00
      [   48.568521] RBP: ffffc90000fabd68 R08: 0000000000000000 R09: 0000000000000000
      [   48.569528] R10: 0000000000000001 R11: 0000000000000000 R12: ffff8881009d0000
      [   48.573525] R13: ffff8881024e5400 R14: ffff88810791ae80 R15: ffff888237c6fd00
      [   48.575614]  ? finish_task_switch.isra.0+0x8d/0x260
      [   48.576523]  __schedule+0x364/0xac0
      [   48.577535]  schedule+0x2e/0x110
      [   48.578555]  pipe_read+0x301/0x400
      [   48.579589]  ? destroy_sched_domains_rcu+0x30/0x30
      [   48.579589]  vfs_read+0x2b3/0x2f0
      [   48.579589]  ksys_read+0x8b/0xc0
      [   48.583590]  do_syscall_64+0x3d/0xc0
      [   48.583590]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
      [   48.586525] RIP: 0033:0x7f2f28703fa1
      [   48.587592] Code: [...] 00 00 00 0f 1f 44 00 00 f3 0f 1e fa 80 3d c5 23 14 00 00 74 13 31 c0 0f 05 <48> 3d 00 f0
      [   48.593534] RSP: 002b:00007ffd90f8cf88 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
      [   48.595589] RAX: ffffffffffffffda RBX: 00007ffd90f8d5e8 RCX: 00007f2f28703fa1
      [   48.595589] RDX: 0000000000000001 RSI: 00007ffd90f8cfb0 RDI: 0000000000000006
      [   48.599592] RBP: 00007ffd90f8d2f0 R08: 0000000000000064 R09: 0000000000000000
      [   48.602527] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      [   48.603589] R13: 00007ffd90f8d608 R14: 00007f2f288d8000 R15: 0000000000f6bdb0
      [   48.605527]  </TASK>
    
    In the test, two processes are communicating through pipe. Further debugging
    with strace found that the above splat is triggered as read() syscall could
    not receive the data even if the corresponding write() syscall in another
    process successfully wrote data into the pipe.
    
    The failed subtest is "send_signal_perf". The corresponding perf event has
    sample_period 1 and config PERF_COUNT_SW_CPU_CLOCK. sample_period 1 means every
    overflow event will trigger a call to the BPF program. So I suspect this may
    overwhelm the system. So I increased the sample_period to 100,000 and the test
    passed. The sample_period 10,000 still has the test failed.
    
    In other parts of selftest, e.g., [1], sample_freq is used instead. So I
    decided to use sample_freq = 1,000 since the test can pass as well.
    
      [1] https://lore.kernel.org/bpf/20240604070700.3032142-1-song@kernel.org/
    
    Reported-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20240605201203.2603846-1-yonghong.song@linux.dev
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/landlock: Add cred_transfer test [+ + +]
Author: Mickaël Salaün <mic@digikod.net>
Date:   Wed Jul 24 16:54:26 2024 +0200

    selftests/landlock: Add cred_transfer test
    
    commit cc374782b6ca0fd634482391da977542443d3368 upstream.
    
    Check that keyctl(KEYCTL_SESSION_TO_PARENT) preserves the parent's
    restrictions.
    
    Fixes: e1199815b47b ("selftests/landlock: Add user space tests")
    Co-developed-by: Jann Horn <jannh@google.com>
    Signed-off-by: Jann Horn <jannh@google.com>
    Link: https://lore.kernel.org/r/20240724.Ood5aige9she@digikod.net
    Signed-off-by: Mickaël Salaün <mic@digikod.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/sigaltstack: Fix ppc64 GCC build [+ + +]
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Mon May 20 16:26:47 2024 +1000

    selftests/sigaltstack: Fix ppc64 GCC build
    
    commit 17c743b9da9e0d073ff19fd5313f521744514939 upstream.
    
    Building the sigaltstack test with GCC on 64-bit powerpc errors with:
    
      gcc -Wall     sas.c  -o /home/michael/linux/.build/kselftest/sigaltstack/sas
      In file included from sas.c:23:
      current_stack_pointer.h:22:2: error: #error "implement current_stack_pointer equivalent"
         22 | #error "implement current_stack_pointer equivalent"
            |  ^~~~~
      sas.c: In function ‘my_usr1’:
      sas.c:50:13: error: ‘sp’ undeclared (first use in this function); did you mean ‘p’?
         50 |         if (sp < (unsigned long)sstack ||
            |             ^~
    
    This happens because GCC doesn't define __ppc__ for 64-bit builds, only
    32-bit builds. Instead use __powerpc__ to detect powerpc builds, which
    is defined by clang and GCC for 64-bit and 32-bit builds.
    
    Fixes: 05107edc9101 ("selftests: sigaltstack: fix -Wuninitialized")
    Cc: stable@vger.kernel.org # v6.3+
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240520062647.688667-1-mpe@ellerman.id.au
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: forwarding: devlink_lib: Wait for udev events after reloading [+ + +]
Author: Amit Cohen <amcohen@nvidia.com>
Date:   Thu Jul 11 17:27:02 2024 +0200

    selftests: forwarding: devlink_lib: Wait for udev events after reloading
    
    [ Upstream commit f67a90a0c8f5b3d0acc18f10650d90fec44775f9 ]
    
    Lately, an additional locking was added by commit c0a40097f0bc
    ("drivers: core: synchronize really_probe() and dev_uevent()"). The
    locking protects dev_uevent() calling. This function is used to send
    messages from the kernel to user space. Uevent messages notify user space
    about changes in device states, such as when a device is added, removed,
    or changed. These messages are used by udev (or other similar user-space
    tools) to apply device-specific rules.
    
    After reloading devlink instance, udev events should be processed. This
    locking causes a short delay of udev events handling.
    
    One example for useful udev rule is renaming ports. 'forwading.config'
    can be configured to use names after udev rules are applied. Some tests run
    devlink_reload() and immediately use the updated names. This worked before
    the above mentioned commit was pushed, but now the delay of uevent messages
    causes that devlink_reload() returns before udev events are handled and
    tests fail.
    
    Adjust devlink_reload() to not assume that udev events are already
    processed when devlink reload is done, instead, wait for udev events to
    ensure they are processed before returning from the function.
    
    Without this patch:
    TESTS='rif_mac_profile' ./resource_scale.sh
    TEST: 'rif_mac_profile' 4                                           [ OK ]
    sysctl: cannot stat /proc/sys/net/ipv6/conf/swp1/disable_ipv6: No such file or directory
    sysctl: cannot stat /proc/sys/net/ipv6/conf/swp1/disable_ipv6: No such file or directory
    sysctl: cannot stat /proc/sys/net/ipv6/conf/swp2/disable_ipv6: No such file or directory
    sysctl: cannot stat /proc/sys/net/ipv6/conf/swp2/disable_ipv6: No such file or directory
    Cannot find device "swp1"
    Cannot find device "swp2"
    TEST: setup_wait_dev (: Interface swp1 does not come up.) [FAIL]
    
    With this patch:
    $ TESTS='rif_mac_profile' ./resource_scale.sh
    TEST: 'rif_mac_profile' 4                                           [ OK ]
    TEST: 'rif_mac_profile' overflow 5                                  [ OK ]
    
    This is relevant not only for this test.
    
    Fixes: bc7cbb1e9f4c ("selftests: forwarding: Add devlink_lib.sh")
    Signed-off-by: Amit Cohen <amcohen@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/89367666e04b38a8993027f1526801ca327ab96a.1720709333.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: mptcp: join: check backup support in signal endp [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Aug 9 11:10:32 2024 +0200

    selftests: mptcp: join: check backup support in signal endp
    
    commit f833470c27832136d4416d8fc55d658082af0989 upstream.
    
    Before the previous commit, 'signal' endpoints with the 'backup' flag
    were ignored when sending the MP_JOIN.
    
    The MPTCP Join selftest has then been modified to validate this case:
    the "single address, backup" test, is now validating the MP_JOIN with a
    backup flag as it is what we expect it to do with such name. The
    previous version has been kept, but renamed to "single address, switch
    to backup" to avoid confusions.
    
    The "single address with port, backup" test is also now validating the
    MPJ with a backup flag, which makes more sense than checking the switch
    to backup with an MP_PRIO.
    
    The "mpc backup both sides" test is now validating that the backup flag
    is also set in MP_JOIN from and to the addresses used in the initial
    subflow, using the special ID 0.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in mptcp_join.sh because 'run_tests' helper has been
      modified in multiple commits that are not in this version, e.g. commit
      e571fb09c893 ("selftests: mptcp: add speed env var") and commit
      ae7bd9ccecc3 ("selftests: mptcp: join: option to execute specific
      tests"). Adaptations have been made to use the old way, similar to
      what is done around.
      Also in this version, there is no "single address with port, backup"
      subtest. Same for "mpc backup both sides". ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: join: validate backup in MPJ [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Aug 9 11:10:03 2024 +0200

    selftests: mptcp: join: validate backup in MPJ
    
    commit 935ff5bb8a1cfcdf8e60c8f5c794d0bbbc234437 upstream.
    
    A peer can notify the other one that a subflow has to be treated as
    "backup" by two different ways: either by sending a dedicated MP_PRIO
    notification, or by setting the backup flag in the MP_JOIN handshake.
    
    The selftests were previously monitoring the former, but not the latter.
    This is what is now done here by looking at these new MIB counters when
    validating the 'backup' cases:
    
      MPTcpExtMPJoinSynBackupRx
      MPTcpExtMPJoinSynAckBackupRx
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it will help to validate a new fix for an issue introduced by this
    commit ID.
    
    Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in mptcp_join.sh because the check are done has changed,
      e.g. in commit 03668c65d153 ("selftests: mptcp: join: rework detailed
      report"), or commit 985de45923e2 ("selftests: mptcp: centralize stats
      dumping"), etc. Adaptations have been made to use the old way, similar
      to what is done just above.
      Also, in this version, some subtests are missing. Only the two using
      chk_prio_nr() have been modified. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: core: check uartclk for zero to avoid divide by zero [+ + +]
Author: George Kennedy <george.kennedy@oracle.com>
Date:   Wed Jul 17 07:24:38 2024 -0500

    serial: core: check uartclk for zero to avoid divide by zero
    
    commit 6eabce6608d6f3440f4c03aa3d3ef50a47a3d193 upstream.
    
    Calling ioctl TIOCSSERIAL with an invalid baud_base can
    result in uartclk being zero, which will result in a
    divide by zero error in uart_get_divisor(). The check for
    uartclk being zero in uart_set_info() needs to be done
    before other settings are made as subsequent calls to
    ioctl TIOCSSERIAL for the same port would be impacted if
    the uartclk check was done where uartclk gets set.
    
    Oops: divide error: 0000  PREEMPT SMP KASAN PTI
    RIP: 0010:uart_get_divisor (drivers/tty/serial/serial_core.c:580)
    Call Trace:
     <TASK>
    serial8250_get_divisor (drivers/tty/serial/8250/8250_port.c:2576
        drivers/tty/serial/8250/8250_port.c:2589)
    serial8250_do_set_termios (drivers/tty/serial/8250/8250_port.c:502
        drivers/tty/serial/8250/8250_port.c:2741)
    serial8250_set_termios (drivers/tty/serial/8250/8250_port.c:2862)
    uart_change_line_settings (./include/linux/spinlock.h:376
        ./include/linux/serial_core.h:608 drivers/tty/serial/serial_core.c:222)
    uart_port_startup (drivers/tty/serial/serial_core.c:342)
    uart_startup (drivers/tty/serial/serial_core.c:368)
    uart_set_info (drivers/tty/serial/serial_core.c:1034)
    uart_set_info_user (drivers/tty/serial/serial_core.c:1059)
    tty_set_serial (drivers/tty/tty_io.c:2637)
    tty_ioctl (drivers/tty/tty_io.c:2647 drivers/tty/tty_io.c:2791)
    __x64_sys_ioctl (fs/ioctl.c:52 fs/ioctl.c:907
        fs/ioctl.c:893 fs/ioctl.c:893)
    do_syscall_64 (arch/x86/entry/common.c:52
        (discriminator 1) arch/x86/entry/common.c:83 (discriminator 1))
    entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: George Kennedy <george.kennedy@oracle.com>
    Rule: add
    Link: https://lore.kernel.org/stable/1721148848-9784-1-git-send-email-george.kennedy%40oracle.com
    Link: https://lore.kernel.org/r/1721219078-3209-1-git-send-email-george.kennedy@oracle.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc: qcom: pdr: fix parsing of domains lists [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Sat Jun 22 01:03:41 2024 +0300

    soc: qcom: pdr: fix parsing of domains lists
    
    [ Upstream commit 57f20d51f35780f240ecf39d81cda23612800a92 ]
    
    While parsing the domains list, start offsets from 0 rather than from
    domains_read. The domains_read is equal to the total count of the
    domains we have seen, while the domains list in the message starts from
    offset 0.
    
    Fixes: fbe639b44a82 ("soc: qcom: Introduce Protection Domain Restart helpers")
    Tested-by: Steev Klimaszewski <steev@kali.org>
    Tested-by: Alexey Minnekhanov <alexeymin@postmarketos.org>
    Reviewed-by: Chris Lew <quic_clew@quicinc.com>
    Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20240622-qcom-pd-mapper-v9-2-a84ee3591c8e@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: qcom: pdr: protect locator_addr with the main mutex [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Sat Jun 22 01:03:40 2024 +0300

    soc: qcom: pdr: protect locator_addr with the main mutex
    
    [ Upstream commit 107924c14e3ddd85119ca43c26a4ee1056fa9b84 ]
    
    If the service locator server is restarted fast enough, the PDR can
    rewrite locator_addr fields concurrently. Protect them by placing
    modification of those fields under the main pdr->lock.
    
    Fixes: fbe639b44a82 ("soc: qcom: Introduce Protection Domain Restart helpers")
    Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
    Tested-by: Steev Klimaszewski <steev@kali.org>
    Tested-by: Alexey Minnekhanov <alexeymin@postmarketos.org>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20240622-qcom-pd-mapper-v9-1-a84ee3591c8e@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: qcom: rpmh-rsc: Ensure irqs aren't disabled by rpmh_rsc_send_data() callers [+ + +]
Author: Stephen Boyd <swboyd@chromium.org>
Date:   Thu May 9 11:41:28 2024 -0700

    soc: qcom: rpmh-rsc: Ensure irqs aren't disabled by rpmh_rsc_send_data() callers
    
    [ Upstream commit e43111f52b9ec5c2d700f89a1d61c8d10dc2d9e9 ]
    
    Dan pointed out that Smatch is concerned about this code because it uses
    spin_lock_irqsave() and then calls wait_event_lock_irq() which enables
    irqs before going to sleep. The comment above the function says it
    should be called with interrupts enabled, but we simply hope that's true
    without really confirming that. Let's add a might_sleep() here to
    confirm that interrupts and preemption aren't disabled. Once we do that,
    we can change the lock to be non-saving, spin_lock_irq(), to clarify
    that we don't expect irqs to be disabled. If irqs are disabled by
    callers they're going to be enabled anyway in the wait_event_lock_irq()
    call which would be bad.
    
    This should make Smatch happier and find bad callers faster with the
    might_sleep(). We can drop the WARN_ON() in the caller because we have
    the might_sleep() now, simplifying the code.
    
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/r/911181ed-c430-4592-ad26-4dc948834e08@moroto.mountain
    Fixes: 2bc20f3c8487 ("soc: qcom: rpmh-rsc: Sleep waiting for tcs slots to be free")
    Cc: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Stephen Boyd <swboyd@chromium.org>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Link: https://lore.kernel.org/r/20240509184129.3924422-1-swboyd@chromium.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: xilinx: move PM_INIT_FINALIZE to zynqmp_pm_domains driver [+ + +]
Author: Michael Tretter <m.tretter@pengutronix.de>
Date:   Wed Aug 25 17:03:10 2021 +0200

    soc: xilinx: move PM_INIT_FINALIZE to zynqmp_pm_domains driver
    
    [ Upstream commit 7fd890b89dea55eb5866640eb8befad26d558161 ]
    
    PM_INIT_FINALIZE tells the PMU FW that Linux is able to handle the power
    management nodes that are provided by the PMU FW. Nodes that are not
    requested are shut down after this call.
    
    Calling PM_INIT_FINALIZE from the zynqmp_power driver is wrong. The PM
    node request mechanism is implemented in the zynqmp_pm_domains driver,
    which must also call PM_INIT_FINALIZE.
    
    Due to the behavior of the PMU FW, all devices must be powered up before
    PM_INIT_FINALIZE is called, because otherwise the devices might
    misbehave. Calling PM_INIT_FINALIZE from the sync_state device callback
    ensures that all users probed successfully before the PMU FW is allowed
    to power off unused domains.
    
    Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Acked-by: Rajan Vaja <rajan.vaja@xilinx.com>
    Link: https://lore.kernel.org/r/20210825150313.4033156-2-m.tretter@pengutronix.de
    Signed-off-by: Michal Simek <michal.simek@xilinx.com>
    Stable-dep-of: 9b003e14801c ("drivers: soc: xilinx: check return status of get_api_version()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sparc64: Fix incorrect function signature and add prototype for prom_cif_init [+ + +]
Author: Andreas Larsson <andreas@gaisler.com>
Date:   Wed Jul 10 11:41:53 2024 +0200

    sparc64: Fix incorrect function signature and add prototype for prom_cif_init
    
    [ Upstream commit a6c3ea1ec96307dbfbb2f16d96c674c5cc80f445 ]
    
    Remove the unused cif_stack argument and add a protype in oplib_64.h
    Commit ef3e035c3a9b ("sparc64: Fix register corruption in top-most
    kernel stack frame during boot.") removed the cif_stack argument to
    prom_cif init in the declaration at the caller site and the usage of it
    within prom_cif_init, but not in the function signature of the function
    itself.
    
    This also fixes the following warning:
    arch/sparc/prom/p1275.c:52:6: warning: no previous prototype for ‘prom_cif_init’
    
    Fixes: ef3e035c3a9b ("sparc64: Fix register corruption in top-most kernel stack frame during boot.")
    Link: https://lore.kernel.org/r/20240710094155.458731-3-andreas@gaisler.com
    Signed-off-by: Andreas Larsson <andreas@gaisler.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: spi-fsl-lpspi: Fix scldiv calculation [+ + +]
Author: Stefan Wahren <wahrenst@gmx.net>
Date:   Sun Aug 4 13:36:11 2024 +0200

    spi: spi-fsl-lpspi: Fix scldiv calculation
    
    [ Upstream commit 730bbfaf7d4890bd99e637db7767dc68cfeb24e7 ]
    
    The effective SPI clock frequency should never exceed speed_hz
    otherwise this might result in undefined behavior of the SPI device.
    
    Currently the scldiv calculation could violate this constraint.
    For the example parameters perclk_rate = 24 MHz and speed_hz = 7 MHz,
    the function fsl_lpspi_set_bitrate will determine perscale = 0 and
    scldiv = 1, which is a effective SPI clock of 8 MHz.
    
    So fix this by rounding up the quotient of perclk_rate and speed_hz.
    While this never change within the loop, we can pull this out.
    
    Fixes: 5314987de5e5 ("spi: imx: add lpspi bus driver")
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://patch.msgid.link/20240804113611.83613-1-wahrenst@gmx.net
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: add correct compatible for Rohm BH2228FV [+ + +]
Author: Conor Dooley <conor.dooley@microchip.com>
Date:   Wed Jul 17 10:59:49 2024 +0100

    spi: spidev: add correct compatible for Rohm BH2228FV
    
    [ Upstream commit fc28d1c1fe3b3e2fbc50834c8f73dda72f6af9fc ]
    
    When Maxime originally added the BH2228FV to the spidev driver, he spelt
    it incorrectly - the d should have been a b. Add the correctly spelt
    compatible to the driver. Although the majority of users of this
    compatible are abusers, there is at least one board that validly uses
    the incorrect spelt compatible, so keep it in the driver to avoid
    breaking the few real users it has.
    
    Fixes: 8fad805bdc52 ("spi: spidev: Add Rohm DH2228FV DAC compatible string")
    Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
    Acked-by: Maxime Ripard <mripard@kernel.org>
    Link: https://patch.msgid.link/20240717-ventricle-strewn-a7678c509e85@spud
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: Add missing spi_device_id for bh2228fv [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Tue Jul 30 15:35:47 2024 +0200

    spi: spidev: Add missing spi_device_id for bh2228fv
    
    [ Upstream commit e4c4638b6a10427d30e29d22351c375886025f47 ]
    
    When the of_device_id entry for "rohm,bh2228fv" was added, the
    corresponding spi_device_id was forgotten, causing a warning message
    during boot-up:
    
        SPI driver spidev has no spi_device_id for rohm,bh2228fv
    
    Fix module autoloading and shut up the warning by adding the missing
    entry.
    
    Fixes: fc28d1c1fe3b3e2f ("spi: spidev: add correct compatible for Rohm BH2228FV")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://patch.msgid.link/cb571d4128f41175f31319cd9febc829417ea167.1722346539.git.geert+renesas@glider.be
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: Make probe to fail early if a spidev compatible is used [+ + +]
Author: Javier Martinez Canillas <javierm@redhat.com>
Date:   Tue Nov 9 23:59:20 2021 +0100

    spi: spidev: Make probe to fail early if a spidev compatible is used
    
    [ Upstream commit fffc84fd87d963a2ea77a125b8a6f5a3c9f3192d ]
    
    Some Device Trees don't use a real device name in the compatible string
    for SPI devices nodes, abusing the fact that the spidev driver name is
    used to match as a fallback when a SPI device ID table is not defined.
    
    But since commit 6840615f85f6 ("spi: spidev: Add SPI ID table") a table
    for SPI device IDs was added to the driver breaking the assumption that
    these DTs were relying on.
    
    There has been a warning message for some time since commit 956b200a846e
    ("spi: spidev: Warn loudly if instantiated from DT as "spidev""), making
    quite clear that this case is not really supported by the spidev driver.
    
    Since these devices won't match anyways after the mentioned commit, there
    is no point to continue if an spidev compatible is used. Let's just make
    the driver probe to fail early.
    
    Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
    Link: https://lore.kernel.org/r/20211109225920.1158920-1-javierm@redhat.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: fc28d1c1fe3b ("spi: spidev: add correct compatible for Rohm BH2228FV")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: order compatibles alphabetically [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Fri Jan 20 08:56:51 2023 +0100

    spi: spidev: order compatibles alphabetically
    
    [ Upstream commit be5852457b7e85ad13b1bded9c97bed5ee1715a3 ]
    
    Bring some order to reduce possibilities of conflicts.
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20230120075651.153763-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: fc28d1c1fe3b ("spi: spidev: add correct compatible for Rohm BH2228FV")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: Replace ACPI specific code by device_get_match_data() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Mar 23 16:02:14 2022 +0200

    spi: spidev: Replace ACPI specific code by device_get_match_data()
    
    [ Upstream commit 2a7f669dd8f6561d227e724ca2614c25732f4799 ]
    
    Instead of calling the ACPI specific APIs, use device_get_match_data().
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20220323140215.2568-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: fc28d1c1fe3b ("spi: spidev: add correct compatible for Rohm BH2228FV")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: Replace OF specific code by device property API [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Mar 23 16:02:15 2022 +0200

    spi: spidev: Replace OF specific code by device property API
    
    [ Upstream commit 88a285192084edab6657e819f7f130f9cfcb0579 ]
    
    Instead of calling the OF specific APIs, use device property ones.
    
    It also prevents misusing PRP0001 in ACPI when trying to instantiate
    spidev directly. We only support special SPI test devices there.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20220323140215.2568-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: fc28d1c1fe3b ("spi: spidev: add correct compatible for Rohm BH2228FV")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spidev: Add Silicon Labs EM3581 device compatible [+ + +]
Author: Vincent Tremblay <vincent@vtremblay.dev>
Date:   Mon Dec 26 21:35:48 2022 -0500

    spidev: Add Silicon Labs EM3581 device compatible
    
    [ Upstream commit c67d90e058550403a3e6f9b05bfcdcfa12b1815c ]
    
    Add compatible string for Silicon Labs EM3581 device.
    
    Signed-off-by: Vincent Tremblay <vincent@vtremblay.dev>
    Link: https://lore.kernel.org/r/20221227023550.569547-2-vincent@vtremblay.dev
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: fc28d1c1fe3b ("spi: spidev: add correct compatible for Rohm BH2228FV")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
SUNRPC: avoid soft lockup when transmitting UDP to reachable server. [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Wed Jun 19 11:05:13 2024 +1000

    SUNRPC: avoid soft lockup when transmitting UDP to reachable server.
    
    [ Upstream commit 6258cf25d5e3155c3219ab5a79b970eef7996356 ]
    
    Prior to the commit identified below, call_transmit_status() would
    handle -EPERM and other errors related to an unreachable server by
    falling through to call_status() which added a 3-second delay and
    handled the failure as a timeout.
    
    Since that commit, call_transmit_status() falls through to
    handle_bind().  For UDP this moves straight on to handle_connect() and
    handle_transmit() so we immediately retransmit - and likely get the same
    error.
    
    This results in an indefinite loop in __rpc_execute() which triggers a
    soft-lockup warning.
    
    For the errors that indicate an unreachable server,
    call_transmit_status() should fall back to call_status() as it did
    before.  This cannot cause the thundering herd that the previous patch
    was avoiding, as the call_status() will insert a delay.
    
    Fixes: ed7dc973bd91 ("SUNRPC: Prevent thundering herd when the socket is not connected")
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

SUNRPC: Fix a race to wake a sync task [+ + +]
Author: Benjamin Coddington <bcodding@redhat.com>
Date:   Wed Jul 17 10:49:33 2024 -0400

    SUNRPC: Fix a race to wake a sync task
    
    [ Upstream commit ed0172af5d6fc07d1b40ca82f5ca3979300369f7 ]
    
    We've observed NFS clients with sync tasks sleeping in __rpc_execute
    waiting on RPC_TASK_QUEUED that have not responded to a wake-up from
    rpc_make_runnable().  I suspect this problem usually goes unnoticed,
    because on a busy client the task will eventually be re-awoken by another
    task completion or xprt event.  However, if the state manager is draining
    the slot table, a sync task missing a wake-up can result in a hung client.
    
    We've been able to prove that the waker in rpc_make_runnable() successfully
    calls wake_up_bit() (ie- there's no race to tk_runstate), but the
    wake_up_bit() call fails to wake the waiter.  I suspect the waker is
    missing the load of the bit's wait_queue_head, so waitqueue_active() is
    false.  There are some very helpful comments about this problem above
    wake_up_bit(), prepare_to_wait(), and waitqueue_active().
    
    Fix this by inserting smp_mb__after_atomic() before the wake_up_bit(),
    which pairs with prepare_to_wait() calling set_current_state().
    
    Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

SUNRPC: Fixup gss_status tracepoint error output [+ + +]
Author: Benjamin Coddington <bcodding@redhat.com>
Date:   Thu Jul 11 13:21:00 2024 -0400

    SUNRPC: Fixup gss_status tracepoint error output
    
    [ Upstream commit b9fae9f06d84ffab0f3f9118f3a96bbcdc528bf6 ]
    
    The GSS routine errors are values, not flags.
    
    Fixes: 0c77668ddb4e ("SUNRPC: Introduce trace points in rpc_auth_gss.ko")
    Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
    Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sysctl: always initialize i_uid/i_gid [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Tue Apr 2 23:10:34 2024 +0200

    sysctl: always initialize i_uid/i_gid
    
    [ Upstream commit 98ca62ba9e2be5863c7d069f84f7166b45a5b2f4 ]
    
    Always initialize i_uid/i_gid inside the sysfs core so set_ownership()
    can safely skip setting them.
    
    Commit 5ec27ec735ba ("fs/proc/proc_sysctl.c: fix the default values of
    i_uid/i_gid on /proc/sys inodes.") added defaults for i_uid/i_gid when
    set_ownership() was not implemented. It also missed adjusting
    net_ctl_set_ownership() to use the same default values in case the
    computation of a better value failed.
    
    Fixes: 5ec27ec735ba ("fs/proc/proc_sysctl.c: fix the default values of i_uid/i_gid on /proc/sys inodes.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Signed-off-by: Joel Granados <j.granados@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
task_work: Introduce task_work_cancel() again [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Fri Jun 21 11:15:59 2024 +0200

    task_work: Introduce task_work_cancel() again
    
    commit f409530e4db9dd11b88cb7703c97c8f326ff6566 upstream.
    
    Re-introduce task_work_cancel(), this time to cancel an actual callback
    and not *any* callback pointing to a given function. This is going to be
    needed for perf events event freeing.
    
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240621091601.18227-3-frederic@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

task_work: s/task_work_cancel()/task_work_cancel_func()/ [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Fri Jun 21 11:15:58 2024 +0200

    task_work: s/task_work_cancel()/task_work_cancel_func()/
    
    commit 68cbd415dd4b9c5b9df69f0f091879e56bf5907a upstream.
    
    A proper task_work_cancel() API that actually cancels a callback and not
    *any* callback pointing to a given function is going to be needed for
    perf events event freeing. Do the appropriate rename to prepare for
    that.
    
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240621091601.18227-2-frederic@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp: add tcp_done_with_error() helper [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue May 28 12:52:50 2024 +0000

    tcp: add tcp_done_with_error() helper
    
    [ Upstream commit 5e514f1cba090e1c8fff03e92a175eccfe46305f ]
    
    tcp_reset() ends with a sequence that is carefuly ordered.
    
    We need to fix [e]poll bugs in the following patches,
    it makes sense to use a common helper.
    
    Suggested-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Link: https://lore.kernel.org/r/20240528125253.1966136-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 853c3bd7b791 ("tcp: fix race in tcp_write_err()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate lockless access to sk->sk_err [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Mar 15 20:57:44 2023 +0000

    tcp: annotate lockless access to sk->sk_err
    
    [ Upstream commit e13ec3da05d130f0d10da8e1fbe1be26dcdb0e27 ]
    
    tcp_poll() reads sk->sk_err without socket lock held/owned.
    
    We should used READ_ONCE() here, and update writers
    to use WRITE_ONCE().
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 853c3bd7b791 ("tcp: fix race in tcp_write_err()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: annotate lockless accesses to sk->sk_err_soft [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Mar 15 20:57:41 2023 +0000

    tcp: annotate lockless accesses to sk->sk_err_soft
    
    [ Upstream commit cee1af825d65b8122627fc2efbc36c1bd51ee103 ]
    
    This field can be read/written without lock synchronization.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 853c3bd7b791 ("tcp: fix race in tcp_write_err()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: fix race in tcp_write_err() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue May 28 12:52:51 2024 +0000

    tcp: fix race in tcp_write_err()
    
    [ Upstream commit 853c3bd7b7917670224c9fe5245bd045cac411dd ]
    
    I noticed flakes in a packetdrill test, expecting an epoll_wait()
    to return EPOLLERR | EPOLLHUP on a failed connect() attempt,
    after multiple SYN retransmits. It sometimes return EPOLLERR only.
    
    The issue is that tcp_write_err():
     1) writes an error in sk->sk_err,
     2) calls sk_error_report(),
     3) then calls tcp_done().
    
    tcp_done() is writing SHUTDOWN_MASK into sk->sk_shutdown,
    among other things.
    
    Problem is that the awaken user thread (from 2) sk_error_report())
    might call tcp_poll() before tcp_done() has written sk->sk_shutdown.
    
    tcp_poll() only sees a non zero sk->sk_err and returns EPOLLERR.
    
    This patch fixes the issue by making sure to call sk_error_report()
    after tcp_done().
    
    tcp_write_err() also lacks an smp_wmb().
    
    We can reuse tcp_done_with_error() to factor out the details,
    as Neal suggested.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Link: https://lore.kernel.org/r/20240528125253.1966136-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: fix races in tcp_v[46]_err() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue May 28 12:52:53 2024 +0000

    tcp: fix races in tcp_v[46]_err()
    
    [ Upstream commit fde6f897f2a184546bf5516ac736523ef24dc6a7 ]
    
    These functions have races when they:
    
    1) Write sk->sk_err
    2) call sk_error_report(sk)
    3) call tcp_done(sk)
    
    As described in prior patches in this series:
    
    An smp_wmb() is missing.
    We should call tcp_done() before sk_error_report(sk)
    to have consistent tcp_poll() results on SMP hosts.
    
    Use tcp_done_with_error() where we centralized the
    correct sequence.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Link: https://lore.kernel.org/r/20240528125253.1966136-5-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tick/broadcast: Make takeover of broadcast hrtimer reliable [+ + +]
Author: Yu Liao <liaoyu15@huawei.com>
Date:   Thu Jul 11 20:48:43 2024 +0800

    tick/broadcast: Make takeover of broadcast hrtimer reliable
    
    commit f7d43dd206e7e18c182f200e67a8db8c209907fa upstream.
    
    Running the LTP hotplug stress test on a aarch64 machine results in
    rcu_sched stall warnings when the broadcast hrtimer was owned by the
    un-plugged CPU. The issue is the following:
    
    CPU1 (owns the broadcast hrtimer)       CPU2
    
                                    tick_broadcast_enter()
                                      // shutdown local timer device
                                      broadcast_shutdown_local()
                                    ...
                                    tick_broadcast_exit()
                                      clockevents_switch_state(dev, CLOCK_EVT_STATE_ONESHOT)
                                      // timer device is not programmed
                                      cpumask_set_cpu(cpu, tick_broadcast_force_mask)
    
                                    initiates offlining of CPU1
    take_cpu_down()
    /*
     * CPU1 shuts down and does not
     * send broadcast IPI anymore
     */
                                    takedown_cpu()
                                      hotplug_cpu__broadcast_tick_pull()
                                        // move broadcast hrtimer to this CPU
                                        clockevents_program_event()
                                          bc_set_next()
                                            hrtimer_start()
                                            /*
                                             * timer device is not programmed
                                             * because only the first expiring
                                             * timer will trigger clockevent
                                             * device reprogramming
                                             */
    
    What happens is that CPU2 exits broadcast mode with force bit set, then the
    local timer device is not reprogrammed and CPU2 expects to receive the
    expired event by the broadcast IPI. But this does not happen because CPU1
    is offlined by CPU2. CPU switches the clockevent device to ONESHOT state,
    but does not reprogram the device.
    
    The subsequent reprogramming of the hrtimer broadcast device does not
    program the clockevent device of CPU2 either because the pending expiry
    time is already in the past and the CPU expects the event to be delivered.
    As a consequence all CPUs which wait for a broadcast event to be delivered
    are stuck forever.
    
    Fix this issue by reprogramming the local timer device if the broadcast
    force bit of the CPU is set so that the broadcast hrtimer is delivered.
    
    [ tglx: Massage comment and change log. Add Fixes tag ]
    
    Fixes: 989dcb645ca7 ("tick: Handle broadcast wakeup of multiple cpus")
    Signed-off-by: Yu Liao <liaoyu15@huawei.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240711124843.64167-1-liaoyu15@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tick/broadcast: Move per CPU pointer access into the atomic section [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed Jul 31 12:23:51 2024 +0200

    tick/broadcast: Move per CPU pointer access into the atomic section
    
    commit 6881e75237a84093d0986f56223db3724619f26e upstream.
    
    The recent fix for making the take over of the broadcast timer more
    reliable retrieves a per CPU pointer in preemptible context.
    
    This went unnoticed as compilers hoist the access into the non-preemptible
    region where the pointer is actually used. But of course it's valid that
    the compiler keeps it at the place where the code puts it which rightfully
    triggers:
    
      BUG: using smp_processor_id() in preemptible [00000000] code:
           caller is hotplug_cpu__broadcast_tick_pull+0x1c/0xc0
    
    Move it to the actual usage site which is in a non-preemptible region.
    
    Fixes: f7d43dd206e7 ("tick/broadcast: Make takeover of broadcast hrtimer reliable")
    Reported-by: David Wang <00107082@163.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Yu Liao <liaoyu15@huawei.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/87ttg56ers.ffs@tglx
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
timekeeping: Fix bogus clock_was_set() invocation in do_adjtimex() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Sat Aug 3 17:07:51 2024 +0200

    timekeeping: Fix bogus clock_was_set() invocation in do_adjtimex()
    
    commit 5916be8a53de6401871bdd953f6c60237b47d6d3 upstream.
    
    The addition of the bases argument to clock_was_set() fixed up all call
    sites correctly except for do_adjtimex(). This uses CLOCK_REALTIME
    instead of CLOCK_SET_WALL as argument. CLOCK_REALTIME is 0.
    
    As a result the effect of that clock_was_set() notification is incomplete
    and might result in timers expiring late because the hrtimer code does
    not re-evaluate the affected clock bases.
    
    Use CLOCK_SET_WALL instead of CLOCK_REALTIME to tell the hrtimers code
    which clock bases need to be re-evaluated.
    
    Fixes: 17a1b8826b45 ("hrtimer: Add bases argument to clock_was_set()")
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/877ccx7igo.ffs@tglx
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tipc: Return non-zero value from tipc_udp_addr2str() on error [+ + +]
Author: Shigeru Yoshida <syoshida@redhat.com>
Date:   Tue Jul 16 11:09:05 2024 +0900

    tipc: Return non-zero value from tipc_udp_addr2str() on error
    
    [ Upstream commit fa96c6baef1b5385e2f0c0677b32b3839e716076 ]
    
    tipc_udp_addr2str() should return non-zero value if the UDP media
    address is invalid. Otherwise, a buffer overflow access can occur in
    tipc_media_addr_printf(). Fix this by returning 1 on an invalid UDP
    media address.
    
    Fixes: d0f91938bede ("tipc: add ip/udp media type")
    Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
    Reviewed-by: Tung Nguyen <tung.q.nguyen@endava.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tls: fix race between tx work scheduling and socket close [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue Feb 6 17:18:20 2024 -0800

    tls: fix race between tx work scheduling and socket close
    
    commit e01e3934a1b2d122919f73bc6ddbe1cdafc4bbdb upstream.
    
    Similarly to previous commit, the submitting thread (recvmsg/sendmsg)
    may exit as soon as the async crypto handler calls complete().
    Reorder scheduling the work before calling complete().
    This seems more logical in the first place, as it's
    the inverse order of what the submitting thread will do.
    
    Reported-by: valis <sec@valis.email>
    Fixes: a42055e8d2c3 ("net/tls: Add support for async encryption of records for performance")
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [ Lee: Fixed merge-conflict in Stable branches linux-6.1.y and older ]
    Signed-off-by: Lee Jones <lee@kernel.org>
    [ Harshit: bp to 5.15.y, minor conflict resolutin due to missing commit:
      8ae187386420 ("tls: Only use data field in crypto completion function")
      in 5.15.y]
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tools/memory-model: Fix bug in lock.cat [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Thu Jun 6 09:57:55 2024 -0400

    tools/memory-model: Fix bug in lock.cat
    
    commit 4c830eef806679dc243e191f962c488dd9d00708 upstream.
    
    Andrea reported that the following innocuous litmus test:
    
    C T
    
    {}
    
    P0(spinlock_t *x)
    {
            int r0;
    
            spin_lock(x);
            spin_unlock(x);
            r0 = spin_is_locked(x);
    }
    
    gives rise to a nonsensical empty result with no executions:
    
    $ herd7 -conf linux-kernel.cfg T.litmus
    Test T Required
    States 0
    Ok
    Witnesses
    Positive: 0 Negative: 0
    Condition forall (true)
    Observation T Never 0 0
    Time T 0.00
    Hash=6fa204e139ddddf2cb6fa963bad117c0
    
    The problem is caused by a bug in the lock.cat part of the LKMM.  Its
    computation of the rf relation for RU (read-unlocked) events is
    faulty; it implicitly assumes that every RU event must read from
    either a UL (unlock) event in another thread or from the lock's
    initial state.  Neither is true in the litmus test above, so the
    computation yields no possible executions.
    
    The lock.cat code tries to make up for this deficiency by allowing RU
    events outside of critical sections to read from the last po-previous
    UL event.  But it does this incorrectly, trying to keep these rfi links
    separate from the rfe links that might also be needed, and passing only
    the latter to herd7's cross() macro.
    
    The problem is fixed by merging the two sets of possible rf links for
    RU events and using them all in the call to cross().
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Reported-by: Andrea Parri <parri.andrea@gmail.com>
    Closes: https://lore.kernel.org/linux-arch/ZlC0IkzpQdeGj+a3@andrea/
    Tested-by: Andrea Parri <parri.andrea@gmail.com>
    Acked-by: Andrea Parri <parri.andrea@gmail.com>
    Fixes: 15553dcbca06 ("tools/memory-model: Add model support for spin_is_locked()")
    CC: <stable@vger.kernel.org>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
torture: Enable clocksource watchdog with "tsc=watchdog" [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Thu Feb 2 17:04:09 2023 -0800

    torture: Enable clocksource watchdog with "tsc=watchdog"
    
    [ Upstream commit 877a0e83c57fa5e2a7fd628ec2e1733ed70c8792 ]
    
    This commit tests the "tsc=watchdog" kernel boot parameter when running
    the clocksourcewd torture tests.
    
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
    Stable-dep-of: f2655ac2c06a ("clocksource: Fix brown-bag boolean thinko in cs_watchdog_read()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Fix overflow in get_free_elt() [+ + +]
Author: Tze-nan Wu <Tze-nan.Wu@mediatek.com>
Date:   Mon Aug 5 13:59:22 2024 +0800

    tracing: Fix overflow in get_free_elt()
    
    commit bcf86c01ca4676316557dd482c8416ece8c2e143 upstream.
    
    "tracing_map->next_elt" in get_free_elt() is at risk of overflowing.
    
    Once it overflows, new elements can still be inserted into the tracing_map
    even though the maximum number of elements (`max_elts`) has been reached.
    Continuing to insert elements after the overflow could result in the
    tracing_map containing "tracing_map->max_size" elements, leaving no empty
    entries.
    If any attempt is made to insert an element into a full tracing_map using
    `__tracing_map_insert()`, it will cause an infinite loop with preemption
    disabled, leading to a CPU hang problem.
    
    Fix this by preventing any further increments to "tracing_map->next_elt"
    once it reaches "tracing_map->max_elt".
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Fixes: 08d43a5fa063e ("tracing: Add lock-free tracing_map")
    Co-developed-by: Cheng-Jui Wang <cheng-jui.wang@mediatek.com>
    Link: https://lore.kernel.org/20240805055922.6277-1-Tze-nan.Wu@mediatek.com
    Signed-off-by: Cheng-Jui Wang <cheng-jui.wang@mediatek.com>
    Signed-off-by: Tze-nan Wu <Tze-nan.Wu@mediatek.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ubi: eba: properly rollback inside self_check_eba [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Thu Feb 29 23:42:36 2024 +0300

    ubi: eba: properly rollback inside self_check_eba
    
    commit 745d9f4a31defec731119ee8aad8ba9f2536dd9a upstream.
    
    In case of a memory allocation failure in the volumes loop we can only
    process the already allocated scan_eba and fm_eba array elements on the
    error path - others are still uninitialized.
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Fixes: 00abf3041590 ("UBI: Add self_check_eba()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udf: Avoid using corrupted block bitmap buffer [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Mon Jun 17 17:41:52 2024 +0200

    udf: Avoid using corrupted block bitmap buffer
    
    commit a90d4471146de21745980cba51ce88e7926bcc4f upstream.
    
    When the filesystem block bitmap is corrupted, we detect the corruption
    while loading the bitmap and fail the allocation with error. However the
    next allocation from the same bitmap will notice the bitmap buffer is
    already loaded and tries to allocate from the bitmap with mixed results
    (depending on the exact nature of the bitmap corruption). Fix the
    problem by using BH_verified bit to indicate whether the bitmap is valid
    or not.
    
    Reported-by: syzbot+5f682cd029581f9edfd1@syzkaller.appspotmail.com
    CC: stable@vger.kernel.org
    Link: https://patch.msgid.link/20240617154201.29512-2-jack@suse.cz
    Fixes: 1e0d4adf17e7 ("udf: Check consistency of Space Bitmap Descriptor")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

udf: prevent integer overflow in udf_bitmap_free_blocks() [+ + +]
Author: Roman Smirnov <r.smirnov@omp.ru>
Date:   Thu Jun 20 10:24:13 2024 +0300

    udf: prevent integer overflow in udf_bitmap_free_blocks()
    
    [ Upstream commit 56e69e59751d20993f243fb7dd6991c4e522424c ]
    
    An overflow may occur if the function is called with the last
    block and an offset greater than zero. It is necessary to add
    a check to avoid this.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    [JK: Make test cover also unalloc table freeing]
    
    Link: https://patch.msgid.link/20240620072413.7448-1-r.smirnov@omp.ru
    Suggested-by: Jan Kara <jack@suse.com>
    Signed-off-by: Roman Smirnov <r.smirnov@omp.ru>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
um: time-travel: fix signal blocking race/hang [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Wed Jul 3 13:01:45 2024 +0200

    um: time-travel: fix signal blocking race/hang
    
    [ Upstream commit 2cf3a3c4b84def5406b830452b1cb8bbfffe0ebe ]
    
    When signals are hard-blocked in order to do time-travel
    socket processing, we set signals_blocked and then handle
    SIGIO signals by setting the SIGIO bit in signals_pending.
    When unblocking, we first set signals_blocked to 0, and
    then handle all pending signals. We have to set it first,
    so that we can again properly block/unblock inside the
    unblock, if the time-travel handlers need to be processed.
    
    Unfortunately, this is racy. We can get into this situation:
    
    // signals_pending = SIGIO_MASK
    
    unblock_signals_hard()
       signals_blocked = 0;
       if (signals_pending && signals_enabled) {
         block_signals();
         unblock_signals()
           ...
           sig_handler_common(SIGIO, NULL, NULL);
             sigio_handler()
               ...
               sigio_reg_handler()
                 irq_do_timetravel_handler()
                   reg->timetravel_handler() ==
                   vu_req_interrupt_comm_handler()
                     vu_req_read_message()
                       vhost_user_recv_req()
                         vhost_user_recv()
                           vhost_user_recv_header()
                             // reads 12 bytes header of
                             // 20 bytes message
    <-- receive SIGIO here <--
    sig_handler()
       int enabled = signals_enabled; // 1
       if ((signals_blocked || !enabled) && (sig == SIGIO)) {
         if (!signals_blocked && time_travel_mode == TT_MODE_EXTERNAL)
           sigio_run_timetravel_handlers()
             _sigio_handler()
               sigio_reg_handler()
                 ... as above ...
                   vhost_user_recv_header()
                     // reads 8 bytes that were message payload
                     // as if it were header - but aborts since
                     // it then gets -EAGAIN
    ...
    --> end signal handler -->
                           // continue in vhost_user_recv()
                           // full_read() for 8 bytes payload busy loops
                           // entire process hangs here
    
    Conceptually, to fix this, we need to ensure that the
    signal handler cannot run while we hard-unblock signals.
    The thing that makes this more complex is that we can be
    doing hard-block/unblock while unblocking. Introduce a
    new signals_blocked_pending variable that we can keep at
    non-zero as long as pending signals are being processed,
    then we only need to ensure it's decremented safely and
    the signal handler will only increment it if it's already
    non-zero (or signals_blocked is set, of course.)
    
    Note also that only the outermost call to hard-unblock is
    allowed to decrement signals_blocked_pending, since it
    could otherwise reach zero in an inner call, and leave
    the same race happening if the timetravel_handler loops,
    but that's basically required of it.
    
    Fixes: d6b399a0e02a ("um: time-travel/signals: fix ndelay() in interrupt")
    Link: https://patch.msgid.link/20240703110144.28034-2-johannes@sipsolutions.net
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

um: time-travel: fix time-travel-start option [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Wed Apr 17 10:27:45 2024 +0200

    um: time-travel: fix time-travel-start option
    
    [ Upstream commit 7d0a8a490aa3a2a82de8826aaf1dfa38575cb77a ]
    
    We need to have the = as part of the option so that the
    value can be parsed properly. Also document that it must
    be given in nanoseconds, not seconds.
    
    Fixes: 065038706f77 ("um: Support time travel mode")
    Link: https://patch.msgid.link/20240417102744.14b9a9d4eba0.Ib22e9136513126b2099d932650f55f193120cd97@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: gadget: core: Check for unset descriptor [+ + +]
Author: Chris Wulff <crwulff@gmail.com>
Date:   Wed Jul 24 21:04:20 2024 -0400

    usb: gadget: core: Check for unset descriptor
    
    commit 973a57891608a98e894db2887f278777f564de18 upstream.
    
    Make sure the descriptor has been set before looking at maxpacket.
    This fixes a null pointer panic in this case.
    
    This may happen if the gadget doesn't properly set up the endpoint
    for the current speed, or the gadget descriptors are malformed and
    the descriptor for the speed/endpoint are not found.
    
    No current gadget driver is known to have this problem, but this
    may cause a hard-to-find bug during development of new gadgets.
    
    Fixes: 54f83b8c8ea9 ("USB: gadget: Reject endpoints with 0 maxpacket value")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chris Wulff <crwulff@gmail.com>
    Link: https://lore.kernel.org/r/20240725010419.314430-2-crwulff@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: u_audio: Check return codes from usb_ep_enable and config_ep_by_speed. [+ + +]
Author: Chris Wulff <crwulff@gmail.com>
Date:   Sun Jul 21 15:23:15 2024 -0400

    usb: gadget: u_audio: Check return codes from usb_ep_enable and config_ep_by_speed.
    
    [ Upstream commit 76a7bfc445b8e9893c091e24ccfd4f51dfdc0a70 ]
    
    These functions can fail if descriptors are malformed, or missing,
    for the selected USB speed.
    
    Fixes: eb9fecb9e69b ("usb: gadget: f_uac2: split out audio core")
    Fixes: 24f779dac8f3 ("usb: gadget: f_uac2/u_audio: add feedback endpoint support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chris Wulff <crwulff@gmail.com>
    Link: https://lore.kernel.org/r/20240721192314.3532697-2-crwulff@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: u_serial: Set start_delayed during suspend [+ + +]
Author: Prashanth K <quic_prashk@quicinc.com>
Date:   Tue Jul 30 18:27:54 2024 +0530

    usb: gadget: u_serial: Set start_delayed during suspend
    
    commit 5a444bea37e2759549ef72bfe83d1c8712e76b3d upstream.
    
    Upstream commit aba3a8d01d62 ("usb: gadget: u_serial: add suspend
    resume callbacks") added started_delayed flag, so that new ports
    which are opened after USB suspend can start IO while resuming.
    But if the port was already opened, and gadget suspend kicks in
    afterwards, start_delayed will never be set. This causes resume
    to bail out before calling gs_start_io(). Fix this by setting
    start_delayed during suspend.
    
    Fixes: aba3a8d01d62 ("usb: gadget: u_serial: add suspend resume callbacks")
    Cc: stable@vger.kernel.org
    Signed-off-by: Prashanth K <quic_prashk@quicinc.com>
    Link: https://lore.kernel.org/r/20240730125754.576326-1-quic_prashk@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: serial: debug: do not echo input by default [+ + +]
Author: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Date:   Mon Jul 15 12:44:53 2024 +0200

    USB: serial: debug: do not echo input by default
    
    commit 00af4f3dda1461ec90d892edc10bec6d3c50c554 upstream.
    
    This driver is intended as a "client" end of the console connection.
    When connected to a host it's supposed to receive debug logs, and
    possibly allow to interact with whatever debug console is available
    there. Feeding messages back, depending on a configuration may cause log
    messages be executed as shell commands (which can be really bad if one
    is unlucky, imagine a log message like "prevented running `rm -rf
    /home`"). In case of Xen, it exposes sysrq-like debug interface, and
    feeding it its own logs will pretty quickly hit 'R' for "instant
    reboot".
    
    Contrary to a classic serial console, the USB one cannot be configured
    ahead of time, as the device shows up only when target OS is up. And at
    the time device is opened to execute relevant ioctl, it's already too
    late, especially when logs start flowing shortly after device is
    initialized.
    Avoid the issue by changing default to no echo for this type of devices.
    
    Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
    [ johan: amend summary; disable also ECHONL ]
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: vhci-hcd: Do not drop references before new references are gained [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Tue Jul 9 13:38:41 2024 +0200

    usb: vhci-hcd: Do not drop references before new references are gained
    
    commit afdcfd3d6fcdeca2735ca8d994c5f2d24a368f0a upstream.
    
    At a few places the driver carries stale pointers
    to references that can still be used. Make sure that does not happen.
    This strictly speaking closes ZDI-CAN-22273, though there may be
    similar races in the driver.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Cc: stable <stable@kernel.org>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20240709113851.14691-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vhost-vdpa: switch to use vmf_insert_pfn() in the fault handler [+ + +]
Author: Jason Wang <jasowang@redhat.com>
Date:   Mon Jul 1 11:31:59 2024 +0800

    vhost-vdpa: switch to use vmf_insert_pfn() in the fault handler
    
    commit 0823dc64586ba5ea13a7d200a5d33e4c5fa45950 upstream.
    
    remap_pfn_page() should not be called in the fault handler as it may
    change the vma->flags which may trigger lockdep warning since the vma
    write lock is not held. Actually there's no need to modify the
    vma->flags as it has been set in the mmap(). So this patch switches to
    use vmf_insert_pfn() instead.
    
    Reported-by: Dragos Tatulea <dtatulea@nvidia.com>
    Tested-by: Dragos Tatulea <dtatulea@nvidia.com>
    Fixes: ddd89d0a059d ("vhost_vdpa: support doorbell mapping via mmap")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Message-Id: <20240701033159.18133-1-jasowang@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vhost/vsock: always initialize seqpacket_allow [+ + +]
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Mon Apr 22 10:03:13 2024 -0400

    vhost/vsock: always initialize seqpacket_allow
    
    [ Upstream commit 1e1fdcbdde3b7663e5d8faeb2245b9b151417d22 ]
    
    There are two issues around seqpacket_allow:
    1. seqpacket_allow is not initialized when socket is
       created. Thus if features are never set, it will be
       read uninitialized.
    2. if VIRTIO_VSOCK_F_SEQPACKET is set and then cleared,
       then seqpacket_allow will not be cleared appropriately
       (existing apps I know about don't usually do this but
        it's legal and there's no way to be sure no one relies
        on this).
    
    To fix:
            - initialize seqpacket_allow after allocation
            - set it unconditionally in set_features
    
    Reported-by: syzbot+6c21aeb59d0e82eb2782@syzkaller.appspotmail.com
    Reported-by: Jeongjun Park <aha310510@gmail.com>
    Fixes: ced7b713711f ("vhost/vsock: support SEQPACKET for transport").
    Tested-by: Arseny Krasnov <arseny.krasnov@kaspersky.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Stefan Hajnoczi <stefanha@redhat.com>
    Message-ID: <20240422100010-mutt-send-email-mst@kernel.org>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Eugenio Pérez <eperezma@redhat.com>
    Acked-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vmlinux.lds.h: catch .bss..L* sections into BSS") [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Fri Jul 12 07:51:58 2024 +0200

    vmlinux.lds.h: catch .bss..L* sections into BSS")
    
    [ Upstream commit 1a7b7326d587c9a5e8ff067e70d6aaf0333f4bb3 ]
    
    Commit 9a427556fb8e ("vmlinux.lds.h: catch compound literals into
    data and BSS") added catches for .data..L* and .rodata..L* but missed
    .bss..L*
    
    Since commit 5431fdd2c181 ("ptrace: Convert ptrace_attach() to use
    lock guards") the following appears at build:
    
      LD      .tmp_vmlinux.kallsyms1
    powerpc64-linux-ld: warning: orphan section `.bss..Lubsan_data33' from `kernel/ptrace.o' being placed in section `.bss..Lubsan_data33'
      NM      .tmp_vmlinux.kallsyms1.syms
      KSYMS   .tmp_vmlinux.kallsyms1.S
      AS      .tmp_vmlinux.kallsyms1.S
      LD      .tmp_vmlinux.kallsyms2
    powerpc64-linux-ld: warning: orphan section `.bss..Lubsan_data33' from `kernel/ptrace.o' being placed in section `.bss..Lubsan_data33'
      NM      .tmp_vmlinux.kallsyms2.syms
      KSYMS   .tmp_vmlinux.kallsyms2.S
      AS      .tmp_vmlinux.kallsyms2.S
      LD      vmlinux
    powerpc64-linux-ld: warning: orphan section `.bss..Lubsan_data33' from `kernel/ptrace.o' being placed in section `.bss..Lubsan_data33'
    
    Lets add .bss..L* to BSS_MAIN macro to catch those sections into BSS.
    
    Fixes: 9a427556fb8e ("vmlinux.lds.h: catch compound literals into data and BSS")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202404031349.nmKhyuUG-lkp@intel.com/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watchdog/perf: properly initialize the turbo mode timestamp and rearm counter [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Jul 11 22:25:21 2024 +0200

    watchdog/perf: properly initialize the turbo mode timestamp and rearm counter
    
    commit f944ffcbc2e1c759764850261670586ddf3bdabb upstream.
    
    For systems on which the performance counter can expire early due to turbo
    modes the watchdog handler has a safety net in place which validates that
    since the last watchdog event there has at least 4/5th of the watchdog
    period elapsed.
    
    This works reliably only after the first watchdog event because the per
    CPU variable which holds the timestamp of the last event is never
    initialized.
    
    So a first spurious event will validate against a timestamp of 0 which
    results in a delta which is likely to be way over the 4/5 threshold of the
    period.  As this might happen before the first watchdog hrtimer event
    increments the watchdog counter, this can lead to false positives.
    
    Fix this by initializing the timestamp before enabling the hardware event.
    Reset the rearm counter as well, as that might be non zero after the
    watchdog was disabled and reenabled.
    
    Link: https://lkml.kernel.org/r/87frsfu15a.ffs@tglx
    Fixes: 7edaeb6841df ("kernel/watchdog: Prevent false positives with turbo modes")
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: ath11k: fix wrong handling of CCMP256 and GCMP ciphers [+ + +]
Author: Baochen Qiang <quic_bqiang@quicinc.com>
Date:   Tue Jun 11 09:42:34 2024 +0300

    wifi: ath11k: fix wrong handling of CCMP256 and GCMP ciphers
    
    [ Upstream commit d2b0ca38d362ebf16ca79cd7f309d5bb8b581deb ]
    
    Currently for CCMP256, GCMP128 and GCMP256 ciphers, in ath11k_install_key()
    IEEE80211_KEY_FLAG_GENERATE_IV_MGMT is not set. And in ath11k_mac_mgmt_tx_wmi()
    a length of IEEE80211_CCMP_MIC_LEN is reserved for all ciphers.
    
    This results in unexpected management frame drop in case either of above 3 ciphers
    is used. The reason is, without IEEE80211_KEY_FLAG_GENERATE_IV_MGMT set, mac80211
    will not generate CCMP/GCMP headers in frame for ath11k. Also MIC length reserved
    is wrong. Such frame is dropped later by hardware:
    
    ath11k_pci 0000:5a:00.0: mac tx mgmt frame, buf id 0
    ath11k_pci 0000:5a:00.0: mgmt tx compl ev pdev_id 1, desc_id 0, status 1
    
    From user point of view, we have observed very low throughput due to this issue:
    action frames are all dropped so ADDBA response from DUT never reaches AP. AP
    can not use aggregation thus throughput is low.
    
    Fix this by setting IEEE80211_KEY_FLAG_GENERATE_IV_MGMT flag and by reserving proper
    MIC length for those ciphers.
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
    
    Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
    Reported-by: Yaroslav Isakov <yaroslav.isakov@gmail.com>
    Tested-by: Yaroslav Isakov <yaroslav.isakov@gmail.com>
    Closes: https://lore.kernel.org/all/CADS+iDX5=JtJr0apAtAQ02WWBxgOFEv8G063vuGYwDTC8AVZaw@mail.gmail.com
    Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
    Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://msgid.link/20240605014826.22498-1-quic_bqiang@quicinc.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: brcmsmac: LCN PHY code is used for BCM4313 2G-only device [+ + +]
Author: Samasth Norway Ananda <samasth.norway.ananda@oracle.com>
Date:   Thu May 9 16:10:37 2024 -0700

    wifi: brcmsmac: LCN PHY code is used for BCM4313 2G-only device
    
    [ Upstream commit c636fa85feb450ca414a10010ed05361a73c93a6 ]
    
    The band_idx variable in the function wlc_lcnphy_tx_iqlo_cal() will
    never be set to 1 as BCM4313 is the only device for which the LCN PHY
    code is used. This is a 2G-only device.
    
    Fixes: 5b435de0d786 ("net: wireless: add brcm80211 drivers")
    Signed-off-by: Samasth Norway Ananda <samasth.norway.ananda@oracle.com>
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://msgid.link/20240509231037.2014109-1-samasth.norway.ananda@oracle.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: fix typo in cfg80211_calculate_bitrate_he() [+ + +]
Author: Baochen Qiang <quic_bqiang@quicinc.com>
Date:   Thu Jun 6 10:06:52 2024 +0800

    wifi: cfg80211: fix typo in cfg80211_calculate_bitrate_he()
    
    [ Upstream commit 9ee0d44f055276fe2802b2f65058e920853f4f99 ]
    
    rates_996 is mistakenly written as rates_969, fix it.
    
    Fixes: c4cbaf7973a7 ("cfg80211: Add support for HE")
    Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
    Link: https://msgid.link/20240606020653.33205-2-quic_bqiang@quicinc.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: handle 2x996 RU allocation in cfg80211_calculate_bitrate_he() [+ + +]
Author: Baochen Qiang <quic_bqiang@quicinc.com>
Date:   Thu Jun 6 10:06:53 2024 +0800

    wifi: cfg80211: handle 2x996 RU allocation in cfg80211_calculate_bitrate_he()
    
    [ Upstream commit bcbd771cd5d68c0c52567556097d75f9fc4e7cd6 ]
    
    Currently NL80211_RATE_INFO_HE_RU_ALLOC_2x996 is not handled in
    cfg80211_calculate_bitrate_he(), leading to below warning:
    
    kernel: invalid HE MCS: bw:6, ru:6
    kernel: WARNING: CPU: 0 PID: 2312 at net/wireless/util.c:1501 cfg80211_calculate_bitrate_he+0x22b/0x270 [cfg80211]
    
    Fix it by handling 2x996 RU allocation in the same way as 160 MHz bandwidth.
    
    Fixes: c4cbaf7973a7 ("cfg80211: Add support for HE")
    Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
    Link: https://msgid.link/20240606020653.33205-3-quic_bqiang@quicinc.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Jun 15 16:08:00 2024 +0000

    wifi: cfg80211: restrict NL80211_ATTR_TXQ_QUANTUM values
    
    [ Upstream commit d1cba2ea8121e7fdbe1328cea782876b1dd80993 ]
    
    syzbot is able to trigger softlockups, setting NL80211_ATTR_TXQ_QUANTUM
    to 2^31.
    
    We had a similar issue in sch_fq, fixed with commit
    d9e15a273306 ("pkt_sched: fq: do not accept silly TCA_FQ_QUANTUM")
    
    watchdog: BUG: soft lockup - CPU#1 stuck for 26s! [kworker/1:0:24]
    Modules linked in:
    irq event stamp: 131135
     hardirqs last  enabled at (131134): [<ffff80008ae8778c>] __exit_to_kernel_mode arch/arm64/kernel/entry-common.c:85 [inline]
     hardirqs last  enabled at (131134): [<ffff80008ae8778c>] exit_to_kernel_mode+0xdc/0x10c arch/arm64/kernel/entry-common.c:95
     hardirqs last disabled at (131135): [<ffff80008ae85378>] __el1_irq arch/arm64/kernel/entry-common.c:533 [inline]
     hardirqs last disabled at (131135): [<ffff80008ae85378>] el1_interrupt+0x24/0x68 arch/arm64/kernel/entry-common.c:551
     softirqs last  enabled at (125892): [<ffff80008907e82c>] neigh_hh_init net/core/neighbour.c:1538 [inline]
     softirqs last  enabled at (125892): [<ffff80008907e82c>] neigh_resolve_output+0x268/0x658 net/core/neighbour.c:1553
     softirqs last disabled at (125896): [<ffff80008904166c>] local_bh_disable+0x10/0x34 include/linux/bottom_half.h:19
    CPU: 1 PID: 24 Comm: kworker/1:0 Not tainted 6.9.0-rc7-syzkaller-gfda5695d692c #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
    Workqueue: mld mld_ifc_work
    pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : __list_del include/linux/list.h:195 [inline]
     pc : __list_del_entry include/linux/list.h:218 [inline]
     pc : list_move_tail include/linux/list.h:310 [inline]
     pc : fq_tin_dequeue include/net/fq_impl.h:112 [inline]
     pc : ieee80211_tx_dequeue+0x6b8/0x3b4c net/mac80211/tx.c:3854
     lr : __list_del_entry include/linux/list.h:218 [inline]
     lr : list_move_tail include/linux/list.h:310 [inline]
     lr : fq_tin_dequeue include/net/fq_impl.h:112 [inline]
     lr : ieee80211_tx_dequeue+0x67c/0x3b4c net/mac80211/tx.c:3854
    sp : ffff800093d36700
    x29: ffff800093d36a60 x28: ffff800093d36960 x27: dfff800000000000
    x26: ffff0000d800ad50 x25: ffff0000d800abe0 x24: ffff0000d800abf0
    x23: ffff0000e0032468 x22: ffff0000e00324d4 x21: ffff0000d800abf0
    x20: ffff0000d800abf8 x19: ffff0000d800abf0 x18: ffff800093d363c0
    x17: 000000000000d476 x16: ffff8000805519dc x15: ffff7000127a6cc8
    x14: 1ffff000127a6cc8 x13: 0000000000000004 x12: ffffffffffffffff
    x11: ffff7000127a6cc8 x10: 0000000000ff0100 x9 : 0000000000000000
    x8 : 0000000000000000 x7 : 0000000000000000 x6 : 0000000000000000
    x5 : ffff80009287aa08 x4 : 0000000000000008 x3 : ffff80008034c7fc
    x2 : ffff0000e0032468 x1 : 00000000da0e46b8 x0 : ffff0000e0032470
    Call trace:
      __list_del include/linux/list.h:195 [inline]
      __list_del_entry include/linux/list.h:218 [inline]
      list_move_tail include/linux/list.h:310 [inline]
      fq_tin_dequeue include/net/fq_impl.h:112 [inline]
      ieee80211_tx_dequeue+0x6b8/0x3b4c net/mac80211/tx.c:3854
      wake_tx_push_queue net/mac80211/util.c:294 [inline]
      ieee80211_handle_wake_tx_queue+0x118/0x274 net/mac80211/util.c:315
      drv_wake_tx_queue net/mac80211/driver-ops.h:1350 [inline]
      schedule_and_wake_txq net/mac80211/driver-ops.h:1357 [inline]
      ieee80211_queue_skb+0x18e8/0x2244 net/mac80211/tx.c:1664
      ieee80211_tx+0x260/0x400 net/mac80211/tx.c:1966
      ieee80211_xmit+0x278/0x354 net/mac80211/tx.c:2062
      __ieee80211_subif_start_xmit+0xab8/0x122c net/mac80211/tx.c:4338
      ieee80211_subif_start_xmit+0xe0/0x438 net/mac80211/tx.c:4532
      __netdev_start_xmit include/linux/netdevice.h:4903 [inline]
      netdev_start_xmit include/linux/netdevice.h:4917 [inline]
      xmit_one net/core/dev.c:3531 [inline]
      dev_hard_start_xmit+0x27c/0x938 net/core/dev.c:3547
      __dev_queue_xmit+0x1678/0x33fc net/core/dev.c:4341
      dev_queue_xmit include/linux/netdevice.h:3091 [inline]
      neigh_resolve_output+0x558/0x658 net/core/neighbour.c:1563
      neigh_output include/net/neighbour.h:542 [inline]
      ip6_finish_output2+0x104c/0x1ee8 net/ipv6/ip6_output.c:137
      ip6_finish_output+0x428/0x7a0 net/ipv6/ip6_output.c:222
      NF_HOOK_COND include/linux/netfilter.h:303 [inline]
      ip6_output+0x270/0x594 net/ipv6/ip6_output.c:243
      dst_output include/net/dst.h:450 [inline]
      NF_HOOK+0x160/0x4f0 include/linux/netfilter.h:314
      mld_sendpack+0x7b4/0x10f4 net/ipv6/mcast.c:1818
      mld_send_cr net/ipv6/mcast.c:2119 [inline]
      mld_ifc_work+0x840/0xd0c net/ipv6/mcast.c:2650
      process_one_work+0x7b8/0x15d4 kernel/workqueue.c:3267
      process_scheduled_works kernel/workqueue.c:3348 [inline]
      worker_thread+0x938/0xef4 kernel/workqueue.c:3429
      kthread+0x288/0x310 kernel/kthread.c:388
      ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:860
    
    Fixes: 52539ca89f36 ("cfg80211: Expose TXQ stats and parameters to userspace")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240615160800.250667-1-edumazet@google.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: check basic rates validity [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Feb 24 10:52:19 2023 +0100

    wifi: mac80211: check basic rates validity
    
    commit ce04abc3fcc62cd5640af981ebfd7c4dc3bded28 upstream.
    
    When userspace sets basic rates, it might send us some rates
    list that's empty or consists of invalid values only. We're
    currently ignoring invalid values and then may end up with a
    rates bitmap that's empty, which later results in a warning.
    
    Reject the call if there were no valid rates.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Reported-by: syzbot+19013115c9786bfd0c4e@syzkaller.appspotmail.com
    Tested-by: syzbot+19013115c9786bfd0c4e@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=19013115c9786bfd0c4e
    Signed-off-by: Vincenzo Mezzela <vincenzo.mezzela@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mwifiex: Fix interface type change [+ + +]
Author: Rafael Beims <rafael.beims@toradex.com>
Date:   Fri May 10 13:04:58 2024 +0200

    wifi: mwifiex: Fix interface type change
    
    commit a17b9f590f6ec2b9f1b12b1db3bf1d181de6b272 upstream.
    
    When changing the interface type we also need to update the bss_num, the
    driver private data is searched based on a unique (bss_type, bss_num)
    tuple, therefore every time bss_type changes, bss_num must also change.
    
    This fixes for example an issue in which, after the mode changed, a
    wireless scan on the changed interface would not finish, leading to
    repeated -EBUSY messages to userspace when other scan requests were
    sent.
    
    Fixes: c606008b7062 ("mwifiex: Properly initialize private structure on interface type changes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Rafael Beims <rafael.beims@toradex.com>
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://msgid.link/20240510110458.15475-1-francesco@dolcini.it
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: nl80211: don't give key data to userspace [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Thu Jun 27 10:44:11 2024 +0200

    wifi: nl80211: don't give key data to userspace
    
    [ Upstream commit a7e5793035792cc46a1a4b0a783655ffa897dfe9 ]
    
    When a key is requested by userspace, there's really no need
    to include the key data, the sequence counter is really what
    userspace needs in this case. The fact that it's included is
    just a historic quirk.
    
    Remove the key data.
    
    Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20240627104411.b6a4f097e4ea.I7e6cc976cb9e8a80ef25a3351330f313373b4578@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: virt_wifi: avoid reporting connection success with wrong SSID [+ + +]
Author: En-Wei Wu <en-wei.wu@canonical.com>
Date:   Fri Jul 5 10:37:56 2024 +0800

    wifi: virt_wifi: avoid reporting connection success with wrong SSID
    
    [ Upstream commit b5d14b0c6716fad7f0c94ac6e1d6f60a49f985c7 ]
    
    When user issues a connection with a different SSID than the one
    virt_wifi has advertised, the __cfg80211_connect_result() will
    trigger the warning: WARN_ON(bss_not_found).
    
    The issue is because the connection code in virt_wifi does not
    check the SSID from user space (it only checks the BSSID), and
    virt_wifi will call cfg80211_connect_result() with WLAN_STATUS_SUCCESS
    even if the SSID is different from the one virt_wifi has advertised.
    Eventually cfg80211 won't be able to find the cfg80211_bss and generate
    the warning.
    
    Fixed it by checking the SSID (from user space) in the connection code.
    
    Fixes: c7cdba31ed8b ("mac80211-next: rtnetlink wifi simulation device")
    Reported-by: syzbot+d6eb9cee2885ec06f5e3@syzkaller.appspotmail.com
    Signed-off-by: En-Wei Wu <en-wei.wu@canonical.com>
    Link: https://patch.msgid.link/20240705023756.10954-1-en-wei.wu@canonical.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: virt_wifi: don't use strlen() in const context [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue Jul 9 08:34:09 2024 +0200

    wifi: virt_wifi: don't use strlen() in const context
    
    [ Upstream commit 6e909f489191b365364e9d636dec33b5dfd4e5eb ]
    
    Looks like not all compilers allow strlen(constant) as
    a constant, so don't do that. Instead, revert back to
    defining the length as the first submission had it.
    
    Fixes: b5d14b0c6716 ("wifi: virt_wifi: avoid reporting connection success with wrong SSID")
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202407090934.NnR1TUbW-lkp@intel.com/
    Closes: https://lore.kernel.org/oe-kbuild-all/202407090944.mpwLHGt9-lkp@intel.com/
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/mm: Fix pti_clone_entry_text() for i386 [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Thu Aug 1 12:42:25 2024 +0200

    x86/mm: Fix pti_clone_entry_text() for i386
    
    [ Upstream commit 3db03fb4995ef85fc41e86262ead7b4852f4bcf0 ]
    
    While x86_64 has PMD aligned text sections, i386 does not have this
    luxery. Notably ALIGN_ENTRY_TEXT_END is empty and _etext has PAGE
    alignment.
    
    This means that text on i386 can be page granular at the tail end,
    which in turn means that the PTI text clones should consistently
    account for this.
    
    Make pti_clone_entry_text() consistent with pti_clone_kernel_text().
    
    Fixes: 16a3fe634f6a ("x86/mm/pti: Clone kernel-image on PTE level for 32 bit")
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

x86/mm: Fix pti_clone_pgtable() alignment assumption [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Wed Jul 31 18:31:05 2024 +0200

    x86/mm: Fix pti_clone_pgtable() alignment assumption
    
    [ Upstream commit 41e71dbb0e0a0fe214545fe64af031303a08524c ]
    
    Guenter reported dodgy crashes on an i386-nosmp build using GCC-11
    that had the form of endless traps until entry stack exhaust and then
    #DF from the stack guard.
    
    It turned out that pti_clone_pgtable() had alignment assumptions on
    the start address, notably it hard assumes start is PMD aligned. This
    is true on x86_64, but very much not true on i386.
    
    These assumptions can cause the end condition to malfunction, leading
    to a 'short' clone. Guess what happens when the user mapping has a
    short copy of the entry text?
    
    Use the correct increment form for addr to avoid alignment
    assumptions.
    
    Fixes: 16a3fe634f6a ("x86/mm/pti: Clone kernel-image on PTE level for 32 bit")
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20240731163105.GG33588@noisy.programming.kicks-ass.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/mtrr: Check if fixed MTRRs exist before saving them [+ + +]
Author: Andi Kleen <ak@linux.intel.com>
Date:   Wed Aug 7 17:02:44 2024 -0700

    x86/mtrr: Check if fixed MTRRs exist before saving them
    
    commit 919f18f961c03d6694aa726c514184f2311a4614 upstream.
    
    MTRRs have an obsolete fixed variant for fine grained caching control
    of the 640K-1MB region that uses separate MSRs. This fixed variant has
    a separate capability bit in the MTRR capability MSR.
    
    So far all x86 CPUs which support MTRR have this separate bit set, so it
    went unnoticed that mtrr_save_state() does not check the capability bit
    before accessing the fixed MTRR MSRs.
    
    Though on a CPU that does not support the fixed MTRR capability this
    results in a #GP.  The #GP itself is harmless because the RDMSR fault is
    handled gracefully, but results in a WARN_ON().
    
    Add the missing capability check to prevent this.
    
    Fixes: 2b1f6278d77c ("[PATCH] x86: Save the MTRRs of the BSP before booting an AP")
    Signed-off-by: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20240808000244.946864-1-ak@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/of: Return consistent error type from x86_of_pci_irq_enable() [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Mon May 27 15:55:35 2024 +0300

    x86/of: Return consistent error type from x86_of_pci_irq_enable()
    
    [ Upstream commit ec0b4c4d45cf7cf9a6c9626a494a89cb1ae7c645 ]
    
    x86_of_pci_irq_enable() returns PCIBIOS_* code received from
    pci_read_config_byte() directly and also -EINVAL which are not
    compatible error types. x86_of_pci_irq_enable() is used as
    (*pcibios_enable_irq) function which should not return PCIBIOS_* codes.
    
    Convert the PCIBIOS_* return code from pci_read_config_byte() into
    normal errno using pcibios_err_to_errno().
    
    Fixes: 96e0a0797eba ("x86: dtb: Add support for PCI devices backed by dtb nodes")
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20240527125538.13620-1-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/pci/intel_mid_pci: Fix PCIBIOS_* return code handling [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Mon May 27 15:55:36 2024 +0300

    x86/pci/intel_mid_pci: Fix PCIBIOS_* return code handling
    
    [ Upstream commit 724852059e97c48557151b3aa4af424614819752 ]
    
    intel_mid_pci_irq_enable() uses pci_read_config_byte() that returns
    PCIBIOS_* codes. The error handling, however, assumes the codes are
    normal errnos because it checks for < 0.
    
    intel_mid_pci_irq_enable() also returns the PCIBIOS_* code back to the
    caller but the function is used as the (*pcibios_enable_irq) function
    which should return normal errnos.
    
    Convert the error check to plain non-zero check which works for
    PCIBIOS_* return codes and convert the PCIBIOS_* return code using
    pcibios_err_to_errno() into normal errno before returning it.
    
    Fixes: 5b395e2be6c4 ("x86/platform/intel-mid: Make IRQ allocation a bit more flexible")
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20240527125538.13620-2-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/pci/xen: Fix PCIBIOS_* return code handling [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Mon May 27 15:55:37 2024 +0300

    x86/pci/xen: Fix PCIBIOS_* return code handling
    
    [ Upstream commit e9d7b435dfaec58432f4106aaa632bf39f52ce9f ]
    
    xen_pcifront_enable_irq() uses pci_read_config_byte() that returns
    PCIBIOS_* codes. The error handling, however, assumes the codes are
    normal errnos because it checks for < 0.
    
    xen_pcifront_enable_irq() also returns the PCIBIOS_* code back to the
    caller but the function is used as the (*pcibios_enable_irq) function
    which should return normal errnos.
    
    Convert the error check to plain non-zero check which works for
    PCIBIOS_* return codes and convert the PCIBIOS_* return code using
    pcibios_err_to_errno() into normal errno before returning it.
    
    Fixes: 3f2a230caf21 ("xen: handled remapped IRQs when enabling a pcifront PCI device.")
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Link: https://lore.kernel.org/r/20240527125538.13620-3-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/platform/iosf_mbi: Convert PCIBIOS_* return codes to errnos [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Mon May 27 15:55:38 2024 +0300

    x86/platform/iosf_mbi: Convert PCIBIOS_* return codes to errnos
    
    [ Upstream commit 7821fa101eab529521aa4b724bf708149d70820c ]
    
    iosf_mbi_pci_{read,write}_mdr() use pci_{read,write}_config_dword()
    that return PCIBIOS_* codes but functions also return -ENODEV which are
    not compatible error codes. As neither of the functions are related to
    PCI read/write functions, they should return normal errnos.
    
    Convert PCIBIOS_* returns code using pcibios_err_to_errno() into normal
    errno before returning it.
    
    Fixes: 46184415368a ("arch: x86: New MailBox support driver for Intel SOC's")
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20240527125538.13620-4-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/xen: Convert comma to semicolon [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Tue Jul 2 11:10:10 2024 +0800

    x86/xen: Convert comma to semicolon
    
    [ Upstream commit 349d271416c61f82b853336509b1d0dc04c1fcbb ]
    
    Replace a comma between expression statements by a semicolon.
    
    Fixes: 8310b77b48c5 ("Xen/gnttab: handle p2m update errors on a per-slot basis")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Reviewed-by: Juergen Gross <jgross@suse.com>
    Link: https://lore.kernel.org/r/20240702031010.1411875-1-nichen@iscas.ac.cn
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xdp: fix invalid wait context of page_pool_destroy() [+ + +]
Author: Taehee Yoo <ap420073@gmail.com>
Date:   Fri Jul 12 09:51:16 2024 +0000

    xdp: fix invalid wait context of page_pool_destroy()
    
    [ Upstream commit 59a931c5b732ca5fc2ca727f5a72aeabaafa85ec ]
    
    If the driver uses a page pool, it creates a page pool with
    page_pool_create().
    The reference count of page pool is 1 as default.
    A page pool will be destroyed only when a reference count reaches 0.
    page_pool_destroy() is used to destroy page pool, it decreases a
    reference count.
    When a page pool is destroyed, ->disconnect() is called, which is
    mem_allocator_disconnect().
    This function internally acquires mutex_lock().
    
    If the driver uses XDP, it registers a memory model with
    xdp_rxq_info_reg_mem_model().
    The xdp_rxq_info_reg_mem_model() internally increases a page pool
    reference count if a memory model is a page pool.
    Now the reference count is 2.
    
    To destroy a page pool, the driver should call both page_pool_destroy()
    and xdp_unreg_mem_model().
    The xdp_unreg_mem_model() internally calls page_pool_destroy().
    Only page_pool_destroy() decreases a reference count.
    
    If a driver calls page_pool_destroy() then xdp_unreg_mem_model(), we
    will face an invalid wait context warning.
    Because xdp_unreg_mem_model() calls page_pool_destroy() with
    rcu_read_lock().
    The page_pool_destroy() internally acquires mutex_lock().
    
    Splat looks like:
    =============================
    [ BUG: Invalid wait context ]
    6.10.0-rc6+ #4 Tainted: G W
    -----------------------------
    ethtool/1806 is trying to lock:
    ffffffff90387b90 (mem_id_lock){+.+.}-{4:4}, at: mem_allocator_disconnect+0x73/0x150
    other info that might help us debug this:
    context-{5:5}
    3 locks held by ethtool/1806:
    stack backtrace:
    CPU: 0 PID: 1806 Comm: ethtool Tainted: G W 6.10.0-rc6+ #4 f916f41f172891c800f2fed
    Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021
    Call Trace:
    <TASK>
    dump_stack_lvl+0x7e/0xc0
    __lock_acquire+0x1681/0x4de0
    ? _printk+0x64/0xe0
    ? __pfx_mark_lock.part.0+0x10/0x10
    ? __pfx___lock_acquire+0x10/0x10
    lock_acquire+0x1b3/0x580
    ? mem_allocator_disconnect+0x73/0x150
    ? __wake_up_klogd.part.0+0x16/0xc0
    ? __pfx_lock_acquire+0x10/0x10
    ? dump_stack_lvl+0x91/0xc0
    __mutex_lock+0x15c/0x1690
    ? mem_allocator_disconnect+0x73/0x150
    ? __pfx_prb_read_valid+0x10/0x10
    ? mem_allocator_disconnect+0x73/0x150
    ? __pfx_llist_add_batch+0x10/0x10
    ? console_unlock+0x193/0x1b0
    ? lockdep_hardirqs_on+0xbe/0x140
    ? __pfx___mutex_lock+0x10/0x10
    ? tick_nohz_tick_stopped+0x16/0x90
    ? __irq_work_queue_local+0x1e5/0x330
    ? irq_work_queue+0x39/0x50
    ? __wake_up_klogd.part.0+0x79/0xc0
    ? mem_allocator_disconnect+0x73/0x150
    mem_allocator_disconnect+0x73/0x150
    ? __pfx_mem_allocator_disconnect+0x10/0x10
    ? mark_held_locks+0xa5/0xf0
    ? rcu_is_watching+0x11/0xb0
    page_pool_release+0x36e/0x6d0
    page_pool_destroy+0xd7/0x440
    xdp_unreg_mem_model+0x1a7/0x2a0
    ? __pfx_xdp_unreg_mem_model+0x10/0x10
    ? kfree+0x125/0x370
    ? bnxt_free_ring.isra.0+0x2eb/0x500
    ? bnxt_free_mem+0x5ac/0x2500
    xdp_rxq_info_unreg+0x4a/0xd0
    bnxt_free_mem+0x1356/0x2500
    bnxt_close_nic+0xf0/0x3b0
    ? __pfx_bnxt_close_nic+0x10/0x10
    ? ethnl_parse_bit+0x2c6/0x6d0
    ? __pfx___nla_validate_parse+0x10/0x10
    ? __pfx_ethnl_parse_bit+0x10/0x10
    bnxt_set_features+0x2a8/0x3e0
    __netdev_update_features+0x4dc/0x1370
    ? ethnl_parse_bitset+0x4ff/0x750
    ? __pfx_ethnl_parse_bitset+0x10/0x10
    ? __pfx___netdev_update_features+0x10/0x10
    ? mark_held_locks+0xa5/0xf0
    ? _raw_spin_unlock_irqrestore+0x42/0x70
    ? __pm_runtime_resume+0x7d/0x110
    ethnl_set_features+0x32d/0xa20
    
    To fix this problem, it uses rhashtable_lookup_fast() instead of
    rhashtable_lookup() with rcu_read_lock().
    Using xa without rcu_read_lock() here is safe.
    xa is freed by __xdp_mem_allocator_rcu_free() and this is called by
    call_rcu() of mem_xa_remove().
    The mem_xa_remove() is called by page_pool_destroy() if a reference
    count reaches 0.
    The xa is already protected by the reference count mechanism well in the
    control plane.
    So removing rcu_read_lock() for page_pool_destroy() is safe.
    
    Fixes: c3f812cea0d7 ("page_pool: do not release pool until inflight == 0.")
    Signed-off-by: Taehee Yoo <ap420073@gmail.com>
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Link: https://patch.msgid.link/20240712095116.3801586-1-ap420073@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfs: fix log recovery buffer allocation for the legacy h_size fixup [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Tue Apr 30 06:07:55 2024 +0200

    xfs: fix log recovery buffer allocation for the legacy h_size fixup
    
    commit 45cf976008ddef4a9c9a30310c9b4fb2a9a6602a upstream.
    
    Commit a70f9fe52daa ("xfs: detect and handle invalid iclog size set by
    mkfs") added a fixup for incorrect h_size values used for the initial
    umount record in old xfsprogs versions.  Later commit 0c771b99d6c9
    ("xfs: clean up calculation of LR header blocks") cleaned up the log
    reover buffer calculation, but stoped using the fixed up h_size value
    to size the log recovery buffer, which can lead to an out of bounds
    access when the incorrect h_size does not come from the old mkfs
    tool, but a fuzzer.
    
    Fix this by open coding xlog_logrec_hblks and taking the fixed h_size
    into account for this calculation.
    
    Fixes: 0c771b99d6c9 ("xfs: clean up calculation of LR header blocks")
    Reported-by: Sam Sun <samsun1006219@gmail.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
    Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
    Signed-off-by: Kevin Berry <kpberry@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xprtrdma: Fix rpcrdma_reqs_reset() [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Tue Jun 4 15:45:23 2024 -0400

    xprtrdma: Fix rpcrdma_reqs_reset()
    
    [ Upstream commit acd9f2dd23c632568156217aac7a05f5a0313152 ]
    
    Avoid FastReg operations getting MW_BIND_ERR after a reconnect.
    
    rpcrdma_reqs_reset() is called on transport tear-down to get each
    rpcrdma_req back into a clean state.
    
    MRs on req->rl_registered are waiting for a FastReg, are already
    registered, or are waiting for invalidation. If the transport is
    being torn down when reqs_reset() is called, the matching LocalInv
    might never be posted. That leaves these MR registered /and/ on
    req->rl_free_mrs, where they can be re-used for the next
    connection.
    
    Since xprtrdma does not keep specific track of the MR state, it's
    not possible to know what state these MRs are in, so the only safe
    thing to do is release them immediately.
    
    Fixes: 5de55ce951a1 ("xprtrdma: Release in-flight MRs on disconnect")
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>