commit 4aa6747d935281df8a1888feeb6e22e0097d0b86
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Dec 20 17:00:29 2023 +0100

    Linux 6.1.69
    
    Link: https://lore.kernel.org/r/20231218135055.005497074@linuxfoundation.org
    Tested-by: Conor Dooley <conor.dooley@microchip.com>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>                              =
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Kelsey Steele <kelseysteele@linux.microsoft.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Yann Sionneau <ysionneau@kalrayinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 325556d46bfd13a2fa0d304d0625be86821fd683
Author: Hayes Wang <hayeswang@realtek.com>
Date:   Tue May 2 11:36:27 2023 +0800

    r8152: fix the autosuspend doesn't work
    
    commit 0fbd79c01a9a657348f7032df70c57a406468c86 upstream.
    
    Set supports_autosuspend = 1 for the rtl8152_cfgselector_driver.
    
    Fixes: ec51fbd1b8a2 ("r8152: add USB device driver for config selection")
    Signed-off-by: Hayes Wang <hayeswang@realtek.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4c2ad8e39c62c5288ca31ebf5c30e34f3bd9d044
Author: Hayes Wang <hayeswang@realtek.com>
Date:   Thu Jan 19 15:40:42 2023 +0800

    r8152: remove rtl_vendor_mode function
    
    commit 95a4c1d617b92cdc4522297741b56e8f6cd01a1e upstream.
    
    After commit ec51fbd1b8a2 ("r8152: add USB device driver for
    config selection"), the code about changing USB configuration
    in rtl_vendor_mode() wouldn't be run anymore. Therefore, the
    function could be removed.
    
    Signed-off-by: Hayes Wang <hayeswang@realtek.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1d82735f4bae954d5ba004994b96baec791f874f
Author: Hayes Wang <hayeswang@realtek.com>
Date:   Tue Jan 17 11:03:44 2023 +0800

    r8152: avoid to change cfg for all devices
    
    commit 0d4cda805a183bbe523f2407edb5c14ade50b841 upstream.
    
    The rtl8152_cfgselector_probe() should set the USB configuration to the
    vendor mode only for the devices which the driver (r8152) supports.
    Otherwise, no driver would be used for such devices.
    
    Fixes: ec51fbd1b8a2 ("r8152: add USB device driver for config selection")
    Signed-off-by: Hayes Wang <hayeswang@realtek.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9b3d3a7f3c4d710c1dd3f723851c3eeaf42642bc
Author: John Fastabend <john.fastabend@gmail.com>
Date:   Wed Dec 6 15:27:05 2023 -0800

    net: tls, update curr on splice as well
    
    commit c5a595000e2677e865a39f249c056bc05d6e55fd upstream.
    
    The curr pointer must also be updated on the splice similar to how
    we do this for other copy types.
    
    Fixes: d829e9c4112b ("tls: convert to generic sk_msg interface")
    Signed-off-by: John Fastabend <john.fastabend@gmail.com>
    Reported-by: Jann Horn <jannh@google.com>
    Link: https://lore.kernel.org/r/20231206232706.374377-2-john.fastabend@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 869aee35cf61392c63fdeb153ced3da962a224cf
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Fri Dec 15 08:41:14 2023 -0500

    ring-buffer: Have rb_time_cmpxchg() set the msb counter too
    
    commit 0aa0e5289cfe984a8a9fdd79ccf46ccf080151f7 upstream.
    
    The rb_time_cmpxchg() on 32-bit architectures requires setting three
    32-bit words to represent the 64-bit timestamp, with some salt for
    synchronization. Those are: msb, top, and bottom
    
    The issue is, the rb_time_cmpxchg() did not properly salt the msb portion,
    and the msb that was written was stale.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231215084114.20899342@rorschach.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: f03f2abce4f39 ("ring-buffer: Have 32 bit time stamps use all 64 bits")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c425a772fc58f051f5c8bb01931a4ae3845056b3
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Thu Dec 14 22:29:21 2023 -0500

    ring-buffer: Do not try to put back write_stamp
    
    commit dd939425707898da992e59ab0fcfae4652546910 upstream.
    
    If an update to an event is interrupted by another event between the time
    the initial event allocated its buffer and where it wrote to the
    write_stamp, the code try to reset the write stamp back to the what it had
    just overwritten. It knows that it was overwritten via checking the
    before_stamp, and if it didn't match what it wrote to the before_stamp
    before it allocated its space, it knows it was overwritten.
    
    To put back the write_stamp, it uses the before_stamp it read. The problem
    here is that by writing the before_stamp to the write_stamp it makes the
    two equal again, which means that the write_stamp can be considered valid
    as the last timestamp written to the ring buffer. But this is not
    necessarily true. The event that interrupted the event could have been
    interrupted in a way that it was interrupted as well, and can end up
    leaving with an invalid write_stamp. But if this happens and returns to
    this context that uses the before_stamp to update the write_stamp again,
    it can possibly incorrectly make it valid, causing later events to have in
    correct time stamps.
    
    As it is OK to leave this function with an invalid write_stamp (one that
    doesn't match the before_stamp), there's no reason to try to make it valid
    again in this case. If this race happens, then just leave with the invalid
    write_stamp and the next event to come along will just add a absolute
    timestamp and validate everything again.
    
    Bonus points: This gets rid of another cmpxchg64!
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231214222921.193037a7@gandalf.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: Vincent Donnefort <vdonnefort@google.com>
    Fixes: a389d86f7fd09 ("ring-buffer: Have nested events still record running time stamp")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b15cf1486999b1056afa48aeeb074f862bc127f6
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Tue Dec 12 11:53:01 2023 -0500

    ring-buffer: Fix a race in rb_time_cmpxchg() for 32 bit archs
    
    commit fff88fa0fbc7067ba46dde570912d63da42c59a9 upstream.
    
    Mathieu Desnoyers pointed out an issue in the rb_time_cmpxchg() for 32 bit
    architectures. That is:
    
     static bool rb_time_cmpxchg(rb_time_t *t, u64 expect, u64 set)
     {
            unsigned long cnt, top, bottom, msb;
            unsigned long cnt2, top2, bottom2, msb2;
            u64 val;
    
            /* The cmpxchg always fails if it interrupted an update */
             if (!__rb_time_read(t, &val, &cnt2))
                     return false;
    
             if (val != expect)
                     return false;
    
    <<<< interrupted here!
    
             cnt = local_read(&t->cnt);
    
    The problem is that the synchronization counter in the rb_time_t is read
    *after* the value of the timestamp is read. That means if an interrupt
    were to come in between the value being read and the counter being read,
    it can change the value and the counter and the interrupted process would
    be clueless about it!
    
    The counter needs to be read first and then the value. That way it is easy
    to tell if the value is stale or not. If the counter hasn't been updated,
    then the value is still good.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231211201324.652870-1-mathieu.desnoyers@efficios.com/
    Link: https://lore.kernel.org/linux-trace-kernel/20231212115301.7a9c9a64@gandalf.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Fixes: 10464b4aa605e ("ring-buffer: Add rb_time_t 64 bit operations for speeding up 32 bit")
    Reported-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit edbc03d671f74cfa5080375a6b92b9dfa4a59e93
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Tue Dec 12 11:16:17 2023 -0500

    ring-buffer: Fix writing to the buffer with max_data_size
    
    commit b3ae7b67b87fed771fa5bf95389df06b0433603e upstream.
    
    The maximum ring buffer data size is the maximum size of data that can be
    recorded on the ring buffer. Events must be smaller than the sub buffer
    data size minus any meta data. This size is checked before trying to
    allocate from the ring buffer because the allocation assumes that the size
    will fit on the sub buffer.
    
    The maximum size was calculated as the size of a sub buffer page (which is
    currently PAGE_SIZE minus the sub buffer header) minus the size of the
    meta data of an individual event. But it missed the possible adding of a
    time stamp for events that are added long enough apart that the event meta
    data can't hold the time delta.
    
    When an event is added that is greater than the current BUF_MAX_DATA_SIZE
    minus the size of a time stamp, but still less than or equal to
    BUF_MAX_DATA_SIZE, the ring buffer would go into an infinite loop, looking
    for a page that can hold the event. Luckily, there's a check for this loop
    and after 1000 iterations and a warning is emitted and the ring buffer is
    disabled. But this should never happen.
    
    This can happen when a large event is added first, or after a long period
    where an absolute timestamp is prefixed to the event, increasing its size
    by 8 bytes. This passes the check and then goes into the algorithm that
    causes the infinite loop.
    
    For events that are the first event on the sub-buffer, it does not need to
    add a timestamp, because the sub-buffer itself contains an absolute
    timestamp, and adding one is redundant.
    
    The fix is to check if the event is to be the first event on the
    sub-buffer, and if it is, then do not add a timestamp.
    
    This also fixes 32 bit adding a timestamp when a read of before_stamp or
    write_stamp is interrupted. There's still no need to add that timestamp if
    the event is going to be the first event on the sub buffer.
    
    Also, if the buffer has "time_stamp_abs" set, then also check if the
    length plus the timestamp is greater than the BUF_MAX_DATA_SIZE.
    
    Link: https://lore.kernel.org/all/20231212104549.58863438@gandalf.local.home/
    Link: https://lore.kernel.org/linux-trace-kernel/20231212071837.5fdd6c13@gandalf.local.home
    Link: https://lore.kernel.org/linux-trace-kernel/20231212111617.39e02849@gandalf.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: a4543a2fa9ef3 ("ring-buffer: Get timestamp after event is allocated")
    Fixes: 58fbc3c63275c ("ring-buffer: Consolidate add_timestamp to remove some branches")
    Reported-by: Kent Overstreet <kent.overstreet@linux.dev> # (on IRC)
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6d98d594a5b687204d420cbfd71bdd91665add48
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Tue Dec 12 07:25:58 2023 -0500

    ring-buffer: Have saved event hold the entire event
    
    commit b049525855fdd0024881c9b14b8fbec61c3f53d3 upstream.
    
    For the ring buffer iterator (non-consuming read), the event needs to be
    copied into the iterator buffer to make sure that a writer does not
    overwrite it while the user is reading it. If a write happens during the
    copy, the buffer is simply discarded.
    
    But the temp buffer itself was not big enough. The allocation of the
    buffer was only BUF_MAX_DATA_SIZE, which is the maximum data size that can
    be passed into the ring buffer and saved. But the temp buffer needs to
    hold the meta data as well. That would be BUF_PAGE_SIZE and not
    BUF_MAX_DATA_SIZE.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231212072558.61f76493@gandalf.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: 785888c544e04 ("ring-buffer: Have rb_iter_head_event() handle concurrent writer")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7888b607a981d62361fed299627581e8a039b29a
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Mon Dec 11 11:44:20 2023 -0500

    ring-buffer: Do not update before stamp when switching sub-buffers
    
    commit 9e45e39dc249c970d99d2681f6bcb55736fd725c upstream.
    
    The ring buffer timestamps are synchronized by two timestamp placeholders.
    One is the "before_stamp" and the other is the "write_stamp" (sometimes
    referred to as the "after stamp" but only in the comments. These two
    stamps are key to knowing how to handle nested events coming in with a
    lockless system.
    
    When moving across sub-buffers, the before stamp is updated but the write
    stamp is not. There's an effort to put back the before stamp to something
    that seems logical in case there's nested events. But as the current event
    is about to cross sub-buffers, and so will any new nested event that happens,
    updating the before stamp is useless, and could even introduce new race
    conditions.
    
    The first event on a sub-buffer simply uses the sub-buffer's timestamp
    and keeps a "delta" of zero. The "before_stamp" and "write_stamp" are not
    used in the algorithm in this case. There's no reason to try to fix the
    before_stamp when this happens.
    
    As a bonus, it removes a cmpxchg() when crossing sub-buffers!
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231211114420.36dde01b@gandalf.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: a389d86f7fd09 ("ring-buffer: Have nested events still record running time stamp")
    Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7043c4610ca76be599bcdd7aa0bddd64b6da89a6
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Sun Dec 10 22:54:47 2023 -0500

    tracing: Update snapshot buffer on resize if it is allocated
    
    commit d06aff1cb13d2a0d52b48e605462518149c98c81 upstream.
    
    The snapshot buffer is to mimic the main buffer so that when a snapshot is
    needed, the snapshot and main buffer are swapped. When the snapshot buffer
    is allocated, it is set to the minimal size that the ring buffer may be at
    and still functional. When it is allocated it becomes the same size as the
    main ring buffer, and when the main ring buffer changes in size, it should
    do.
    
    Currently, the resize only updates the snapshot buffer if it's used by the
    current tracer (ie. the preemptirqsoff tracer). But it needs to be updated
    anytime it is allocated.
    
    When changing the size of the main buffer, instead of looking to see if
    the current tracer is utilizing the snapshot buffer, just check if it is
    allocated to know if it should be updated or not.
    
    Also fix typo in comment just above the code change.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231210225447.48476a6a@rorschach.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: ad909e21bbe69 ("tracing: Add internal tracing_snapshot() functions")
    Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 31785cf8171eeee6892462225d133bb61110171f
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Sun Dec 10 22:12:50 2023 -0500

    ring-buffer: Fix memory leak of free page
    
    commit 17d801758157bec93f26faaf5ff1a8b9a552d67a upstream.
    
    Reading the ring buffer does a swap of a sub-buffer within the ring buffer
    with a empty sub-buffer. This allows the reader to have full access to the
    content of the sub-buffer that was swapped out without having to worry
    about contention with the writer.
    
    The readers call ring_buffer_alloc_read_page() to allocate a page that
    will be used to swap with the ring buffer. When the code is finished with
    the reader page, it calls ring_buffer_free_read_page(). Instead of freeing
    the page, it stores it as a spare. Then next call to
    ring_buffer_alloc_read_page() will return this spare instead of calling
    into the memory management system to allocate a new page.
    
    Unfortunately, on freeing of the ring buffer, this spare page is not
    freed, and causes a memory leak.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20231210221250.7b9cc83c@rorschach.local.home
    
    Cc: stable@vger.kernel.org
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: 73a757e63114d ("ring-buffer: Return reader page back into existing ring buffer")
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8c3b77ad4e91e25842b932efce6d3655fe547750
Author: Paulo Alcantara <pc@manguebit.com>
Date:   Mon Dec 11 10:26:43 2023 -0300

    smb: client: fix OOB in smb2_query_reparse_point()
    
    commit 3a42709fa909e22b0be4bb1e2795aa04ada732a3 upstream.
    
    Validate @ioctl_rsp->OutputOffset and @ioctl_rsp->OutputCount so that
    their sum does not wrap to a number that is smaller than @reparse_buf
    and we end up with a wild pointer as follows:
    
      BUG: unable to handle page fault for address: ffff88809c5cd45f
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 4a01067 P4D 4a01067 PUD 0
      Oops: 0000 [#1] PREEMPT SMP NOPTI
      CPU: 2 PID: 1260 Comm: mount.cifs Not tainted 6.7.0-rc4 #2
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
      rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
      RIP: 0010:smb2_query_reparse_point+0x3e0/0x4c0 [cifs]
      Code: ff ff e8 f3 51 fe ff 41 89 c6 58 5a 45 85 f6 0f 85 14 fe ff ff
      49 8b 57 48 8b 42 60 44 8b 42 64 42 8d 0c 00 49 39 4f 50 72 40 <8b>
      04 02 48 8b 9d f0 fe ff ff 49 8b 57 50 89 03 48 8b 9d e8 fe ff
      RSP: 0018:ffffc90000347a90 EFLAGS: 00010212
      RAX: 000000008000001f RBX: ffff88800ae11000 RCX: 00000000000000ec
      RDX: ffff88801c5cd440 RSI: 0000000000000000 RDI: ffffffff82004aa4
      RBP: ffffc90000347bb0 R08: 00000000800000cd R09: 0000000000000001
      R10: 0000000000000000 R11: 0000000000000024 R12: ffff8880114d4100
      R13: ffff8880114d4198 R14: 0000000000000000 R15: ffff8880114d4000
      FS: 00007f02c07babc0(0000) GS:ffff88806ba00000(0000)
      knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: ffff88809c5cd45f CR3: 0000000011750000 CR4: 0000000000750ef0
      PKRU: 55555554
      Call Trace:
       <TASK>
       ? __die+0x23/0x70
       ? page_fault_oops+0x181/0x480
       ? search_module_extables+0x19/0x60
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? exc_page_fault+0x1b6/0x1c0
       ? asm_exc_page_fault+0x26/0x30
       ? _raw_spin_unlock_irqrestore+0x44/0x60
       ? smb2_query_reparse_point+0x3e0/0x4c0 [cifs]
       cifs_get_fattr+0x16e/0xa50 [cifs]
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? lock_acquire+0xbf/0x2b0
       cifs_root_iget+0x163/0x5f0 [cifs]
       cifs_smb3_do_mount+0x5bd/0x780 [cifs]
       smb3_get_tree+0xd9/0x290 [cifs]
       vfs_get_tree+0x2c/0x100
       ? capable+0x37/0x70
       path_mount+0x2d7/0xb80
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? _raw_spin_unlock_irqrestore+0x44/0x60
       __x64_sys_mount+0x11a/0x150
       do_syscall_64+0x47/0xf0
       entry_SYSCALL_64_after_hwframe+0x6f/0x77
      RIP: 0033:0x7f02c08d5b1e
    
    Fixes: 2e4564b31b64 ("smb3: add support for stat of WSL reparse points for special file types")
    Cc: stable@vger.kernel.org
    Reported-by: Robert Morris <rtm@csail.mit.edu>
    Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d8541c50c6715d109215f7361de41ddb903bb326
Author: Paulo Alcantara <pc@manguebit.com>
Date:   Mon Dec 11 10:26:42 2023 -0300

    smb: client: fix NULL deref in asn1_ber_decoder()
    
    commit 90d025c2e953c11974e76637977c473200593a46 upstream.
    
    If server replied SMB2_NEGOTIATE with a zero SecurityBufferOffset,
    smb2_get_data_area() sets @len to non-zero but return NULL, so
    decode_negTokeninit() ends up being called with a NULL @security_blob:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      #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: 2 PID: 871 Comm: mount.cifs Not tainted 6.7.0-rc4 #2
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
      RIP: 0010:asn1_ber_decoder+0x173/0xc80
      Code: 01 4c 39 2c 24 75 09 45 84 c9 0f 85 2f 03 00 00 48 8b 14 24 4c 29 ea 48 83 fa 01 0f 86 1e 07 00 00 48 8b 74 24 28 4d 8d 5d 01 <42> 0f b6 3c 2e 89 fa 40 88 7c 24 5c f7 d2 83 e2 1f 0f 84 3d 07 00
      RSP: 0018:ffffc9000063f950 EFLAGS: 00010202
      RAX: 0000000000000002 RBX: 0000000000000000 RCX: 000000000000004a
      RDX: 000000000000004a RSI: 0000000000000000 RDI: 0000000000000000
      RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000002 R11: 0000000000000001 R12: 0000000000000000
      R13: 0000000000000000 R14: 000000000000004d R15: 0000000000000000
      FS:  00007fce52b0fbc0(0000) GS:ffff88806ba00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000000 CR3: 000000001ae64000 CR4: 0000000000750ef0
      PKRU: 55555554
      Call Trace:
       <TASK>
       ? __die+0x23/0x70
       ? page_fault_oops+0x181/0x480
       ? __stack_depot_save+0x1e6/0x480
       ? exc_page_fault+0x6f/0x1c0
       ? asm_exc_page_fault+0x26/0x30
       ? asn1_ber_decoder+0x173/0xc80
       ? check_object+0x40/0x340
       decode_negTokenInit+0x1e/0x30 [cifs]
       SMB2_negotiate+0xc99/0x17c0 [cifs]
       ? smb2_negotiate+0x46/0x60 [cifs]
       ? srso_alias_return_thunk+0x5/0xfbef5
       smb2_negotiate+0x46/0x60 [cifs]
       cifs_negotiate_protocol+0xae/0x130 [cifs]
       cifs_get_smb_ses+0x517/0x1040 [cifs]
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? queue_delayed_work_on+0x5d/0x90
       cifs_mount_get_session+0x78/0x200 [cifs]
       dfs_mount_share+0x13a/0x9f0 [cifs]
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? lock_acquire+0xbf/0x2b0
       ? find_nls+0x16/0x80
       ? srso_alias_return_thunk+0x5/0xfbef5
       cifs_mount+0x7e/0x350 [cifs]
       cifs_smb3_do_mount+0x128/0x780 [cifs]
       smb3_get_tree+0xd9/0x290 [cifs]
       vfs_get_tree+0x2c/0x100
       ? capable+0x37/0x70
       path_mount+0x2d7/0xb80
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? _raw_spin_unlock_irqrestore+0x44/0x60
       __x64_sys_mount+0x11a/0x150
       do_syscall_64+0x47/0xf0
       entry_SYSCALL_64_after_hwframe+0x6f/0x77
      RIP: 0033:0x7fce52c2ab1e
    
    Fix this by setting @len to zero when @off == 0 so callers won't
    attempt to dereference non-existing data areas.
    
    Reported-by: Robert Morris <rtm@csail.mit.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9f528a8e68327117837b5e28b096f52af4c26a05
Author: Paulo Alcantara <pc@manguebit.com>
Date:   Mon Dec 11 10:26:40 2023 -0300

    smb: client: fix OOB in receive_encrypted_standard()
    
    commit eec04ea119691e65227a97ce53c0da6b9b74b0b7 upstream.
    
    Fix potential OOB in receive_encrypted_standard() if server returned a
    large shdr->NextCommand that would end up writing off the end of
    @next_buffer.
    
    Fixes: b24df3e30cbf ("cifs: update receive_encrypted_standard to handle compounded responses")
    Cc: stable@vger.kernel.org
    Reported-by: Robert Morris <rtm@csail.mit.edu>
    Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7b0faa541f15af170607e565ceca1ae44e6daa35
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Tue Dec 5 20:03:08 2023 +0200

    drm/i915: Fix remapped stride with CCS on ADL+
    
    commit 0ccd963fe555451b1f84e6d14d2b3ef03dd5c947 upstream.
    
    On ADL+ the hardware automagically calculates the CCS AUX surface
    stride from the main surface stride, so when remapping we can't
    really play a lot of tricks with the main surface stride, or else
    the AUX surface stride would get miscalculated and no longer
    match the actual data layout in memory.
    
    Supposedly we could remap in 256 main surface tile units
    (AUX page(4096)/cachline(64)*4(4x1 main surface tiles per
    AUX cacheline)=256 main surface tiles), but the extra complexity
    is probably not worth the hassle.
    
    So let's just make sure our mapping stride is calculated from
    the full framebuffer stride (instead of the framebuffer width).
    This way the stride we program into PLANE_STRIDE will be the
    original framebuffer stride, and thus there will be no change
    to the AUX stride/layout.
    
    Cc: stable@vger.kernel.org
    Cc: Imre Deak <imre.deak@intel.com>
    Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20231205180308.7505-1-ville.syrjala@linux.intel.com
    Reviewed-by: Imre Deak <imre.deak@intel.com>
    (cherry picked from commit 2c12eb36f849256f5eb00ffaee9bf99396fd3814)
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 20907717918f0487258424631b704c7248a72da2
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Mon Jun 19 15:04:24 2023 -0500

    drm/amd/display: Disable PSR-SU on Parade 0803 TCON again
    
    commit e7ab758741672acb21c5d841a9f0309d30e48a06 upstream.
    
    When screen brightness is rapidly changed and PSR-SU is enabled the
    display hangs on panels with this TCON even on the latest DCN 3.1.4
    microcode (0x8002a81 at this time).
    
    This was disabled previously as commit 072030b17830 ("drm/amd: Disable
    PSR-SU on Parade 0803 TCON") but reverted as commit 1e66a17ce546 ("Revert
    "drm/amd: Disable PSR-SU on Parade 0803 TCON"") in favor of testing for
    a new enough microcode (commit cd2e31a9ab93 ("drm/amd/display: Set minimum
    requirement for using PSR-SU on Phoenix")).
    
    As hangs are still happening specifically with this TCON, disable PSR-SU
    again for it until it can be root caused.
    
    Cc: stable@vger.kernel.org
    Cc: aaron.ma@canonical.com
    Cc: binli@gnome.org
    Cc: Marc Rossi <Marc.Rossi@amd.com>
    Cc: Hamza Mahfooz <Hamza.Mahfooz@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2046131
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a9e2de19433fe0b63c080e910cce9954745cd903
Author: Christian König <christian.koenig@amd.com>
Date:   Fri Dec 8 13:43:09 2023 +0100

    drm/amdgpu: fix tear down order in amdgpu_vm_pt_free
    
    commit ceb9a321e7639700844aa3bf234a4e0884f13b77 upstream.
    
    When freeing PD/PT with shadows it can happen that the shadow
    destruction races with detaching the PD/PT from the VM causing a NULL
    pointer dereference in the invalidation code.
    
    Fix this by detaching the the PD/PT from the VM first and then
    freeing the shadow instead.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Fixes: https://gitlab.freedesktop.org/drm/amd/-/issues/2867
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 730b3322b8c3170abd3e25fca7fcbb65ac49dc65
Author: Boris Burkov <boris@bur.io>
Date:   Fri Dec 1 13:00:12 2023 -0800

    btrfs: don't clear qgroup reserved bit in release_folio
    
    commit a86805504b88f636a6458520d85afdf0634e3c6b upstream.
    
    The EXTENT_QGROUP_RESERVED bit is used to "lock" regions of the file for
    duplicate reservations. That is two writes to that range in one
    transaction shouldn't create two reservations, as the reservation will
    only be freed once when the write finally goes down. Therefore, it is
    never OK to clear that bit without freeing the associated qgroup
    reserve. At this point, we don't want to be freeing the reserve, so mask
    off the bit.
    
    CC: stable@vger.kernel.org # 5.15+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9b670e1b644c845d3a0def23c0cce910c1ed0a00
Author: Boris Burkov <boris@bur.io>
Date:   Fri Dec 1 13:00:09 2023 -0800

    btrfs: free qgroup reserve when ORDERED_IOERR is set
    
    commit f63e1164b90b385cd832ff0fdfcfa76c3cc15436 upstream.
    
    An ordered extent completing is a critical moment in qgroup reserve
    handling, as the ownership of the reservation is handed off from the
    ordered extent to the delayed ref. In the happy path we release (unlock)
    but do not free (decrement counter) the reservation, and the delayed ref
    drives the free. However, on an error, we don't create a delayed ref,
    since there is no ref to add. Therefore, free on the error path.
    
    CC: stable@vger.kernel.org # 6.1+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit da9b7c651c6517c2de1099136ed87c0c24f864dd
Author: David Stevens <stevensd@chromium.org>
Date:   Tue Apr 18 17:40:31 2023 +0900

    mm/shmem: fix race in shmem_undo_range w/THP
    
    commit 55ac8bbe358bdd2f3c044c12f249fd22d48fe015 upstream.
    
    Split folios during the second loop of shmem_undo_range.  It's not
    sufficient to only split folios when dealing with partial pages, since
    it's possible for a THP to be faulted in after that point.  Calling
    truncate_inode_folio in that situation can result in throwing away data
    outside of the range being targeted.
    
    [akpm@linux-foundation.org: tidy up comment layout]
    Link: https://lkml.kernel.org/r/20230418084031.3439795-1-stevensd@google.com
    Fixes: b9a8a4195c7d ("truncate,shmem: Handle truncates that split large folios")
    Signed-off-by: David Stevens <stevensd@chromium.org>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Suleiman Souhlal <suleiman@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8ec07b0620ac2a1be92a2e565aa7ae95f02a93a5
Author: Yu Zhao <yuzhao@google.com>
Date:   Thu Dec 7 23:14:04 2023 -0700

    mm/mglru: fix underprotected page cache
    
    commit 081488051d28d32569ebb7c7a23572778b2e7d57 upstream.
    
    Unmapped folios accessed through file descriptors can be underprotected.
    Those folios are added to the oldest generation based on:
    
    1. The fact that they are less costly to reclaim (no need to walk the
       rmap and flush the TLB) and have less impact on performance (don't
       cause major PFs and can be non-blocking if needed again).
    2. The observation that they are likely to be single-use. E.g., for
       client use cases like Android, its apps parse configuration files
       and store the data in heap (anon); for server use cases like MySQL,
       it reads from InnoDB files and holds the cached data for tables in
       buffer pools (anon).
    
    However, the oldest generation can be very short lived, and if so, it
    doesn't provide the PID controller with enough time to respond to a surge
    of refaults.  (Note that the PID controller uses weighted refaults and
    those from evicted generations only take a half of the whole weight.) In
    other words, for a short lived generation, the moving average smooths out
    the spike quickly.
    
    To fix the problem:
    1. For folios that are already on LRU, if they can be beyond the
       tracking range of tiers, i.e., five accesses through file
       descriptors, move them to the second oldest generation to give them
       more time to age. (Note that tiers are used by the PID controller
       to statistically determine whether folios accessed multiple times
       through file descriptors are worth protecting.)
    2. When adding unmapped folios to LRU, adjust the placement of them so
       that they are not too close to the tail. The effect of this is
       similar to the above.
    
    On Android, launching 55 apps sequentially:
                               Before     After      Change
      workingset_refault_anon  25641024   25598972   0%
      workingset_refault_file  115016834  106178438  -8%
    
    Link: https://lkml.kernel.org/r/20231208061407.2125867-1-yuzhao@google.com
    Fixes: ac35a4902374 ("mm: multi-gen LRU: minimal implementation")
    Signed-off-by: Yu Zhao <yuzhao@google.com>
    Reported-by: Charan Teja Kalla <quic_charante@quicinc.com>
    Tested-by: Kalesh Singh <kaleshsingh@google.com>
    Cc: T.J. Mercier <tjmercier@google.com>
    Cc: Kairui Song <ryncsn@gmail.com>
    Cc: Hillf Danton <hdanton@sina.com>
    Cc: Jaroslav Pulchart <jaroslav.pulchart@gooddata.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 40f3ad769ec8eb8a0cf62ee8eae16f41aae16363
Author: Amelie Delaunay <amelie.delaunay@foss.st.com>
Date:   Mon Nov 6 14:48:32 2023 +0100

    dmaengine: stm32-dma: avoid bitfield overflow assertion
    
    commit 54bed6bafa0f38daf9697af50e3aff5ff1354fe1 upstream.
    
    stm32_dma_get_burst() returns a negative error for invalid input, which
    gets turned into a large u32 value in stm32_dma_prep_dma_memcpy() that
    in turn triggers an assertion because it does not fit into a two-bit field:
    drivers/dma/stm32-dma.c: In function 'stm32_dma_prep_dma_memcpy':
    include/linux/compiler_types.h:354:38: error: call to '__compiletime_assert_282' declared with attribute error: FIELD_PREP: value too large for the field
         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
                                             ^
       include/linux/compiler_types.h:335:4: note: in definition of macro '__compiletime_assert'
           prefix ## suffix();    \
           ^~~~~~
       include/linux/compiler_types.h:354:2: note: in expansion of macro '_compiletime_assert'
         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
         ^~~~~~~~~~~~~~~~~~~
       include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
        #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                            ^~~~~~~~~~~~~~~~~~
       include/linux/bitfield.h:68:3: note: in expansion of macro 'BUILD_BUG_ON_MSG'
          BUILD_BUG_ON_MSG(__builtin_constant_p(_val) ?  \
          ^~~~~~~~~~~~~~~~
       include/linux/bitfield.h:114:3: note: in expansion of macro '__BF_FIELD_CHECK'
          __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \
          ^~~~~~~~~~~~~~~~
       drivers/dma/stm32-dma.c:1237:4: note: in expansion of macro 'FIELD_PREP'
           FIELD_PREP(STM32_DMA_SCR_PBURST_MASK, dma_burst) |
           ^~~~~~~~~~
    
    As an easy workaround, assume the error can happen, so try to handle this
    by failing stm32_dma_prep_dma_memcpy() before the assertion. It replicates
    what is done in stm32_dma_set_xfer_param() where stm32_dma_get_burst() is
    also used.
    
    Fixes: 1c32d6c37cc2 ("dmaengine: stm32-dma: use bitfield helpers")
    Fixes: a2b6103b7a8a ("dmaengine: stm32-dma: Improve memory burst management")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
    Cc: stable@vger.kernel.org
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202311060135.Q9eMnpCL-lkp@intel.com/
    Link: https://lore.kernel.org/r/20231106134832.1470305-1-amelie.delaunay@foss.st.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 78b2ba39beef21c8baebb1868569c2026ad76de0
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Thu Dec 7 10:14:41 2023 -0500

    drm/amdgpu/sdma5.2: add begin/end_use ring callbacks
    
    commit ab4750332dbe535243def5dcebc24ca00c1f98ac upstream.
    
    Add begin/end_use ring callbacks to disallow GFXOFF when
    SDMA work is submitted and allow it again afterward.
    
    This should avoid corner cases where GFXOFF is erroneously
    entered when SDMA is still active.  For now just allow/disallow
    GFXOFF in the begin and end helpers until we root cause the
    issue.  This should not impact power as SDMA usage is pretty
    minimal and GFXOSS should not be active when SDMA is active
    anyway, this just makes it explicit.
    
    v2: move everything into sdma5.2 code.  No reason for this
    to be generic at this point.
    v3: Add comments in new code
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2220
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> (v1)
    Tested-by: Mario Limonciello <mario.limonciello@amd.com> (v1)
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org # 5.15+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6a1472d9be02ca03cf7e637f0b4f91545cc88f36
Author: Florent Revest <revest@chromium.org>
Date:   Wed Dec 6 13:37:18 2023 +0100

    team: Fix use-after-free when an option instance allocation fails
    
    commit c12296bbecc488623b7d1932080e394d08f3226b upstream.
    
    In __team_options_register, team_options are allocated and appended to
    the team's option_list.
    If one option instance allocation fails, the "inst_rollback" cleanup
    path frees the previously allocated options but doesn't remove them from
    the team's option_list.
    This leaves dangling pointers that can be dereferenced later by other
    parts of the team driver that iterate over options.
    
    This patch fixes the cleanup path to remove the dangling pointers from
    the list.
    
    As far as I can tell, this uaf doesn't have much security implications
    since it would be fairly hard to exploit (an attacker would need to make
    the allocation of that specific small object fail) but it's still nice
    to fix.
    
    Cc: stable@vger.kernel.org
    Fixes: 80f7c6683fe0 ("team: add support for per-port options")
    Signed-off-by: Florent Revest <revest@chromium.org>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Link: https://lore.kernel.org/r/20231206123719.1963153-1-revest@chromium.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b01af928185173d07b904968f28745821c468d8a
Author: James Houghton <jthoughton@google.com>
Date:   Mon Dec 4 17:26:46 2023 +0000

    arm64: mm: Always make sw-dirty PTEs hw-dirty in pte_modify
    
    commit 3c0696076aad60a2f04c019761921954579e1b0e upstream.
    
    It is currently possible for a userspace application to enter an
    infinite page fault loop when using HugeTLB pages implemented with
    contiguous PTEs when HAFDBS is not available. This happens because:
    
    1. The kernel may sometimes write PTEs that are sw-dirty but hw-clean
       (PTE_DIRTY | PTE_RDONLY | PTE_WRITE).
    
    2. If, during a write, the CPU uses a sw-dirty, hw-clean PTE in handling
       the memory access on a system without HAFDBS, we will get a page
       fault.
    
    3. HugeTLB will check if it needs to update the dirty bits on the PTE.
       For contiguous PTEs, it will check to see if the pgprot bits need
       updating. In this case, HugeTLB wants to write a sequence of
       sw-dirty, hw-dirty PTEs, but it finds that all the PTEs it is about
       to overwrite are all pte_dirty() (pte_sw_dirty() => pte_dirty()),
       so it thinks no update is necessary.
    
    We can get the kernel to write a sw-dirty, hw-clean PTE with the
    following steps (showing the relevant VMA flags and pgprot bits):
    
    i.   Create a valid, writable contiguous PTE.
           VMA vmflags:     VM_SHARED | VM_READ | VM_WRITE
           VMA pgprot bits: PTE_RDONLY | PTE_WRITE
           PTE pgprot bits: PTE_DIRTY | PTE_WRITE
    
    ii.  mprotect the VMA to PROT_NONE.
           VMA vmflags:     VM_SHARED
           VMA pgprot bits: PTE_RDONLY
           PTE pgprot bits: PTE_DIRTY | PTE_RDONLY
    
    iii. mprotect the VMA back to PROT_READ | PROT_WRITE.
           VMA vmflags:     VM_SHARED | VM_READ | VM_WRITE
           VMA pgprot bits: PTE_RDONLY | PTE_WRITE
           PTE pgprot bits: PTE_DIRTY | PTE_WRITE | PTE_RDONLY
    
    Make it impossible to create a writeable sw-dirty, hw-clean PTE with
    pte_modify(). Such a PTE should be impossible to create, and there may
    be places that assume that pte_dirty() implies pte_hw_dirty().
    
    Signed-off-by: James Houghton <jthoughton@google.com>
    Fixes: 031e6e6b4e12 ("arm64: hugetlb: Avoid unnecessary clearing in huge_ptep_set_access_flags")
    Cc: <stable@vger.kernel.org>
    Acked-by: Will Deacon <will@kernel.org>
    Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
    Link: https://lore.kernel.org/r/20231204172646.2541916-3-jthoughton@google.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0b071a3266a819158e550e3c72585c5dba0b0c63
Author: Baokun Li <libaokun1@huawei.com>
Date:   Mon Nov 27 14:33:13 2023 +0800

    ext4: prevent the normalized size from exceeding EXT_MAX_BLOCKS
    
    commit 2dcf5fde6dffb312a4bfb8ef940cea2d1f402e32 upstream.
    
    For files with logical blocks close to EXT_MAX_BLOCKS, the file size
    predicted in ext4_mb_normalize_request() may exceed EXT_MAX_BLOCKS.
    This can cause some blocks to be preallocated that will not be used.
    And after [Fixes], the following issue may be triggered:
    
    =========================================================
     kernel BUG at fs/ext4/mballoc.c:4653!
     Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
     CPU: 1 PID: 2357 Comm: xfs_io 6.7.0-rc2-00195-g0f5cc96c367f
     Hardware name: linux,dummy-virt (DT)
     pc : ext4_mb_use_inode_pa+0x148/0x208
     lr : ext4_mb_use_inode_pa+0x98/0x208
     Call trace:
      ext4_mb_use_inode_pa+0x148/0x208
      ext4_mb_new_inode_pa+0x240/0x4a8
      ext4_mb_use_best_found+0x1d4/0x208
      ext4_mb_try_best_found+0xc8/0x110
      ext4_mb_regular_allocator+0x11c/0xf48
      ext4_mb_new_blocks+0x790/0xaa8
      ext4_ext_map_blocks+0x7cc/0xd20
      ext4_map_blocks+0x170/0x600
      ext4_iomap_begin+0x1c0/0x348
    =========================================================
    
    Here is a calculation when adjusting ac_b_ex in ext4_mb_new_inode_pa():
    
            ex.fe_logical = orig_goal_end - EXT4_C2B(sbi, ex.fe_len);
            if (ac->ac_o_ex.fe_logical >= ex.fe_logical)
                    goto adjust_bex;
    
    The problem is that when orig_goal_end is subtracted from ac_b_ex.fe_len
    it is still greater than EXT_MAX_BLOCKS, which causes ex.fe_logical to
    overflow to a very small value, which ultimately triggers a BUG_ON in
    ext4_mb_new_inode_pa() because pa->pa_free < len.
    
    The last logical block of an actual write request does not exceed
    EXT_MAX_BLOCKS, so in ext4_mb_normalize_request() also avoids normalizing
    the last logical block to exceed EXT_MAX_BLOCKS to avoid the above issue.
    
    The test case in [Link] can reproduce the above issue with 64k block size.
    
    Link: https://patchwork.kernel.org/project/fstests/list/?series=804003
    Cc:  <stable@kernel.org> # 6.4
    Fixes: 93cdf49f6eca ("ext4: Fix best extent lstart adjustment logic in ext4_mb_new_inode_pa()")
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20231127063313.3734294-1-libaokun1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f2955dd3e9334c9b070e6f5696f3ebc57be88ae6
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Fri Nov 24 19:01:36 2023 +0100

    soundwire: stream: fix NULL pointer dereference for multi_link
    
    commit e199bf52ffda8f98f129728d57244a9cd9ad5623 upstream.
    
    If bus is marked as multi_link, but number of masters in the stream is
    not higher than bus->hw_sync_min_links (bus->multi_link && m_rt_count >=
    bus->hw_sync_min_links), bank switching should not happen.  The first
    part of do_bank_switch() code properly takes these conditions into
    account, but second part (sdw_ml_sync_bank_switch()) relies purely on
    bus->multi_link property.  This is not balanced and leads to NULL
    pointer dereference:
    
      Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
      ...
      Call trace:
       wait_for_completion_timeout+0x124/0x1f0
       do_bank_switch+0x370/0x6f8
       sdw_prepare_stream+0x2d0/0x438
       qcom_snd_sdw_prepare+0xa0/0x118
       sm8450_snd_prepare+0x128/0x148
       snd_soc_link_prepare+0x5c/0xe8
       __soc_pcm_prepare+0x28/0x1ec
       dpcm_be_dai_prepare+0x1e0/0x2c0
       dpcm_fe_dai_prepare+0x108/0x28c
       snd_pcm_do_prepare+0x44/0x68
       snd_pcm_action_single+0x54/0xc0
       snd_pcm_action_nonatomic+0xe4/0xec
       snd_pcm_prepare+0xc4/0x114
       snd_pcm_common_ioctl+0x1154/0x1cc0
       snd_pcm_ioctl+0x54/0x74
    
    Fixes: ce6e74d008ff ("soundwire: Add support for multi link bank switch")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20231124180136.390621-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 56f762659a5e9fde8220a88e19fd5ec4b12eda6d
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Dec 15 10:01:44 2023 -0500

    btrfs: do not allow non subvolume root targets for snapshot
    
    commit a8892fd71933126ebae3d60aec5918d4dceaae76 upstream.
    
    Our btrfs subvolume snapshot <source> <destination> utility enforces
    that <source> is the root of the subvolume, however this isn't enforced
    in the kernel.  Update the kernel to also enforce this limitation to
    avoid problems with other users of this ioctl that don't have the
    appropriate checks in place.
    
    Reported-by: Martin Michaelis <code@mgjm.de>
    CC: stable@vger.kernel.org # 4.14+
    Reviewed-by: Neal Gompa <neal@gompa.dev>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 557f7ad0646052d91660df2848cb098a2c6a52b4
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Dec 15 11:24:50 2023 +0000

    perf: Fix perf_event_validate_size() lockdep splat
    
    commit 7e2c1e4b34f07d9aa8937fab88359d4a0fce468e upstream.
    
    When lockdep is enabled, the for_each_sibling_event(sibling, event)
    macro checks that event->ctx->mutex is held. When creating a new group
    leader event, we call perf_event_validate_size() on a partially
    initialized event where event->ctx is NULL, and so when
    for_each_sibling_event() attempts to check event->ctx->mutex, we get a
    splat, as reported by Lucas De Marchi:
    
      WARNING: CPU: 8 PID: 1471 at kernel/events/core.c:1950 __do_sys_perf_event_open+0xf37/0x1080
    
    This only happens for a new event which is its own group_leader, and in
    this case there cannot be any sibling events. Thus it's safe to skip the
    check for siblings, which avoids having to make invasive and ugly
    changes to for_each_sibling_event().
    
    Avoid the splat by bailing out early when the new event is its own
    group_leader.
    
    Fixes: 382c27f4ed28f803 ("perf: Fix perf_event_validate_size()")
    Closes: https://lore.kernel.org/lkml/20231214000620.3081018-1-lucas.demarchi@intel.com/
    Closes: https://lore.kernel.org/lkml/ZXpm6gQ%2Fd59jGsuW@xpf.sh.intel.com/
    Reported-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Reported-by: Pengfei Xu <pengfei.xu@intel.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20231215112450.3972309-1-mark.rutland@arm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a684235d30352dcbb17227d6978b15fb3bd896fa
Author: Denis Benato <benato.denis96@gmail.com>
Date:   Fri Nov 17 14:15:55 2023 +1300

    HID: hid-asus: add const to read-only outgoing usb buffer
    
    [ Upstream commit 06ae5afce8cc1f7621cc5c7751e449ce20d68af7 ]
    
    In the function asus_kbd_set_report the parameter buf is read-only
    as it gets copied in a memory portion suitable for USB transfer,
    but the parameter is not marked as const: add the missing const and mark
    const immutable buffers passed to that function.
    
    Signed-off-by: Denis Benato <benato.denis96@gmail.com>
    Signed-off-by: Luke D. Jones <luke@ljones.dev>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2b9e16bc1ce5da17a97b65c33abbacc3f507fdc9
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sun Nov 19 14:32:34 2023 +0900

    arm64: add dependency between vmlinuz.efi and Image
    
    [ Upstream commit c0a8574204054effad6ac83cc75c02576e2985fe ]
    
    A common issue in Makefile is a race in parallel building.
    
    You need to be careful to prevent multiple threads from writing to the
    same file simultaneously.
    
    Commit 3939f3345050 ("ARM: 8418/1: add boot image dependencies to not
    generate invalid images") addressed such a bad scenario.
    
    A similar symptom occurs with the following command:
    
      $ make -j$(nproc) ARCH=arm64 Image vmlinuz.efi
        [ snip ]
        SORTTAB vmlinux
        OBJCOPY arch/arm64/boot/Image
        OBJCOPY arch/arm64/boot/Image
        AS      arch/arm64/boot/zboot-header.o
        PAD     arch/arm64/boot/vmlinux.bin
        GZIP    arch/arm64/boot/vmlinuz
        OBJCOPY arch/arm64/boot/vmlinuz.o
        LD      arch/arm64/boot/vmlinuz.efi.elf
        OBJCOPY arch/arm64/boot/vmlinuz.efi
    
    The log "OBJCOPY arch/arm64/boot/Image" is displayed twice.
    
    It indicates that two threads simultaneously enter arch/arm64/boot/
    and write to arch/arm64/boot/Image.
    
    It occasionally leads to a build failure:
    
      $ make -j$(nproc) ARCH=arm64 Image vmlinuz.efi
        [ snip ]
        SORTTAB vmlinux
        OBJCOPY arch/arm64/boot/Image
        PAD     arch/arm64/boot/vmlinux.bin
      truncate: Invalid number: 'arch/arm64/boot/vmlinux.bin'
      make[2]: *** [drivers/firmware/efi/libstub/Makefile.zboot:13:
      arch/arm64/boot/vmlinux.bin] Error 1
      make[2]: *** Deleting file 'arch/arm64/boot/vmlinux.bin'
      make[1]: *** [arch/arm64/Makefile:163: vmlinuz.efi] Error 2
      make[1]: *** Waiting for unfinished jobs....
      make: *** [Makefile:234: __sub-make] Error 2
    
    vmlinuz.efi depends on Image, but such a dependency is not specified
    in arch/arm64/Makefile.
    
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Reviewed-by: SImon Glass <sjg@chromium.org>
    Link: https://lore.kernel.org/r/20231119053234.2367621-1-masahiroy@kernel.org
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 6cb0c71c6e7c5f54ea93e3055b323df13c05dddc
Author: Lech Perczak <lech.perczak@gmail.com>
Date:   Sat Nov 18 00:19:18 2023 +0100

    net: usb: qmi_wwan: claim interface 4 for ZTE MF290
    
    [ Upstream commit 99360d9620f09fb8bc15548d855011bbb198c680 ]
    
    Interface 4 is used by for QMI interface in stock firmware of MF28D, the
    router which uses MF290 modem. Rebind it to qmi_wwan after freeing it up
    from option driver.
    The proper configuration is:
    
    Interface mapping is:
    0: QCDM, 1: (unknown), 2: AT (PCUI), 2: AT (Modem), 4: QMI
    
    T:  Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  4 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=19d2 ProdID=0189 Rev= 0.00
    S:  Manufacturer=ZTE, Incorporated
    S:  Product=ZTE LTE Technologies MSM
    C:* #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=84(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
    E:  Ad=86(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
    
    Cc: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
    Link: https://lore.kernel.org/r/20231117231918.100278-3-lech.perczak@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit f7ce765744a3c7303d27923d8bd3d8e5f1636d8c
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Thu Nov 9 22:22:13 2023 -0800

    asm-generic: qspinlock: fix queued_spin_value_unlocked() implementation
    
    [ Upstream commit 125b0bb95dd6bec81b806b997a4ccb026eeecf8f ]
    
    We really don't want to do atomic_read() or anything like that, since we
    already have the value, not the lock.  The whole point of this is that
    we've loaded the lock from memory, and we want to check whether the
    value we loaded was a locked one or not.
    
    The main use of this is the lockref code, which loads both the lock and
    the reference count in one atomic operation, and then works on that
    combined value.  With the atomic_read(), the compiler would pointlessly
    spill the value to the stack, in order to then be able to read it back
    "atomically".
    
    This is the qspinlock version of commit c6f4a9002252 ("asm-generic:
    ticket-lock: Optimize arch_spin_value_unlocked()") which fixed this same
    bug for ticket locks.
    
    Cc: Guo Ren <guoren@kernel.org>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Waiman Long <longman@redhat.com>
    Link: https://lore.kernel.org/all/CAHk-=whNRv0v6kQiV5QO6DJhjH4KEL36vWQ6Re8Csrnh4zbRkQ@mail.gmail.com/
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit fba6e958caa1f423d868a705b897837273e5a011
Author: Aoba K <nexp_0x17@outlook.com>
Date:   Tue Nov 21 20:23:11 2023 +0800

    HID: multitouch: Add quirk for HONOR GLO-GXXX touchpad
    
    [ Upstream commit 9ffccb691adb854e7b7f3ee57fbbda12ff70533f ]
    
    Honor MagicBook 13 2023 has a touchpad which do not switch to the multitouch
    mode until the input mode feature is written by the host.  The touchpad do
    report the input mode at touchpad(3), while itself working under mouse mode. As
    a workaround, it is possible to call MT_QUIRE_FORCE_GET_FEATURE to force set
    feature in mt_set_input_mode for such device.
    
    The touchpad reports as BLTP7853, which cannot retrive any useful manufacture
    information on the internel by this string at present.  As the serial number of
    the laptop is GLO-G52, while DMI info reports the laptop serial number as
    GLO-GXXX, this workaround should applied to all models which has the GLO-GXXX.
    
    Signed-off-by: Aoba K <nexp_0x17@outlook.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 8f0c8585856c2691cf8ace1ed35ef10d42b16c45
Author: Denis Benato <benato.denis96@gmail.com>
Date:   Fri Nov 17 14:15:56 2023 +1300

    HID: hid-asus: reset the backlight brightness level on resume
    
    [ Upstream commit 546edbd26cff7ae990e480a59150e801a06f77b1 ]
    
    Some devices managed by this driver automatically set brightness to 0
    before entering a suspended state and reset it back to a default
    brightness level after the resume:
    this has the effect of having the kernel report wrong brightness
    status after a sleep, and on some devices (like the Asus RC71L) that
    brightness is the intensity of LEDs directly facing the user.
    
    Fix the above issue by setting back brightness to the level it had
    before entering a sleep state.
    
    Signed-off-by: Denis Benato <benato.denis96@gmail.com>
    Signed-off-by: Luke D. Jones <luke@ljones.dev>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit de78e4bdcb5e22e107da6f12fcced21cb7a25b2b
Author: Li Nan <linan122@huawei.com>
Date:   Mon Sep 11 10:33:08 2023 +0800

    nbd: pass nbd_sock to nbd_read_reply() instead of index
    
    [ Upstream commit 98c598afc22d4e43c2ad91860b65996d0c099a5d ]
    
    If a socket is processing ioctl 'NBD_SET_SOCK', config->socks might be
    krealloc in nbd_add_socket(), and a garbage request is received now, a UAF
    may occurs.
    
      T1
      nbd_ioctl
       __nbd_ioctl
        nbd_add_socket
         blk_mq_freeze_queue
                                    T2
                                    recv_work
                                     nbd_read_reply
                                      sock_xmit
         krealloc config->socks
                                       def config->socks
    
    Pass nbd_sock to nbd_read_reply(). And introduce a new function
    sock_xmit_recv(), which differs from sock_xmit only in the way it get
    socket.
    
    ==================================================================
    BUG: KASAN: use-after-free in sock_xmit+0x525/0x550
    Read of size 8 at addr ffff8880188ec428 by task kworker/u12:1/18779
    
    Workqueue: knbd4-recv recv_work
    Call Trace:
     __dump_stack
     dump_stack+0xbe/0xfd
     print_address_description.constprop.0+0x19/0x170
     __kasan_report.cold+0x6c/0x84
     kasan_report+0x3a/0x50
     sock_xmit+0x525/0x550
     nbd_read_reply+0xfe/0x2c0
     recv_work+0x1c2/0x750
     process_one_work+0x6b6/0xf10
     worker_thread+0xdd/0xd80
     kthread+0x30a/0x410
     ret_from_fork+0x22/0x30
    
    Allocated by task 18784:
     kasan_save_stack+0x1b/0x40
     kasan_set_track
     set_alloc_info
     __kasan_kmalloc
     __kasan_kmalloc.constprop.0+0xf0/0x130
     slab_post_alloc_hook
     slab_alloc_node
     slab_alloc
     __kmalloc_track_caller+0x157/0x550
     __do_krealloc
     krealloc+0x37/0xb0
     nbd_add_socket
     +0x2d3/0x880
     __nbd_ioctl
     nbd_ioctl+0x584/0x8e0
     __blkdev_driver_ioctl
     blkdev_ioctl+0x2a0/0x6e0
     block_ioctl+0xee/0x130
     vfs_ioctl
     __do_sys_ioctl
     __se_sys_ioctl+0x138/0x190
     do_syscall_64+0x33/0x40
     entry_SYSCALL_64_after_hwframe+0x61/0xc6
    
    Freed by task 18784:
     kasan_save_stack+0x1b/0x40
     kasan_set_track+0x1c/0x30
     kasan_set_free_info+0x20/0x40
     __kasan_slab_free.part.0+0x13f/0x1b0
     slab_free_hook
     slab_free_freelist_hook
     slab_free
     kfree+0xcb/0x6c0
     krealloc+0x56/0xb0
     nbd_add_socket+0x2d3/0x880
     __nbd_ioctl
     nbd_ioctl+0x584/0x8e0
     __blkdev_driver_ioctl
     blkdev_ioctl+0x2a0/0x6e0
     block_ioctl+0xee/0x130
     vfs_ioctl
     __do_sys_ioctl
     __se_sys_ioctl+0x138/0x190
     do_syscall_64+0x33/0x40
     entry_SYSCALL_64_after_hwframe+0x61/0xc6
    
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/20230911023308.3467802-1-linan666@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit d482bb566344c123ed2619dcf649a3ab6242122d
Author: Oliver Neukum <oneukum@suse.com>
Date:   Tue Nov 14 15:54:30 2023 +0100

    HID: add ALWAYS_POLL quirk for Apple kb
    
    [ Upstream commit c55092187d9ad7b2f8f5a8645286fa03997d442f ]
    
    These devices disconnect if suspended without remote wakeup. They can operate
    with the standard driver.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 541b183be92f26a0bdf98c7f91606bd91678dc4f
Author: Brett Raye <braye@fastmail.com>
Date:   Thu Nov 2 18:10:38 2023 -0700

    HID: glorious: fix Glorious Model I HID report
    
    [ Upstream commit a5e913c25b6b2b6ae02acef6d9400645ac03dfdf ]
    
    The Glorious Model I mouse has a buggy HID report descriptor for its
    keyboard endpoint (used for programmable buttons). For report ID 2, there
    is a mismatch between Logical Minimum and Usage Minimum in the array that
    reports keycodes.
    
    The offending portion of the descriptor: (from hid-decode)
    
    0x95, 0x05,                    //  Report Count (5)                   30
    0x75, 0x08,                    //  Report Size (8)                    32
    0x15, 0x00,                    //  Logical Minimum (0)                34
    0x25, 0x65,                    //  Logical Maximum (101)              36
    0x05, 0x07,                    //  Usage Page (Keyboard)              38
    0x19, 0x01,                    //  Usage Minimum (1)                  40
    0x29, 0x65,                    //  Usage Maximum (101)                42
    0x81, 0x00,                    //  Input (Data,Arr,Abs)               44
    
    This bug shifts all programmed keycodes up by 1. Importantly, this causes
    "empty" array indexes of 0x00 to be interpreted as 0x01, ErrorRollOver.
    The presence of ErrorRollOver causes the system to ignore all keypresses
    from the endpoint and breaks the ability to use the programmable buttons.
    
    Setting byte 41 to 0x00 fixes this, and causes keycodes to be interpreted
    correctly.
    
    Also, USB_VENDOR_ID_GLORIOUS is changed to USB_VENDOR_ID_SINOWEALTH,
    and a new ID for Laview Technology is added. Glorious seems to be
    white-labeling controller boards or mice from these vendors. There isn't a
    single canonical vendor ID for Glorious products.
    
    Signed-off-by: Brett Raye <braye@fastmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 42b4ab97bee5ae4176059e0c24a182bb2706e188
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Nov 20 17:07:56 2023 +0200

    platform/x86: intel_telemetry: Fix kernel doc descriptions
    
    [ Upstream commit a6584711e64d9d12ab79a450ec3628fd35e4f476 ]
    
    LKP found issues with a kernel doc in the driver:
    
    core.c:116: warning: Function parameter or member 'ioss_evtconfig' not described in 'telemetry_update_events'
    core.c:188: warning: Function parameter or member 'ioss_evtconfig' not described in 'telemetry_get_eventconfig'
    
    It looks like it were copy'n'paste typos when these descriptions
    had been introduced. Fix the typos.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202310070743.WALmRGSY-lkp@intel.com/
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20231120150756.1661425-1-andriy.shevchenko@linux.intel.com
    Reviewed-by: Rajneesh Bhardwaj <irenic.rajneesh@gmail.com>
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 355170a7ecac4ffd3f2b3022a9238b72f202220b
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Tue Nov 21 15:03:25 2023 +0800

    LoongArch: Implement constant timer shutdown interface
    
    [ Upstream commit d43f37b73468c172bc89ac4824a1511b411f0778 ]
    
    When a cpu is hot-unplugged, it is put in idle state and the function
    arch_cpu_idle_dead() is called. The timer interrupt for this processor
    should be disabled, otherwise there will be pending timer interrupt for
    the unplugged cpu, so that vcpu is prevented from giving up scheduling
    when system is running in vm mode.
    
    This patch implements the timer shutdown interface so that the constant
    timer will be properly disabled when a CPU is hot-unplugged.
    
    Reviewed-by: WANG Xuerui <git@xen0n.name>
    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit adb6a907540c38af8efc9438ace205b228f6a78f
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Tue Nov 21 15:03:25 2023 +0800

    LoongArch: Add dependency between vmlinuz.efi and vmlinux.efi
    
    [ Upstream commit d3ec75bc635cb0cb8185b63293d33a3d1b942d22 ]
    
    A common issue in Makefile is a race in parallel building.
    
    You need to be careful to prevent multiple threads from writing to the
    same file simultaneously.
    
    Commit 3939f3345050 ("ARM: 8418/1: add boot image dependencies to not
    generate invalid images") addressed such a bad scenario.
    
    A similar symptom occurs with the following command:
    
      $ make -j$(nproc) ARCH=loongarch vmlinux.efi vmlinuz.efi
        [ snip ]
        SORTTAB vmlinux
        OBJCOPY arch/loongarch/boot/vmlinux.efi
        OBJCOPY arch/loongarch/boot/vmlinux.efi
        PAD     arch/loongarch/boot/vmlinux.bin
        GZIP    arch/loongarch/boot/vmlinuz
        OBJCOPY arch/loongarch/boot/vmlinuz.o
        LD      arch/loongarch/boot/vmlinuz.efi.elf
        OBJCOPY arch/loongarch/boot/vmlinuz.efi
    
    The log "OBJCOPY arch/loongarch/boot/vmlinux.efi" is displayed twice.
    
    It indicates that two threads simultaneously enter arch/loongarch/boot/
    and write to arch/loongarch/boot/vmlinux.efi.
    
    It occasionally leads to a build failure:
    
      $ make -j$(nproc) ARCH=loongarch vmlinux.efi vmlinuz.efi
        [ snip ]
        SORTTAB vmlinux
        OBJCOPY arch/loongarch/boot/vmlinux.efi
        PAD     arch/loongarch/boot/vmlinux.bin
      truncate: Invalid number: ‘arch/loongarch/boot/vmlinux.bin’
      make[2]: *** [drivers/firmware/efi/libstub/Makefile.zboot:13:
      arch/loongarch/boot/vmlinux.bin] Error 1
      make[2]: *** Deleting file 'arch/loongarch/boot/vmlinux.bin'
      make[1]: *** [arch/loongarch/Makefile:146: vmlinuz.efi] Error 2
      make[1]: *** Waiting for unfinished jobs....
      make: *** [Makefile:234: __sub-make] Error 2
    
    vmlinuz.efi depends on vmlinux.efi, but such a dependency is not
    specified in arch/loongarch/Makefile.
    
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 943cde1f3daa9c760c72fbdb8d2906940a9dde70
Author: Eduard Zingerman <eddyz87@gmail.com>
Date:   Tue Nov 21 04:06:53 2023 +0200

    selftests/bpf: fix bpf_loop_bench for new callback verification scheme
    
    [ Upstream commit f40bfd1679446b22d321e64a1fa98b7d07d2be08 ]
    
    This is a preparatory change. A follow-up patch "bpf: verify callbacks
    as if they are called unknown number of times" changes logic for
    callbacks handling. While previously callbacks were verified as a
    single function call, new scheme takes into account that callbacks
    could be executed unknown number of times.
    
    This has dire implications for bpf_loop_bench:
    
        SEC("fentry/" SYS_PREFIX "sys_getpgid")
        int benchmark(void *ctx)
        {
                for (int i = 0; i < 1000; i++) {
                        bpf_loop(nr_loops, empty_callback, NULL, 0);
                        __sync_add_and_fetch(&hits, nr_loops);
                }
                return 0;
        }
    
    W/o callbacks change verifier sees it as a 1000 calls to
    empty_callback(). However, with callbacks change things become
    exponential:
    - i=0: state exploring empty_callback is scheduled with i=0 (a);
    - i=1: state exploring empty_callback is scheduled with i=1;
      ...
    - i=999: state exploring empty_callback is scheduled with i=999;
    - state (a) is popped from stack;
    - i=1: state exploring empty_callback is scheduled with i=1;
      ...
    
    Avoid this issue by rewriting outer loop as bpf_loop().
    Unfortunately, this adds a function call to a loop at runtime, which
    negatively affects performance:
    
                throughput               latency
       before:  149.919 ± 0.168 M ops/s, 6.670 ns/op
       after :  137.040 ± 0.187 M ops/s, 7.297 ns/op
    
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/r/20231121020701.26440-4-eddyz87@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 1b40f23e702e5314f9908fd6d14fca5edf9409e9
Author: Hannes Reinecke <hare@suse.de>
Date:   Tue Nov 14 14:27:01 2023 +0100

    nvme: catch errors from nvme_configure_metadata()
    
    [ Upstream commit cd9aed606088d36a7ffff3e808db4e76b1854285 ]
    
    nvme_configure_metadata() is issuing I/O, so we might incur an I/O
    error which will cause the connection to be reset.
    But in that case any further probing will race with reset and
    cause UAF errors.
    So return a status from nvme_configure_metadata() and abort
    probing if there was an I/O error.
    
    Signed-off-by: Hannes Reinecke <hare@suse.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 6cb3741c45824cac2696eb9948cdc5e4192583d1
Author: Mark O'Donovan <shiftee@posteo.net>
Date:   Wed Oct 11 08:45:12 2023 +0000

    nvme-auth: set explanation code for failure2 msgs
    
    [ Upstream commit 38ce1570e2c46e7e9af983aa337edd7e43723aa2 ]
    
    Some error cases were not setting an auth-failure-reason-code-explanation.
    This means an AUTH_Failure2 message will be sent with an explanation value
    of 0 which is a reserved value.
    
    Signed-off-by: Mark O'Donovan <shiftee@posteo.net>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 83bb13bf6c230687a0833707a2e490939cd718f6
Author: Li Nan <linan122@huawei.com>
Date:   Fri Nov 17 00:23:14 2023 +0800

    nbd: fold nbd config initialization into nbd_alloc_config()
    
    [ Upstream commit 1b59860540a4018e8071dc18d4893ec389506b7d ]
    
    There are no functional changes, make the code cleaner and prepare to
    fix null-ptr-dereference while accessing 'nbd->config'.
    
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Link: https://lore.kernel.org/r/20231116162316.1740402-2-linan666@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 02a4b14d17abdf76a88001ad924b44d75b14ef75
Author: Coly Li <colyli@suse.de>
Date:   Mon Nov 20 13:25:03 2023 +0800

    bcache: avoid NULL checking to c->root in run_cache_set()
    
    [ Upstream commit 3eba5e0b2422aec3c9e79822029599961fdcab97 ]
    
    In run_cache_set() after c->root returned from bch_btree_node_get(), it
    is checked by IS_ERR_OR_NULL(). Indeed it is unncessary to check NULL
    because bch_btree_node_get() will not return NULL pointer to caller.
    
    This patch replaces IS_ERR_OR_NULL() by IS_ERR() for the above reason.
    
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20231120052503.6122-11-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 3d3f72efc77dbfceda277bc0487e927d583f0e31
Author: Coly Li <colyli@suse.de>
Date:   Mon Nov 20 13:25:02 2023 +0800

    bcache: add code comments for bch_btree_node_get() and __bch_btree_node_alloc()
    
    [ Upstream commit 31f5b956a197d4ec25c8a07cb3a2ab69d0c0b82f ]
    
    This patch adds code comments to bch_btree_node_get() and
    __bch_btree_node_alloc() that NULL pointer will not be returned and it
    is unnecessary to check NULL pointer by the callers of these routines.
    
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20231120052503.6122-10-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit bc17ec4215e257939a54d1a5fb04187216e2d8f9
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Mon Nov 20 13:24:56 2023 +0800

    bcache: remove redundant assignment to variable cur_idx
    
    [ Upstream commit be93825f0e6428c2d3f03a6e4d447dc48d33d7ff ]
    
    Variable cur_idx is being initialized with a value that is never read,
    it is being re-assigned later in a while-loop. Remove the redundant
    assignment. Cleans up clang scan build warning:
    
    drivers/md/bcache/writeback.c:916:2: warning: Value stored to 'cur_idx'
    is never read [deadcode.DeadStores]
    
    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Reviewed-by: Coly Li <colyli@suse.de>
    Signed-off-by: Coly Li <colyli@suse.de>
    Link: https://lore.kernel.org/r/20231120052503.6122-4-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit be0e2a28e06acf4fb83ee6e0c4495be58b8f6070
Author: Coly Li <colyli@suse.de>
Date:   Mon Nov 20 13:24:54 2023 +0800

    bcache: avoid oversize memory allocation by small stripe_size
    
    [ Upstream commit baf8fb7e0e5ec54ea0839f0c534f2cdcd79bea9c ]
    
    Arraies bcache->stripe_sectors_dirty and bcache->full_dirty_stripes are
    used for dirty data writeback, their sizes are decided by backing device
    capacity and stripe size. Larger backing device capacity or smaller
    stripe size make these two arraies occupies more dynamic memory space.
    
    Currently bcache->stripe_size is directly inherited from
    queue->limits.io_opt of underlying storage device. For normal hard
    drives, its limits.io_opt is 0, and bcache sets the corresponding
    stripe_size to 1TB (1<<31 sectors), it works fine 10+ years. But for
    devices do declare value for queue->limits.io_opt, small stripe_size
    (comparing to 1TB) becomes an issue for oversize memory allocations of
    bcache->stripe_sectors_dirty and bcache->full_dirty_stripes, while the
    capacity of hard drives gets much larger in recent decade.
    
    For example a raid5 array assembled by three 20TB hardrives, the raid
    device capacity is 40TB with typical 512KB limits.io_opt. After the math
    calculation in bcache code, these two arraies will occupy 400MB dynamic
    memory. Even worse Andrea Tomassetti reports that a 4KB limits.io_opt is
    declared on a new 2TB hard drive, then these two arraies request 2GB and
    512MB dynamic memory from kzalloc(). The result is that bcache device
    always fails to initialize on his system.
    
    To avoid the oversize memory allocation, bcache->stripe_size should not
    directly inherited by queue->limits.io_opt from the underlying device.
    This patch defines BCH_MIN_STRIPE_SZ (4MB) as minimal bcache stripe size
    and set bcache device's stripe size against the declared limits.io_opt
    value from the underlying storage device,
    - If the declared limits.io_opt > BCH_MIN_STRIPE_SZ, bcache device will
      set its stripe size directly by this limits.io_opt value.
    - If the declared limits.io_opt < BCH_MIN_STRIPE_SZ, bcache device will
      set its stripe size by a value multiplying limits.io_opt and euqal or
      large than BCH_MIN_STRIPE_SZ.
    
    Then the minimal stripe size of a bcache device will always be >= 4MB.
    For a 40TB raid5 device with 512KB limits.io_opt, memory occupied by
    bcache->stripe_sectors_dirty and bcache->full_dirty_stripes will be 50MB
    in total. For a 2TB hard drive with 4KB limits.io_opt, memory occupied
    by these two arraies will be 2.5MB in total.
    
    Such mount of memory allocated for bcache->stripe_sectors_dirty and
    bcache->full_dirty_stripes is reasonable for most of storage devices.
    
    Reported-by: Andrea Tomassetti <andrea.tomassetti-opensource@devo.com>
    Signed-off-by: Coly Li <colyli@suse.de>
    Reviewed-by: Eric Wheeler <bcache@lists.ewheeler.net>
    Link: https://lore.kernel.org/r/20231120052503.6122-2-colyli@suse.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 94070fd6689ec0e01b7d2133a44e528b9cffa053
Author: Ming Lei <ming.lei@redhat.com>
Date:   Fri Nov 17 10:35:24 2023 +0800

    blk-cgroup: bypass blkcg_deactivate_policy after destroying
    
    [ Upstream commit e63a57303599b17290cd8bc48e6f20b24289a8bc ]
    
    blkcg_deactivate_policy() can be called after blkg_destroy_all()
    returns, and it isn't necessary since blkg_destroy_all has covered
    policy deactivation.
    
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/20231117023527.3188627-4-ming.lei@redhat.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e52d0eb48efde4939686360fc167ce0bf3b488f4
Author: Ming Lei <ming.lei@redhat.com>
Date:   Fri Nov 17 10:35:22 2023 +0800

    blk-throttle: fix lockdep warning of "cgroup_mutex or RCU read lock required!"
    
    [ Upstream commit 27b13e209ddca5979847a1b57890e0372c1edcee ]
    
    Inside blkg_for_each_descendant_pre(), both
    css_for_each_descendant_pre() and blkg_lookup() requires RCU read lock,
    and either cgroup_assert_mutex_or_rcu_locked() or rcu_read_lock_held()
    is called.
    
    Fix the warning by adding rcu read lock.
    
    Reported-by: Changhui Zhong <czhong@redhat.com>
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/20231117023527.3188627-2-ming.lei@redhat.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 5fb6772cb573b18ee90bf87d45e7fa744c89abb2
Author: Jean Delvare <jdelvare@suse.de>
Date:   Wed Nov 15 11:53:31 2023 +0100

    stmmac: dwmac-loongson: Add architecture dependency
    
    [ Upstream commit 7fbd5fc2b35a8f559a6b380dfa9bcd964a758186 ]
    
    Only present the DWMAC_LOONGSON option on architectures where it can
    actually be used.
    
    This follows the same logic as the DWMAC_INTEL option.
    
    Signed-off-by: Jean Delvare <jdelvare@suse.de>
    Cc: Keguang Zhang <keguang.zhang@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 82c386d73689a45d5ee8c1290827bce64056dddd
Author: Oliver Neukum <oneukum@suse.com>
Date:   Wed Nov 15 11:08:57 2023 +0100

    usb: aqc111: check packet for fixup for true limit
    
    [ Upstream commit ccab434e674ca95d483788b1895a70c21b7f016a ]
    
    If a device sends a packet that is inbetween 0
    and sizeof(u64) the value passed to skb_trim()
    as length will wrap around ending up as some very
    large value.
    
    The driver will then proceed to parse the header
    located at that position, which will either oops or
    process some random value.
    
    The fix is to check against sizeof(u64) rather than
    0, which the driver currently does. The issue exists
    since the introduction of the driver.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit d6c02295c824ac3fd340ffd9e5b74eb0efc13641
Author: Saurabh Sengar <ssengar@linux.microsoft.com>
Date:   Sat Nov 11 00:37:47 2023 -0800

    x86/hyperv: Fix the detection of E820_TYPE_PRAM in a Gen2 VM
    
    [ Upstream commit 7e8037b099c0bbe8f2109dc452dbcab8d400fc53 ]
    
    A Gen2 VM doesn't support legacy PCI/PCIe, so both raw_pci_ops and
    raw_pci_ext_ops are NULL, and pci_subsys_init() -> pcibios_init()
    doesn't call pcibios_resource_survey() -> e820__reserve_resources_late();
    as a result, any emulated persistent memory of E820_TYPE_PRAM (12) via
    the kernel parameter memmap=nn[KMG]!ss is not added into iomem_resource
    and hence can't be detected by register_e820_pmem().
    
    Fix this by directly calling e820__reserve_resources_late() in
    hv_pci_init(), which is called from arch_initcall(pci_arch_init).
    
    It's ok to move a Gen2 VM's e820__reserve_resources_late() from
    subsys_initcall(pci_subsys_init) to arch_initcall(pci_arch_init) because
    the code in-between doesn't depend on the E820 resources.
    e820__reserve_resources_late() depends on e820__reserve_resources(),
    which has been called earlier from setup_arch().
    
    For a Gen-2 VM, the new hv_pci_init() also adds any memory of
    E820_TYPE_PMEM (7) into iomem_resource, and acpi_nfit_register_region() ->
    acpi_nfit_insert_resource() -> region_intersects() returns
    REGION_INTERSECTS, so the memory of E820_TYPE_PMEM won't get added twice.
    
    Changed the local variable "int gen2vm" to "bool gen2vm".
    
    Signed-off-by: Saurabh Sengar <ssengar@linux.microsoft.com>
    Signed-off-by: Dexuan Cui <decui@microsoft.com>
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <1699691867-9827-1-git-send-email-ssengar@linux.microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ae818b2a2e7899ed9fb42f220271fe4e7870d805
Author: Jason-JH.Lin <jason-jh.lin@mediatek.com>
Date:   Wed Sep 20 17:06:58 2023 +0800

    drm/mediatek: Add spinlock for setting vblank event in atomic_begin
    
    [ Upstream commit fe4c5f662097978b6c91c23a13c24ed92339a180 ]
    
    Add spinlock protection to avoid race condition on vblank event
    between mtk_drm_crtc_atomic_begin() and mtk_drm_finish_page_flip().
    
    Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
    Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com>
    Suggested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
    Reviewed-by: Fei Shao <fshao@chromium.org>
    Tested-by: Fei Shao <fshao@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20230920090658.31181-1-jason-jh.lin@mediatek.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 73c240e1ec73b7f1a06a731f0ccf708391436ffd
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed Dec 6 08:23:49 2023 +0900

    ksmbd: fix wrong name of SMB2_CREATE_ALLOCATION_SIZE
    
    commit 13736654481198e519059d4a2e2e3b20fa9fdb3e upstream.
    
    MS confirm that "AISi" name of SMB2_CREATE_ALLOCATION_SIZE in MS-SMB2
    specification is a typo. cifs/ksmbd have been using this wrong name from
    MS-SMB2. It should be "AlSi". Also It will cause problem when running
    smb2.create.open test in smbtorture against ksmbd.
    
    Cc: stable@vger.kernel.org
    Fixes: 12197a7fdda9 ("Clarify SMB2/SMB3 create context and add missing ones")
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Reviewed-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0c196180b5888a137defa0d21ce79a49f6cbce82
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Fri Dec 1 11:50:28 2023 +0000

    PCI: loongson: Limit MRRS to 256
    
    commit ef61a0405742a9f7f6051bc6fd2f017d87d07911 upstream.
    
    This is a partial revert of 8b3517f88ff2 ("PCI: loongson: Prevent LS7A MRRS
    increases") for MIPS-based Loongson.
    
    Some MIPS Loongson systems don't support arbitrary Max_Read_Request_Size
    (MRRS) settings.  8b3517f88ff2 ("PCI: loongson: Prevent LS7A MRRS
    increases") worked around that by (1) assuming that firmware configured
    MRRS to the maximum supported value and (2) preventing the PCI core from
    increasing MRRS.
    
    Unfortunately, some firmware doesn't set that maximum MRRS correctly, which
    results in devices not being initialized correctly.  One symptom, from the
    Debian report below, is this:
    
      ata4.00: exception Emask 0x0 SAct 0x20000000 SErr 0x0 action 0x6 frozen
      ata4.00: failed command: WRITE FPDMA QUEUED
      ata4.00: cmd 61/20:e8:00:f0:e1/00:00:00:00:00/40 tag 29 ncq dma 16384 out
               res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
      ata4.00: status: { DRDY }
      ata4: hard resetting link
    
    Limit MRRS to 256 because MIPS Loongson with higher MRRS support is
    considered rare.
    
    This must be done at device enablement stage because the MRRS setting may
    get lost if PCI_COMMAND_MASTER on the parent bridge is cleared, and we are
    only sure parent bridge is enabled at this point.
    
    Fixes: 8b3517f88ff2 ("PCI: loongson: Prevent LS7A MRRS increases")
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217680
    Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1035587
    Link: https://lore.kernel.org/r/20231201115028.84351-1-jiaxun.yang@flygoat.com
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Acked-by: Huacai Chen <chenhuacai@loongson.cn>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 56d1891594d632e079a59fe23c07785863e9e5c4
Author: Bjorn Helgaas <bhelgaas@google.com>
Date:   Thu Dec 14 09:08:56 2023 -0600

    Revert "PCI: acpiphp: Reassign resources on bridge if necessary"
    
    commit 5df12742b7e3aae2594a30a9d14d5d6e9e7699f4 upstream.
    
    This reverts commit 40613da52b13fb21c5566f10b287e0ca8c12c4e9 and the
    subsequent fix to it:
    
      cc22522fd55e ("PCI: acpiphp: Use pci_assign_unassigned_bridge_resources() only for non-root bus")
    
    40613da52b13 fixed a problem where hot-adding a device with large BARs
    failed if the bridge windows programmed by firmware were not large enough.
    
    cc22522fd55e ("PCI: acpiphp: Use pci_assign_unassigned_bridge_resources()
    only for non-root bus") fixed a problem with 40613da52b13: an ACPI hot-add
    of a device on a PCI root bus (common in the virt world) or firmware
    sending ACPI Bus Check to non-existent Root Ports (e.g., on Dell Inspiron
    7352/0W6WV0) caused a NULL pointer dereference and suspend/resume hangs.
    
    Unfortunately the combination of 40613da52b13 and cc22522fd55e caused other
    problems:
    
      - Fiona reported that hot-add of SCSI disks in QEMU virtual machine fails
        sometimes.
    
      - Dongli reported a similar problem with hot-add of SCSI disks.
    
      - Jonathan reported a console freeze during boot on bare metal due to an
        error in radeon GPU initialization.
    
    Revert both patches to avoid adding these problems.  This means we will
    again see the problems with hot-adding devices with large BARs and the NULL
    pointer dereferences and suspend/resume issues that 40613da52b13 and
    cc22522fd55e were intended to fix.
    
    Fixes: 40613da52b13 ("PCI: acpiphp: Reassign resources on bridge if necessary")
    Fixes: cc22522fd55e ("PCI: acpiphp: Use pci_assign_unassigned_bridge_resources() only for non-root bus")
    Reported-by: Fiona Ebner <f.ebner@proxmox.com>
    Closes: https://lore.kernel.org/r/9eb669c0-d8f2-431d-a700-6da13053ae54@proxmox.com
    Reported-by: Dongli Zhang <dongli.zhang@oracle.com>
    Closes: https://lore.kernel.org/r/3c4a446a-b167-11b8-f36f-d3c1b49b42e9@oracle.com
    Reported-by: Jonathan Woithe <jwoithe@just42.net>
    Closes: https://lore.kernel.org/r/ZXpaNCLiDM+Kv38H@marvin.atrad.com.au
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Igor Mammedov <imammedo@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1ec80b9d4310764f5102e3f32d81cc38901088f2
Author: Hartmut Knaack <knaack.h@gmx.de>
Date:   Sat Dec 9 15:47:07 2023 +0100

    ALSA: hda/realtek: Apply mute LED quirk for HP15-db
    
    commit 9b726bf6ae11add6a7a52883a21f90ff9cbca916 upstream.
    
    The HP laptop 15-db0403ng uses the ALC236 codec and controls the mute
    LED using COEF 0x07 index 1.
    Sound card subsystem: Hewlett-Packard Company Device [103c:84ae]
    
    Use the existing quirk for this model.
    
    Signed-off-by: Hartmut Knaack <knaack.h@gmx.de>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/e61815d0-f1c7-b164-e49d-6ca84771476a@gmx.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eeeb91216a1b5fdf9722f8c05c2873181f837afe
Author: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Date:   Fri Dec 8 15:21:27 2023 +0200

    ALSA: hda/hdmi: add force-connect quirks for ASUSTeK Z170 variants
    
    commit 924f5ca2975b2993ee81a7ecc3c809943a70f334 upstream.
    
    On ASUSTeK Z170M PLUS and Z170 PRO GAMING systems, the display codec
    pins are not registered properly without the force-connect quirk. The
    codec will report only one pin as having external connectivity, but i915
    finds all three connectors on the system, so the two drivers are not
    in sync.
    
    Issue found with DRM igt-gpu-tools test kms_hdmi_inject@inject-audio.
    
    Link: https://gitlab.freedesktop.org/drm/intel/-/issues/9801
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Jani Saarinen <jani.saarinen@intel.com>
    Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20231208132127.2438067-3-kai.vehmanen@linux.intel.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 82413e9e4255e9314c9d41f4243bc794e311f643
Author: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Date:   Fri Dec 8 15:21:26 2023 +0200

    ALSA: hda/hdmi: add force-connect quirk for NUC5CPYB
    
    commit 3b1ff57e24a7bcd2e2a8426dd2013a80d1fa96eb upstream.
    
    Add one more older NUC model that requires quirk to force all pins to be
    connected. The display codec pins are not registered properly without
    the force-connect quirk. The codec will report only one pin as having
    external connectivity, but i915 finds all three connectors on the
    system, so the two drivers are not in sync.
    
    Issue found with DRM igt-gpu-tools test kms_hdmi_inject@inject-audio.
    
    Link: https://gitlab.freedesktop.org/drm/igt-gpu-tools/-/issues/3
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Jani Saarinen <jani.saarinen@intel.com>
    Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20231208132127.2438067-2-kai.vehmanen@linux.intel.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0dc6a06c484360e5dddf920efe2cf57b7772c35a
Author: Hangyu Hua <hbh25y@gmail.com>
Date:   Thu Nov 16 15:57:26 2023 +0800

    fuse: dax: set fc->dax to NULL in fuse_dax_conn_free()
    
    commit 7f8ed28d1401320bcb02dda81b3c23ab2dc5a6d8 upstream.
    
    fuse_dax_conn_free() will be called when fuse_fill_super_common() fails
    after fuse_dax_conn_alloc(). Then deactivate_locked_super() in
    virtio_fs_get_tree() will call virtio_kill_sb() to release the discarded
    superblock. This will call fuse_dax_conn_free() again in fuse_conn_put(),
    resulting in a possible double free.
    
    Fixes: 1dd539577c42 ("virtiofs: add a mount option to enable dax")
    Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
    Acked-by: Vivek Goyal <vgoyal@redhat.com>
    Reviewed-by: Jingbo Xu <jefflexu@linux.alibaba.com>
    Cc: <stable@vger.kernel.org> # v5.10
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 36e2497ac7ad9932f7826130fc2b3306e3db89c8
Author: Jens Axboe <axboe@kernel.dk>
Date:   Fri Dec 15 13:24:10 2023 -0700

    cred: switch to using atomic_long_t
    
    commit f8fa5d76925991976b3e7076f9d1052515ec1fca upstream.
    
    There are multiple ways to grab references to credentials, and the only
    protection we have against overflowing it is the memory required to do
    so.
    
    With memory sizes only moving in one direction, let's bump the reference
    count to 64-bit and move it outside the realm of feasibly overflowing.
    
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a51f71cd4f56aeac239eff265f65e6e871191852
Author: Igor Russkikh <irusskikh@marvell.com>
Date:   Wed Dec 13 10:40:44 2023 +0100

    net: atlantic: fix double free in ring reinit logic
    
    [ Upstream commit 7bb26ea74aa86fdf894b7dbd8c5712c5b4187da7 ]
    
    Driver has a logic leak in ring data allocation/free,
    where double free may happen in aq_ring_free if system is under
    stress and driver init/deinit is happening.
    
    The probability is higher to get this during suspend/resume cycle.
    
    Verification was done simulating same conditions with
    
        stress -m 2000 --vm-bytes 20M --vm-hang 10 --backoff 1000
        while true; do sudo ifconfig enp1s0 down; sudo ifconfig enp1s0 up; done
    
    Fixed by explicitly clearing pointers to NULL on deallocation
    
    Fixes: 018423e90bee ("net: ethernet: aquantia: Add ring support code")
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Closes: https://lore.kernel.org/netdev/CAHk-=wiZZi7FcvqVSUirHBjx0bBUZ4dFrMDVLc3+3HCrtq0rBA@mail.gmail.com/
    Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
    Link: https://lore.kernel.org/r/20231213094044.22988-1-irusskikh@marvell.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 1646b2929d5efc3861139ba58556b0f149c848f6
Author: Hyunwoo Kim <v4bel@theori.io>
Date:   Tue Dec 12 23:10:56 2023 -0500

    appletalk: Fix Use-After-Free in atalk_ioctl
    
    [ Upstream commit 189ff16722ee36ced4d2a2469d4ab65a8fee4198 ]
    
    Because atalk_ioctl() accesses sk->sk_receive_queue
    without holding a sk->sk_receive_queue.lock, it can
    cause a race with atalk_recvmsg().
    A use-after-free for skb occurs with the following flow.
    ```
    atalk_ioctl() -> skb_peek()
    atalk_recvmsg() -> skb_recv_datagram() -> skb_free_datagram()
    ```
    Add sk->sk_receive_queue.lock to atalk_ioctl() to fix this issue.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Hyunwoo Kim <v4bel@theori.io>
    Link: https://lore.kernel.org/r/20231213041056.GA519680@v4bel-B760M-AORUS-ELITE-AX
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit d835299dde3e668cb853539901324858845b4978
Author: Andrew Halaney <ahalaney@redhat.com>
Date:   Tue Dec 12 16:18:33 2023 -0600

    net: stmmac: Handle disabled MDIO busses from devicetree
    
    [ Upstream commit e23c0d21ce9234fbc31ece35663ababbb83f9347 ]
    
    Many hardware configurations have the MDIO bus disabled, and are instead
    using some other MDIO bus to talk to the MAC's phy.
    
    of_mdiobus_register() returns -ENODEV in this case. Let's handle it
    gracefully instead of failing to probe the MAC.
    
    Fixes: 47dd7a540b8a ("net: add support for STMicroelectronics Ethernet controllers.")
    Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
    Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
    Link: https://lore.kernel.org/r/20231212-b4-stmmac-handle-mdio-enodev-v2-1-600171acf79f@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 9aac81639e52d0521cd7f205de9405d19b125145
Author: Ioana Ciornei <ioana.ciornei@nxp.com>
Date:   Tue Dec 12 18:43:26 2023 +0200

    dpaa2-switch: do not ask for MDB, VLAN and FDB replay
    
    [ Upstream commit f24a49a375f65e8e75ee1b19d806f46dbaae57fd ]
    
    Starting with commit 4e51bf44a03a ("net: bridge: move the switchdev
    object replay helpers to "push" mode") the switchdev_bridge_port_offload()
    helper was extended with the intention to provide switchdev drivers easy
    access to object addition and deletion replays. This works by calling
    the replay helpers with non-NULL notifier blocks.
    
    In the same commit, the dpaa2-switch driver was updated so that it
    passes valid notifier blocks to the helper. At that moment, no
    regression was identified through testing.
    
    In the meantime, the blamed commit changed the behavior in terms of
    which ports get hit by the replay. Before this commit, only the initial
    port which identified itself as offloaded through
    switchdev_bridge_port_offload() got a replay of all port objects and
    FDBs. After this, the newly joining port will trigger a replay of
    objects on all bridge ports and on the bridge itself.
    
    This behavior leads to errors in dpaa2_switch_port_vlans_add() when a
    VLAN gets installed on the same interface multiple times.
    
    The intended mechanism to address this is to pass a non-NULL ctx to the
    switchdev_bridge_port_offload() helper and then check it against the
    port's private structure. But since the driver does not have any use for
    the replayed port objects and FDBs until it gains support for LAG
    offload, it's better to fix the issue by reverting the dpaa2-switch
    driver to not ask for replay. The pointers will be added back when we
    are prepared to ignore replays on unrelated ports.
    
    Fixes: b28d580e2939 ("net: bridge: switchdev: replay all VLAN groups")
    Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Link: https://lore.kernel.org/r/20231212164326.2753457-3-ioana.ciornei@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a81c7069af0584595c12ad3db90ac5c402a681e4
Author: Ioana Ciornei <ioana.ciornei@nxp.com>
Date:   Tue Dec 12 18:43:25 2023 +0200

    dpaa2-switch: fix size of the dma_unmap
    
    [ Upstream commit 2aad7d4189a923b24efa8ea6ad09059882b1bfe4 ]
    
    The size of the DMA unmap was wrongly put as a sizeof of a pointer.
    Change the value of the DMA unmap to be the actual macro used for the
    allocation and the DMA map.
    
    Fixes: 1110318d83e8 ("dpaa2-switch: add tc flower hardware offload on ingress traffic")
    Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Link: https://lore.kernel.org/r/20231212164326.2753457-2-ioana.ciornei@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 9a23be1e580617a11fa8f98c7324c755b41782e6
Author: Nikolay Kuratov <kniv@yandex-team.ru>
Date:   Mon Dec 11 19:23:17 2023 +0300

    vsock/virtio: Fix unsigned integer wrap around in virtio_transport_has_space()
    
    [ Upstream commit 60316d7f10b17a7ebb1ead0642fee8710e1560e0 ]
    
    We need to do signed arithmetic if we expect condition
    `if (bytes < 0)` to be possible
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE
    
    Fixes: 06a8fc78367d ("VSOCK: Introduce virtio_vsock_common.ko")
    Signed-off-by: Nikolay Kuratov <kniv@yandex-team.ru>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Link: https://lore.kernel.org/r/20231211162317.4116625-1-kniv@yandex-team.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2027dd67c3cf682fc3c9bb6fc5f43750857f24b8
Author: Yusong Gao <a869920004@gmail.com>
Date:   Wed Dec 13 10:31:10 2023 +0000

    sign-file: Fix incorrect return values check
    
    [ Upstream commit 829649443e78d85db0cff0c37cadb28fbb1a5f6f ]
    
    There are some wrong return values check in sign-file when call OpenSSL
    API. The ERR() check cond is wrong because of the program only check the
    return value is < 0 which ignored the return val is 0. For example:
    1. CMS_final() return 1 for success or 0 for failure.
    2. i2d_CMS_bio_stream() returns 1 for success or 0 for failure.
    3. i2d_TYPEbio() return 1 for success and 0 for failure.
    4. BIO_free() return 1 for success and 0 for failure.
    
    Link: https://www.openssl.org/docs/manmaster/man3/
    Fixes: e5a2e3c84782 ("scripts/sign-file.c: Add support for signing with a raw signature")
    Signed-off-by: Yusong Gao <a869920004@gmail.com>
    Reviewed-by: Juerg Haefliger <juerg.haefliger@canonical.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/20231213024405.624692-1-a869920004@gmail.com/ # v5
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 918991db7de041e29c69fd377a411c5637a224cd
Author: Yanteng Si <siyanteng@loongson.cn>
Date:   Mon Dec 11 18:33:11 2023 +0800

    stmmac: dwmac-loongson: Make sure MDIO is initialized before use
    
    [ Upstream commit e87d3a1370ce9f04770d789bcf7cce44865d2e8d ]
    
    Generic code will use mdio. If it is not initialized before use,
    the kernel will Oops.
    
    Fixes: 30bba69d7db4 ("stmmac: pci: Add dwmac support for Loongson")
    Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
    Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 63387fe87fc5a429175a2f0dda426f650666b7c5
Author: David Arinzon <darinzon@amazon.com>
Date:   Mon Dec 11 06:28:01 2023 +0000

    net: ena: Fix XDP redirection error
    
    [ Upstream commit 4ab138ca0a340e6d6e7a6a9bd5004bd8f83127ca ]
    
    When sending TX packets, the meta descriptor can be all zeroes
    as no meta information is required (as in XDP).
    
    This patch removes the validity check, as when
    `disable_meta_caching` is enabled, such TX packets will be
    dropped otherwise.
    
    Fixes: 0e3a3f6dacf0 ("net: ena: support new LLQ acceleration mode")
    Signed-off-by: Shay Agroskin <shayagr@amazon.com>
    Signed-off-by: David Arinzon <darinzon@amazon.com>
    Link: https://lore.kernel.org/r/20231211062801.27891-5-darinzon@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2664b56420b3c9b87a9fc4e09be1cf6e609abb3d
Author: David Arinzon <darinzon@amazon.com>
Date:   Mon Dec 11 06:27:59 2023 +0000

    net: ena: Fix xdp drops handling due to multibuf packets
    
    [ Upstream commit 505b1a88d311ff6f8c44a34f94e3be21745cce6f ]
    
    Current xdp code drops packets larger than ENA_XDP_MAX_MTU.
    This is an incorrect condition since the problem is not the
    size of the packet, rather the number of buffers it contains.
    
    This commit:
    
    1. Identifies and drops XDP multi-buffer packets at the
       beginning of the function.
    2. Increases the xdp drop statistic when this drop occurs.
    3. Adds a one-time print that such drops are happening to
       give better indication to the user.
    
    Fixes: 838c93dc5449 ("net: ena: implement XDP drop support")
    Signed-off-by: Arthur Kiyanovski <akiyano@amazon.com>
    Signed-off-by: David Arinzon <darinzon@amazon.com>
    Link: https://lore.kernel.org/r/20231211062801.27891-3-darinzon@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e312eed27abaf2bbb492e8cde56dde9bacdacce0
Author: David Arinzon <darinzon@amazon.com>
Date:   Mon Dec 11 06:27:58 2023 +0000

    net: ena: Destroy correct number of xdp queues upon failure
    
    [ Upstream commit 41db6f99b5489a0d2ef26afe816ef0c6118d1d47 ]
    
    The ena_setup_and_create_all_xdp_queues() function freed all the
    resources upon failure, after creating only xdp_num_queues queues,
    instead of freeing just the created ones.
    
    In this patch, the only resources that are freed, are the ones
    allocated right before the failure occurs.
    
    Fixes: 548c4940b9f1 ("net: ena: Implement XDP_TX action")
    Signed-off-by: Shahar Itzko <itzko@amazon.com>
    Signed-off-by: David Arinzon <darinzon@amazon.com>
    Link: https://lore.kernel.org/r/20231211062801.27891-2-darinzon@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 55a43bae0886e27fab907d22247128118b1f6e8a
Author: Dong Chenchen <dongchenchen2@huawei.com>
Date:   Sun Dec 10 10:02:00 2023 +0800

    net: Remove acked SYN flag from packet in the transmit queue correctly
    
    [ Upstream commit f99cd56230f56c8b6b33713c5be4da5d6766be1f ]
    
    syzkaller report:
    
     kernel BUG at net/core/skbuff.c:3452!
     invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
     CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc4-00009-gbee0e7762ad2-dirty #135
     RIP: 0010:skb_copy_and_csum_bits (net/core/skbuff.c:3452)
     Call Trace:
     icmp_glue_bits (net/ipv4/icmp.c:357)
     __ip_append_data.isra.0 (net/ipv4/ip_output.c:1165)
     ip_append_data (net/ipv4/ip_output.c:1362 net/ipv4/ip_output.c:1341)
     icmp_push_reply (net/ipv4/icmp.c:370)
     __icmp_send (./include/net/route.h:252 net/ipv4/icmp.c:772)
     ip_fragment.constprop.0 (./include/linux/skbuff.h:1234 net/ipv4/ip_output.c:592 net/ipv4/ip_output.c:577)
     __ip_finish_output (net/ipv4/ip_output.c:311 net/ipv4/ip_output.c:295)
     ip_output (net/ipv4/ip_output.c:427)
     __ip_queue_xmit (net/ipv4/ip_output.c:535)
     __tcp_transmit_skb (net/ipv4/tcp_output.c:1462)
     __tcp_retransmit_skb (net/ipv4/tcp_output.c:3387)
     tcp_retransmit_skb (net/ipv4/tcp_output.c:3404)
     tcp_retransmit_timer (net/ipv4/tcp_timer.c:604)
     tcp_write_timer (./include/linux/spinlock.h:391 net/ipv4/tcp_timer.c:716)
    
    The panic issue was trigered by tcp simultaneous initiation.
    The initiation process is as follows:
    
          TCP A                                            TCP B
    
      1.  CLOSED                                           CLOSED
    
      2.  SYN-SENT     --> <SEQ=100><CTL=SYN>              ...
    
      3.  SYN-RECEIVED <-- <SEQ=300><CTL=SYN>              <-- SYN-SENT
    
      4.               ... <SEQ=100><CTL=SYN>              --> SYN-RECEIVED
    
      5.  SYN-RECEIVED --> <SEQ=100><ACK=301><CTL=SYN,ACK> ...
    
      // TCP B: not send challenge ack for ack limit or packet loss
      // TCP A: close
            tcp_close
               tcp_send_fin
                  if (!tskb && tcp_under_memory_pressure(sk))
                      tskb = skb_rb_last(&sk->tcp_rtx_queue); //pick SYN_ACK packet
               TCP_SKB_CB(tskb)->tcp_flags |= TCPHDR_FIN;  // set FIN flag
    
      6.  FIN_WAIT_1  --> <SEQ=100><ACK=301><END_SEQ=102><CTL=SYN,FIN,ACK> ...
    
      // TCP B: send challenge ack to SYN_FIN_ACK
    
      7.               ... <SEQ=301><ACK=101><CTL=ACK>   <-- SYN-RECEIVED //challenge ack
    
      // TCP A:  <SND.UNA=101>
    
      8.  FIN_WAIT_1 --> <SEQ=101><ACK=301><END_SEQ=102><CTL=SYN,FIN,ACK> ... // retransmit panic
    
            __tcp_retransmit_skb  //skb->len=0
                tcp_trim_head
                    len = tp->snd_una - TCP_SKB_CB(skb)->seq // len=101-100
                        __pskb_trim_head
                            skb->data_len -= len // skb->len=-1, wrap around
                ... ...
                ip_fragment
                    icmp_glue_bits //BUG_ON
    
    If we use tcp_trim_head() to remove acked SYN from packet that contains data
    or other flags, skb->len will be incorrectly decremented. We can remove SYN
    flag that has been acked from rtx_queue earlier than tcp_trim_head(), which
    can fix the problem mentioned above.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Co-developed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Dong Chenchen <dongchenchen2@huawei.com>
    Link: https://lore.kernel.org/r/20231210020200.1539875-1-dongchenchen2@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 9bb392ee53af7d402dbb344092077ff351b78de7
Author: Dinghao Liu <dinghao.liu@zju.edu.cn>
Date:   Sun Dec 10 12:52:55 2023 +0800

    qed: Fix a potential use-after-free in qed_cxt_tables_alloc
    
    [ Upstream commit b65d52ac9c085c0c52dee012a210d4e2f352611b ]
    
    qed_ilt_shadow_alloc() will call qed_ilt_shadow_free() to
    free p_hwfn->p_cxt_mngr->ilt_shadow on error. However,
    qed_cxt_tables_alloc() accesses the freed pointer on failure
    of qed_ilt_shadow_alloc() through calling qed_cxt_mngr_free(),
    which may lead to use-after-free. Fix this issue by setting
    p_mngr->ilt_shadow to NULL in qed_ilt_shadow_free().
    
    Fixes: fe56b9e6a8d9 ("qed: Add module with basic common support")
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn>
    Link: https://lore.kernel.org/r/20231210045255.21383-1-dinghao.liu@zju.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 112792ad36c480392bfacaaceb92ff0131edc603
Author: Piotr Gardocki <piotrx.gardocki@intel.com>
Date:   Tue Nov 21 22:47:16 2023 -0500

    iavf: Handle ntuple on/off based on new state machines for flow director
    
    [ Upstream commit 09d23b8918f9ab0f8114f6b94f2faf8bde3fb52a ]
    
    ntuple-filter feature on/off:
    Default is on. If turned off, the filters will be removed from both
    PF and iavf list. The removal is irrespective of current filter state.
    
    Steps to reproduce:
    -------------------
    
    1. Ensure ntuple is on.
    
    ethtool -K enp8s0 ntuple-filters on
    
    2. Create a filter to receive the traffic into non-default rx-queue like 15
    and ensure traffic is flowing into queue into 15.
    Now, turn off ntuple. Traffic should not flow to configured queue 15.
    It should flow to default RX queue.
    
    Fixes: 0dbfbabb840d ("iavf: Add framework to enable ethtool ntuple filters")
    Signed-off-by: Piotr Gardocki <piotrx.gardocki@intel.com>
    Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Signed-off-by: Ranganatha Rao <ranganatha.rao@intel.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 11c314a5a44a8f5a767a0c54a50af4172a98c734
Author: Piotr Gardocki <piotrx.gardocki@intel.com>
Date:   Tue Nov 21 22:47:15 2023 -0500

    iavf: Introduce new state machines for flow director
    
    [ Upstream commit 3a0b5a2929fdeda63fc921c2dbed237059acf732 ]
    
    New states introduced:
    
     IAVF_FDIR_FLTR_DIS_REQUEST
     IAVF_FDIR_FLTR_DIS_PENDING
     IAVF_FDIR_FLTR_INACTIVE
    
    Current FDIR state machines (SM) are not adequate to handle a few
    scenarios in the link DOWN/UP event, reset event and ntuple-feature.
    
    For example, when VF link goes DOWN and comes back UP administratively,
    the expectation is that previously installed filters should also be
    restored. But with current SM, filters are not restored.
    So with new SM, during link DOWN filters are marked as INACTIVE in
    the iavf list but removed from PF. After link UP, SM will transition
    from INACTIVE to ADD_REQUEST to restore the filter.
    
    Similarly, with VF reset, filters will be removed from the PF, but
    marked as INACTIVE in the iavf list. Filters will be restored after
    reset completion.
    
    Steps to reproduce:
    -------------------
    
    1. Create a VF. Here VF is enp8s0.
    
    2. Assign IP addresses to VF and link partner and ping continuously
    from remote. Here remote IP is 1.1.1.1.
    
    3. Check default RX Queue of traffic.
    
    ethtool -S enp8s0 | grep -E "rx-[[:digit:]]+\.packets"
    
    4. Add filter - change default RX Queue (to 15 here)
    
    ethtool -U ens8s0 flow-type ip4 src-ip 1.1.1.1 action 15 loc 5
    
    5. Ensure filter gets added and traffic is received on RX queue 15 now.
    
    Link event testing:
    -------------------
    6. Bring VF link down and up. If traffic flows to configured queue 15,
    test is success, otherwise it is a failure.
    
    Reset event testing:
    --------------------
    7. Reset the VF. If traffic flows to configured queue 15, test is success,
    otherwise it is a failure.
    
    Fixes: 0dbfbabb840d ("iavf: Add framework to enable ethtool ntuple filters")
    Signed-off-by: Piotr Gardocki <piotrx.gardocki@intel.com>
    Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Signed-off-by: Ranganatha Rao <ranganatha.rao@intel.com>
    Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 01540ee2366a0a8671c35cd57a66bf0817106ffa
Author: Hyunwoo Kim <v4bel@theori.io>
Date:   Sat Dec 9 05:05:38 2023 -0500

    net/rose: Fix Use-After-Free in rose_ioctl
    
    [ Upstream commit 810c38a369a0a0ce625b5c12169abce1dd9ccd53 ]
    
    Because rose_ioctl() accesses sk->sk_receive_queue
    without holding a sk->sk_receive_queue.lock, it can
    cause a race with rose_accept().
    A use-after-free for skb occurs with the following flow.
    ```
    rose_ioctl() -> skb_peek()
    rose_accept() -> skb_dequeue() -> kfree_skb()
    ```
    Add sk->sk_receive_queue.lock to rose_ioctl() to fix this issue.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Hyunwoo Kim <v4bel@theori.io>
    Link: https://lore.kernel.org/r/20231209100538.GA407321@v4bel-B760M-AORUS-ELITE-AX
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2de2a6cbe14f7e949da59bddd5d69baf5dd893c0
Author: Hyunwoo Kim <v4bel@theori.io>
Date:   Sat Dec 9 04:42:10 2023 -0500

    atm: Fix Use-After-Free in do_vcc_ioctl
    
    [ Upstream commit 24e90b9e34f9e039f56b5f25f6e6eb92cdd8f4b3 ]
    
    Because do_vcc_ioctl() accesses sk->sk_receive_queue
    without holding a sk->sk_receive_queue.lock, it can
    cause a race with vcc_recvmsg().
    A use-after-free for skb occurs with the following flow.
    ```
    do_vcc_ioctl() -> skb_peek()
    vcc_recvmsg() -> skb_recv_datagram() -> skb_free_datagram()
    ```
    Add sk->sk_receive_queue.lock to do_vcc_ioctl() to fix this issue.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Hyunwoo Kim <v4bel@theori.io>
    Link: https://lore.kernel.org/r/20231209094210.GA403126@v4bel-B760M-AORUS-ELITE-AX
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 3a76dcab2e3aa9fb4cab3e541ee5808a6208be4a
Author: Hariprasad Kelam <hkelam@marvell.com>
Date:   Fri Dec 8 12:26:10 2023 +0530

    octeontx2-af: Update RSS algorithm index
    
    [ Upstream commit 570ba37898ecd9069beb58bf0b6cf84daba6e0fe ]
    
    The RSS flow algorithm is not set up correctly for promiscuous or all
    multi MCAM entries. This has an impact on flow distribution.
    
    This patch fixes the issue by updating flow algorithm index in above
    mentioned MCAM entries.
    
    Fixes: 967db3529eca ("octeontx2-af: add support for multicast/promisc packet replication feature")
    Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
    Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit d0f0786f8c5a5f43de91c4e9c5b8e001452bc946
Author: Hariprasad Kelam <hkelam@marvell.com>
Date:   Fri Dec 8 12:26:09 2023 +0530

    octeontx2-pf: Fix promisc mcam entry action
    
    [ Upstream commit dbda436824ded8ef6a05bb82cd9baa8d42377a49 ]
    
    Current implementation is such that, promisc mcam entry action
    is set as multicast even when there are no trusted VFs. multicast
    action causes the hardware to copy packet data, which reduces
    the performance.
    
    This patch fixes this issue by setting the promisc mcam entry action to
    unicast instead of multicast when there are no trusted VFs. The same
    change is made for the 'allmulti' mcam entry action.
    
    Fixes: ffd2f89ad05c ("octeontx2-pf: Enable promisc/allmulti match MCAM entries.")
    Signed-off-by: Hariprasad Kelam <hkelam@marvell.com>
    Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 34b630626a970f53a3ca96beb9d32658856efbb3
Author: Zhipeng Lu <alexious@zju.edu.cn>
Date:   Thu Dec 7 17:49:16 2023 +0800

    octeontx2-af: fix a use-after-free in rvu_nix_register_reporters
    
    [ Upstream commit 28a7cb045ab700de5554193a1642917602787784 ]
    
    The rvu_dl will be freed in rvu_nix_health_reporters_destroy(rvu_dl)
    after the create_workqueue fails, and after that free, the rvu_dl will
    be translate back through the following call chain:
    
    rvu_nix_health_reporters_destroy
      |-> rvu_nix_health_reporters_create
           |-> rvu_health_reporters_create
                 |-> rvu_register_dl (label err_dl_health)
    
    Finally. in the err_dl_health label, rvu_dl being freed again in
    rvu_health_reporters_destroy(rvu) by rvu_nix_health_reporters_destroy.
    In the second calls of rvu_nix_health_reporters_destroy, however,
    it uses rvu_dl->rvu_nix_health_reporter, which is already freed at
    the end of rvu_nix_health_reporters_destroy in the first call.
    
    So this patch prevents the first destroy by instantly returning -ENONMEN
    when create_workqueue fails. In addition, since the failure of
    create_workqueue is the only entrence of label err, it has been
    integrated into the error-handling path of create_workqueue.
    
    Fixes: 5ed66306eab6 ("octeontx2-af: Add devlink health reporters for NIX")
    Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e4ce3dc7a0edc100eb74ad7f8d2ad1bc64a35aee
Author: Radu Bulie <radu-andrei.bulie@nxp.com>
Date:   Thu Dec 7 16:38:01 2023 +0800

    net: fec: correct queue selection
    
    [ Upstream commit 9fc95fe95c3e2a63ced8eeca4b256518ab204b63 ]
    
    The old implementation extracted VLAN TCI info from the payload
    before the VLAN tag has been pushed in the payload.
    
    Another problem was that the VLAN TCI was extracted even if the
    packet did not have VLAN protocol header.
    
    This resulted in invalid VLAN TCI and as a consequence a random
    queue was computed.
    
    This patch fixes the above issues and use the VLAN TCI from the
    skb if it is present or VLAN TCI from payload if present. If no
    VLAN header is present queue 0 is selected.
    
    Fixes: 52c4a1a85f4b ("net: fec: add ndo_select_queue to fix TX bandwidth fluctuations")
    Signed-off-by: Radu Bulie <radu-andrei.bulie@nxp.com>
    Signed-off-by: Wei Fang <wei.fang@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a00dbc6dec4b024a7ef9e553c6d617addce9e965
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Fri Apr 21 01:55:54 2023 +0300

    net: vlan: introduce skb_vlan_eth_hdr()
    
    [ Upstream commit 1f5020acb33f926030f62563c86dffca35c7b701 ]
    
    Similar to skb_eth_hdr() introduced in commit 96cc4b69581d ("macvlan: do
    not assume mac_header is set in macvlan_broadcast()"), let's introduce a
    skb_vlan_eth_hdr() helper which can be used in TX-only code paths to get
    to the VLAN header based on skb->data rather than based on the
    skb_mac_header(skb).
    
    We also consolidate the drivers that dereference skb->data to go through
    this helper.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 9fc95fe95c3e ("net: fec: correct queue selection")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 7cfbb8bea36ad184bc5e9bd4ef028805dcff8370
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Thu Dec 7 12:34:53 2023 +0000

    atm: solos-pci: Fix potential deadlock on &tx_queue_lock
    
    [ Upstream commit 15319a4e8ee4b098118591c6ccbd17237f841613 ]
    
    As &card->tx_queue_lock is acquired under softirq context along the
    following call chain from solos_bh(), other acquisition of the same
    lock inside process context should disable at least bh to avoid double
    lock.
    
    <deadlock #2>
    pclose()
    --> spin_lock(&card->tx_queue_lock)
    <interrupt>
       --> solos_bh()
       --> fpga_tx()
       --> spin_lock(&card->tx_queue_lock)
    
    This flaw was found by an experimental static analysis tool I am
    developing for irq-related deadlock.
    
    To prevent the potential deadlock, the patch uses spin_lock_bh()
    on &card->tx_queue_lock under process context code consistently to
    prevent the possible deadlock scenario.
    
    Fixes: 213e85d38912 ("solos-pci: clean up pclose() function")
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 35c63d366fff4e930a7c44f25a8a184e0189e74a
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Thu Dec 7 12:34:37 2023 +0000

    atm: solos-pci: Fix potential deadlock on &cli_queue_lock
    
    [ Upstream commit d5dba32b8f6cb39be708b726044ba30dbc088b30 ]
    
    As &card->cli_queue_lock is acquired under softirq context along the
    following call chain from solos_bh(), other acquisition of the same
    lock inside process context should disable at least bh to avoid double
    lock.
    
    <deadlock #1>
    console_show()
    --> spin_lock(&card->cli_queue_lock)
    <interrupt>
       --> solos_bh()
       --> spin_lock(&card->cli_queue_lock)
    
    This flaw was found by an experimental static analysis tool I am
    developing for irq-related deadlock.
    
    To prevent the potential deadlock, the patch uses spin_lock_bh()
    on the card->cli_queue_lock under process context code consistently
    to prevent the possible deadlock scenario.
    
    Fixes: 9c54004ea717 ("atm: Driver for Solos PCI ADSL2+ card.")
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 525904a157914cb0490ee48b3aed3b0ee39702e9
Author: Michael Chan <michael.chan@broadcom.com>
Date:   Thu Dec 7 16:16:58 2023 -0800

    bnxt_en: Fix HWTSTAMP_FILTER_ALL packet timestamp logic
    
    [ Upstream commit c13e268c0768659cdaae4bfe2fb24860bcc8ddb4 ]
    
    When the chip is configured to timestamp all receive packets, the
    timestamp in the RX completion is only valid if the metadata
    present flag is not set for packets received on the wire.  In
    addition, internal loopback packets will never have a valid timestamp
    and the timestamp field will always be zero.  We must exclude
    any 0 value in the timestamp field because there is no way to
    determine if it is a loopback packet or not.
    
    Add a new function bnxt_rx_ts_valid() to check for all timestamp
    valid conditions.
    
    Fixes: 66ed81dcedc6 ("bnxt_en: Enable packet timestamping for all RX packets")
    Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://lore.kernel.org/r/20231208001658.14230-5-michael.chan@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ac6125174190b714a9db1d4fec36d48f84a2e66a
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Thu Dec 7 16:16:57 2023 -0800

    bnxt_en: Fix wrong return value check in bnxt_close_nic()
    
    [ Upstream commit bd6781c18cb5b5e5d8c5873fa9a51668e89ec76e ]
    
    The wait_event_interruptible_timeout() function returns 0
    if the timeout elapsed, -ERESTARTSYS if it was interrupted
    by a signal, and the remaining jiffies otherwise if the
    condition evaluated to true before the timeout elapsed.
    
    Driver should have checked for zero return value instead of
    a positive value.
    
    MChan: Print a warning for -ERESTARTSYS.  The close operation
    will proceed anyway when wait_event_interruptible_timeout()
    returns for any reason.  Since we do the close no matter what,
    we should not return this error code to the caller.  Change
    bnxt_close_nic() to a void function and remove all error
    handling from some of the callers.
    
    Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
    Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
    Reviewed-by: Vikas Gupta <vikas.gupta@broadcom.com>
    Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://lore.kernel.org/r/20231208001658.14230-4-michael.chan@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 8217f9362c79aeb964b51e70bf788b2777d97621
Author: Michael Chan <michael.chan@broadcom.com>
Date:   Thu Aug 17 16:19:09 2023 -0700

    bnxt_en: Save ring error counters across reset
    
    [ Upstream commit 4c70dbe3c0087b439b9e5015057e3e378cf5d8b1 ]
    
    Currently, the ring counters are stored in the per ring datastructure.
    During reset, all the rings are freed together with the associated
    datastructures.  As a result, all the ring error counters will be reset
    to zero.
    
    Add logic to keep track of the total error counts of all the rings
    and save them before reset (including ifdown).  The next patch will
    display these total ring error counters under ethtool -S.
    
    Link: https://lore.kernel.org/netdev/CACKFLimD-bKmJ1tGZOLYRjWzEwxkri-Mw7iFme1x2Dr0twdCeg@mail.gmail.com/
    Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
    Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
    Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://lore.kernel.org/r/20230817231911.165035-5-michael.chan@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: bd6781c18cb5 ("bnxt_en: Fix wrong return value check in bnxt_close_nic()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 53cacb8cdc7e6d05c372d5c63a05e3a72fc6cda6
Author: Somnath Kotur <somnath.kotur@broadcom.com>
Date:   Thu Dec 7 16:16:55 2023 -0800

    bnxt_en: Clear resource reservation during resume
    
    [ Upstream commit 9ef7c58f5abe41e6d91f37f28fe2d851ffedd92a ]
    
    We are issuing HWRM_FUNC_RESET cmd to reset the device including
    all reserved resources, but not clearing the reservations
    within the driver struct. As a result, when the driver re-initializes
    as part of resume, it believes that there is no need to do any
    resource reservation and goes ahead and tries to allocate rings
    which will eventually fail beyond a certain number pre-reserved by
    the firmware.
    
    Fixes: 674f50a5b026 ("bnxt_en: Implement new method to reserve rings.")
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
    Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
    Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://lore.kernel.org/r/20231208001658.14230-2-michael.chan@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit ab410db6e9aa19a4b015228b84930c181dca2e6b
Author: Stefan Wahren <wahrenst@gmx.net>
Date:   Wed Dec 6 15:12:22 2023 +0100

    qca_spi: Fix reset behavior
    
    [ Upstream commit 1057812d146dd658c9a9a96d869c2551150207b5 ]
    
    In case of a reset triggered by the QCA7000 itself, the behavior of the
    qca_spi driver was not quite correct:
    - in case of a pending RX frame decoding the drop counter must be
      incremented and decoding state machine reseted
    - also the reset counter must always be incremented regardless of sync
      state
    
    Fixes: 291ab06ecf67 ("net: qualcomm: new Ethernet over SPI driver for QCA7000")
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://lore.kernel.org/r/20231206141222.52029-4-wahrenst@gmx.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 7e177e5a40d0291c3389bcd7da1e42bde6ce7fb1
Author: Stefan Wahren <wahrenst@gmx.net>
Date:   Wed Dec 6 15:12:21 2023 +0100

    qca_debug: Fix ethtool -G iface tx behavior
    
    [ Upstream commit 96a7e861d9e04d07febd3011c30cd84cd141d81f ]
    
    After calling ethtool -g it was not possible to adjust the TX ring
    size again:
    
      # ethtool -g eth1
      Ring parameters for eth1:
      Pre-set maximums:
      RX:           4
      RX Mini:      n/a
      RX Jumbo:     n/a
      TX:           10
      Current hardware settings:
      RX:           4
      RX Mini:      n/a
      RX Jumbo:     n/a
      TX:           10
      # ethtool -G eth1 tx 8
      netlink error: Invalid argument
    
    The reason for this is that the readonly setting rx_pending get
    initialized and after that the range check in qcaspi_set_ringparam()
    fails regardless of the provided parameter. So fix this by accepting
    the exposed RX defaults. Instead of adding another magic number
    better use a new define here.
    
    Fixes: 291ab06ecf67 ("net: qualcomm: new Ethernet over SPI driver for QCA7000")
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://lore.kernel.org/r/20231206141222.52029-3-wahrenst@gmx.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 2127142c179c16681a2079993001fce6201d363e
Author: Stefan Wahren <wahrenst@gmx.net>
Date:   Wed Dec 6 15:12:20 2023 +0100

    qca_debug: Prevent crash on TX ring changes
    
    [ Upstream commit f4e6064c97c050bd9904925ff7d53d0c9954fc7b ]
    
    The qca_spi driver stop and restart the SPI kernel thread
    (via ndo_stop & ndo_open) in case of TX ring changes. This is
    a big issue because it allows userspace to prevent restart of
    the SPI kernel thread (via signals). A subsequent change of
    TX ring wrongly assume a valid spi_thread pointer which result
    in a crash.
    
    So prevent this by stopping the network traffic handling and
    temporary park the SPI thread.
    
    Fixes: 291ab06ecf67 ("net: qualcomm: new Ethernet over SPI driver for QCA7000")
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://lore.kernel.org/r/20231206141222.52029-2-wahrenst@gmx.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 0da41ddfb2913ab03429725d940b3b1eaded6c6a
Author: Maciej Żenczykowski <maze@google.com>
Date:   Wed Dec 6 09:36:12 2023 -0800

    net: ipv6: support reporting otherwise unknown prefix flags in RTM_NEWPREFIX
    
    [ Upstream commit bd4a816752bab609dd6d65ae021387beb9e2ddbd ]
    
    Lorenzo points out that we effectively clear all unknown
    flags from PIO when copying them to userspace in the netlink
    RTM_NEWPREFIX notification.
    
    We could fix this one at a time as new flags are defined,
    or in one fell swoop - I choose the latter.
    
    We could either define 6 new reserved flags (reserved1..6) and handle
    them individually (and rename them as new flags are defined), or we
    could simply copy the entire unmodified byte over - I choose the latter.
    
    This unfortunately requires some anonymous union/struct magic,
    so we add a static assert on the struct size for a little extra safety.
    
    Cc: David Ahern <dsahern@kernel.org>
    Cc: Lorenzo Colitti <lorenzo@google.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Maciej Żenczykowski <maze@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 514232495aa523641febaa58b687fe6df1cd0b73
Author: Moshe Shemesh <moshe@nvidia.com>
Date:   Wed Sep 21 18:45:11 2022 +0300

    net/mlx5e: Fix possible deadlock on mlx5e_tx_timeout_work
    
    [ Upstream commit eab0da38912ebdad922ed0388209f7eb0a5163cd ]
    
    Due to the cited patch, devlink health commands take devlink lock and
    this may result in deadlock for mlx5e_tx_reporter as it takes local
    state_lock before calling devlink health report and on the other hand
    devlink health commands such as diagnose for same reporter take local
    state_lock after taking devlink lock (see kernel log below).
    
    To fix it, remove local state_lock from mlx5e_tx_timeout_work() before
    calling devlink_health_report() and take care to cancel the work before
    any call to close channels, which may free the SQs that should be
    handled by the work. Before cancel_work_sync(), use current_work() to
    check we are not calling it from within the work, as
    mlx5e_tx_timeout_work() itself may close the channels and reopen as part
    of recovery flow.
    
    While removing state_lock from mlx5e_tx_timeout_work() keep rtnl_lock to
    ensure no change in netdev->real_num_tx_queues, but use rtnl_trylock()
    and a flag to avoid deadlock by calling cancel_work_sync() before
    closing the channels while holding rtnl_lock too.
    
    Kernel log:
    ======================================================
    WARNING: possible circular locking dependency detected
    6.0.0-rc3_for_upstream_debug_2022_08_30_13_10 #1 Not tainted
    ------------------------------------------------------
    kworker/u16:2/65 is trying to acquire lock:
    ffff888122f6c2f8 (&devlink->lock_key#2){+.+.}-{3:3}, at: devlink_health_report+0x2f1/0x7e0
    
    but task is already holding lock:
    ffff888121d20be0 (&priv->state_lock){+.+.}-{3:3}, at: mlx5e_tx_timeout_work+0x70/0x280 [mlx5_core]
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (&priv->state_lock){+.+.}-{3:3}:
           __mutex_lock+0x12c/0x14b0
           mlx5e_rx_reporter_diagnose+0x71/0x700 [mlx5_core]
           devlink_nl_cmd_health_reporter_diagnose_doit+0x212/0xa50
           genl_family_rcv_msg_doit+0x1e9/0x2f0
           genl_rcv_msg+0x2e9/0x530
           netlink_rcv_skb+0x11d/0x340
           genl_rcv+0x24/0x40
           netlink_unicast+0x438/0x710
           netlink_sendmsg+0x788/0xc40
           sock_sendmsg+0xb0/0xe0
           __sys_sendto+0x1c1/0x290
           __x64_sys_sendto+0xdd/0x1b0
           do_syscall_64+0x3d/0x90
           entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    -> #0 (&devlink->lock_key#2){+.+.}-{3:3}:
           __lock_acquire+0x2c8a/0x6200
           lock_acquire+0x1c1/0x550
           __mutex_lock+0x12c/0x14b0
           devlink_health_report+0x2f1/0x7e0
           mlx5e_health_report+0xc9/0xd7 [mlx5_core]
           mlx5e_reporter_tx_timeout+0x2ab/0x3d0 [mlx5_core]
           mlx5e_tx_timeout_work+0x1c1/0x280 [mlx5_core]
           process_one_work+0x7c2/0x1340
           worker_thread+0x59d/0xec0
           kthread+0x28f/0x330
           ret_from_fork+0x1f/0x30
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&priv->state_lock);
                                   lock(&devlink->lock_key#2);
                                   lock(&priv->state_lock);
      lock(&devlink->lock_key#2);
    
     *** DEADLOCK ***
    
    4 locks held by kworker/u16:2/65:
     #0: ffff88811a55b138 ((wq_completion)mlx5e#2){+.+.}-{0:0}, at: process_one_work+0x6e2/0x1340
     #1: ffff888101de7db8 ((work_completion)(&priv->tx_timeout_work)){+.+.}-{0:0}, at: process_one_work+0x70f/0x1340
     #2: ffffffff84ce8328 (rtnl_mutex){+.+.}-{3:3}, at: mlx5e_tx_timeout_work+0x53/0x280 [mlx5_core]
     #3: ffff888121d20be0 (&priv->state_lock){+.+.}-{3:3}, at: mlx5e_tx_timeout_work+0x70/0x280 [mlx5_core]
    
    stack backtrace:
    CPU: 1 PID: 65 Comm: kworker/u16:2 Not tainted 6.0.0-rc3_for_upstream_debug_2022_08_30_13_10 #1
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    Workqueue: mlx5e mlx5e_tx_timeout_work [mlx5_core]
    Call Trace:
     <TASK>
     dump_stack_lvl+0x57/0x7d
     check_noncircular+0x278/0x300
     ? print_circular_bug+0x460/0x460
     ? find_held_lock+0x2d/0x110
     ? __stack_depot_save+0x24c/0x520
     ? alloc_chain_hlocks+0x228/0x700
     __lock_acquire+0x2c8a/0x6200
     ? register_lock_class+0x1860/0x1860
     ? kasan_save_stack+0x1e/0x40
     ? kasan_set_free_info+0x20/0x30
     ? ____kasan_slab_free+0x11d/0x1b0
     ? kfree+0x1ba/0x520
     ? devlink_health_do_dump.part.0+0x171/0x3a0
     ? devlink_health_report+0x3d5/0x7e0
     lock_acquire+0x1c1/0x550
     ? devlink_health_report+0x2f1/0x7e0
     ? lockdep_hardirqs_on_prepare+0x400/0x400
     ? find_held_lock+0x2d/0x110
     __mutex_lock+0x12c/0x14b0
     ? devlink_health_report+0x2f1/0x7e0
     ? devlink_health_report+0x2f1/0x7e0
     ? mutex_lock_io_nested+0x1320/0x1320
     ? trace_hardirqs_on+0x2d/0x100
     ? bit_wait_io_timeout+0x170/0x170
     ? devlink_health_do_dump.part.0+0x171/0x3a0
     ? kfree+0x1ba/0x520
     ? devlink_health_do_dump.part.0+0x171/0x3a0
     devlink_health_report+0x2f1/0x7e0
     mlx5e_health_report+0xc9/0xd7 [mlx5_core]
     mlx5e_reporter_tx_timeout+0x2ab/0x3d0 [mlx5_core]
     ? lockdep_hardirqs_on_prepare+0x400/0x400
     ? mlx5e_reporter_tx_err_cqe+0x1b0/0x1b0 [mlx5_core]
     ? mlx5e_tx_reporter_timeout_dump+0x70/0x70 [mlx5_core]
     ? mlx5e_tx_reporter_dump_sq+0x320/0x320 [mlx5_core]
     ? mlx5e_tx_timeout_work+0x70/0x280 [mlx5_core]
     ? mutex_lock_io_nested+0x1320/0x1320
     ? process_one_work+0x70f/0x1340
     ? lockdep_hardirqs_on_prepare+0x400/0x400
     ? lock_downgrade+0x6e0/0x6e0
     mlx5e_tx_timeout_work+0x1c1/0x280 [mlx5_core]
     process_one_work+0x7c2/0x1340
     ? lockdep_hardirqs_on_prepare+0x400/0x400
     ? pwq_dec_nr_in_flight+0x230/0x230
     ? rwlock_bug.part.0+0x90/0x90
     worker_thread+0x59d/0xec0
     ? process_one_work+0x1340/0x1340
     kthread+0x28f/0x330
     ? kthread_complete_and_exit+0x20/0x20
     ret_from_fork+0x1f/0x30
     </TASK>
    
    Fixes: c90005b5f75c ("devlink: Hold the instance lock in health callbacks")
    Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 1e8396aab21d8da9d34800fe0cd6d14ac0525f61
Author: Mikhail Khvainitski <me@khvoinitsky.org>
Date:   Tue Dec 12 15:31:48 2023 +0200

    HID: lenovo: Restrict detection of patched firmware only to USB cptkbd
    
    [ Upstream commit 43527a0094c10dfbf0d5a2e7979395a38de3ff65 ]
    
    Commit 46a0a2c96f0f ("HID: lenovo: Detect quirk-free fw on cptkbd and
    stop applying workaround") introduced a regression for ThinkPad
    TrackPoint Keyboard II which has similar quirks to cptkbd (so it uses
    the same workarounds) but slightly different so that there are
    false-positives during detecting well-behaving firmware. This commit
    restricts detecting well-behaving firmware to the only model which
    known to have one and have stable enough quirks to not cause
    false-positives.
    
    Fixes: 46a0a2c96f0f ("HID: lenovo: Detect quirk-free fw on cptkbd and stop applying workaround")
    Link: https://lore.kernel.org/linux-input/ZXRiiPsBKNasioqH@jekhomev/
    Link: https://bbs.archlinux.org/viewtopic.php?pid=2135468#p2135468
    Signed-off-by: Mikhail Khvainitski <me@khvoinitsky.org>
    Tested-by: Yauhen Kharuzhy <jekhor@gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit e0cda159c865c694ba9249d56167efd298adc960
Author: David Howells <dhowells@redhat.com>
Date:   Mon Dec 11 21:43:52 2023 +0000

    afs: Fix refcount underflow from error handling race
    
    [ Upstream commit 52bf9f6c09fca8c74388cd41cc24e5d1bff812a9 ]
    
    If an AFS cell that has an unreachable (eg. ENETUNREACH) server listed (VL
    server or fileserver), an asynchronous probe to one of its addresses may
    fail immediately because sendmsg() returns an error.  When this happens, a
    refcount underflow can happen if certain events hit a very small window.
    
    The way this occurs is:
    
     (1) There are two levels of "call" object, the afs_call and the
         rxrpc_call.  Each of them can be transitioned to a "completed" state
         in the event of success or failure.
    
     (2) Asynchronous afs_calls are self-referential whilst they are active to
         prevent them from evaporating when they're not being processed.  This
         reference is disposed of when the afs_call is completed.
    
         Note that an afs_call may only be completed once; once completed
         completing it again will do nothing.
    
     (3) When a call transmission is made, the app-side rxrpc code queues a Tx
         buffer for the rxrpc I/O thread to transmit.  The I/O thread invokes
         sendmsg() to transmit it - and in the case of failure, it transitions
         the rxrpc_call to the completed state.
    
     (4) When an rxrpc_call is completed, the app layer is notified.  In this
         case, the app is kafs and it schedules a work item to process events
         pertaining to an afs_call.
    
     (5) When the afs_call event processor is run, it goes down through the
         RPC-specific handler to afs_extract_data() to retrieve data from rxrpc
         - and, in this case, it picks up the error from the rxrpc_call and
         returns it.
    
         The error is then propagated to the afs_call and that is completed
         too.  At this point the self-reference is released.
    
     (6) If the rxrpc I/O thread manages to complete the rxrpc_call within the
         window between rxrpc_send_data() queuing the request packet and
         checking for call completion on the way out, then
         rxrpc_kernel_send_data() will return the error from sendmsg() to the
         app.
    
     (7) Then afs_make_call() will see an error and will jump to the error
         handling path which will attempt to clean up the afs_call.
    
     (8) The problem comes when the error handling path in afs_make_call()
         tries to unconditionally drop an async afs_call's self-reference.
         This self-reference, however, may already have been dropped by
         afs_extract_data() completing the afs_call
    
     (9) The refcount underflows when we return to afs_do_probe_vlserver() and
         that tries to drop its reference on the afs_call.
    
    Fix this by making afs_make_call() attempt to complete the afs_call rather
    than unconditionally putting it.  That way, if afs_extract_data() manages
    to complete the call first, afs_make_call() won't do anything.
    
    The bug can be forced by making do_udp_sendmsg() return -ENETUNREACH and
    sticking an msleep() in rxrpc_send_data() after the 'success:' label to
    widen the race window.
    
    The error message looks something like:
    
        refcount_t: underflow; use-after-free.
        WARNING: CPU: 3 PID: 720 at lib/refcount.c:28 refcount_warn_saturate+0xba/0x110
        ...
        RIP: 0010:refcount_warn_saturate+0xba/0x110
        ...
        afs_put_call+0x1dc/0x1f0 [kafs]
        afs_fs_get_capabilities+0x8b/0xe0 [kafs]
        afs_fs_probe_fileserver+0x188/0x1e0 [kafs]
        afs_lookup_server+0x3bf/0x3f0 [kafs]
        afs_alloc_server_list+0x130/0x2e0 [kafs]
        afs_create_volume+0x162/0x400 [kafs]
        afs_get_tree+0x266/0x410 [kafs]
        vfs_get_tree+0x25/0xc0
        fc_mount+0xe/0x40
        afs_d_automount+0x1b3/0x390 [kafs]
        __traverse_mounts+0x8f/0x210
        step_into+0x340/0x760
        path_openat+0x13a/0x1260
        do_filp_open+0xaf/0x160
        do_sys_openat2+0xaf/0x170
    
    or something like:
    
        refcount_t: underflow; use-after-free.
        ...
        RIP: 0010:refcount_warn_saturate+0x99/0xda
        ...
        afs_put_call+0x4a/0x175
        afs_send_vl_probes+0x108/0x172
        afs_select_vlserver+0xd6/0x311
        afs_do_cell_detect_alias+0x5e/0x1e9
        afs_cell_detect_alias+0x44/0x92
        afs_validate_fc+0x9d/0x134
        afs_get_tree+0x20/0x2e6
        vfs_get_tree+0x1d/0xc9
        fc_mount+0xe/0x33
        afs_d_automount+0x48/0x9d
        __traverse_mounts+0xe0/0x166
        step_into+0x140/0x274
        open_last_lookups+0x1c1/0x1df
        path_openat+0x138/0x1c3
        do_filp_open+0x55/0xb4
        do_sys_openat2+0x6c/0xb6
    
    Fixes: 34fa47612bfe ("afs: Fix race in async call refcounting")
    Reported-by: Bill MacAllister <bill@ca-zephyr.org>
    Closes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1052304
    Suggested-by: Jeffrey E Altman <jaltman@auristor.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    Link: https://lore.kernel.org/r/2633992.1702073229@warthog.procyon.org.uk/ # v1
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit a7e6477cc3af26cd7f5b1a1b58bac141901d6fbe
Author: Zizhi Wo <wozizhi@huawei.com>
Date:   Fri Dec 1 22:50:48 2023 +0800

    ksmbd: fix memory leak in smb2_lock()
    
    [ Upstream commit 8f1752723019db900fb60a5b9d0dfd3a2bdea36c ]
    
    In smb2_lock(), if setup_async_work() executes successfully,
    work->cancel_argv will bind the argv that generated by kmalloc(). And
    release_async_work() is called in ksmbd_conn_try_dequeue_request() or
    smb2_lock() to release argv.
    However, when setup_async_work function fails, work->cancel_argv has not
    been bound to the argv, resulting in the previously allocated argv not
    being released. Call kfree() to fix it.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Signed-off-by: Zizhi Wo <wozizhi@huawei.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 8925ab33b391d7c55a3083bf9e8bb6c3fa99ae96
Author: Jan Kara <jack@suse.cz>
Date:   Thu Nov 30 10:56:53 2023 +0100

    ext4: fix warning in ext4_dio_write_end_io()
    
    [ Upstream commit 619f75dae2cf117b1d07f27b046b9ffb071c4685 ]
    
    The syzbot has reported that it can hit the warning in
    ext4_dio_write_end_io() because i_size < i_disksize. Indeed the
    reproducer creates a race between DIO IO completion and truncate
    expanding the file and thus ext4_dio_write_end_io() sees an inconsistent
    inode state where i_disksize is already updated but i_size is not
    updated yet. Since we are careful when setting up DIO write and consider
    it extending (and thus performing the IO synchronously with i_rwsem held
    exclusively) whenever it goes past either of i_size or i_disksize, we
    can use the same test during IO completion without risking entering
    ext4_handle_inode_extension() without i_rwsem held. This way we make it
    obvious both i_size and i_disksize are large enough when we report DIO
    completion without relying on unreliable WARN_ON.
    
    Reported-by:  <syzbot+47479b71cdfc78f56d30@syzkaller.appspotmail.com>
    Fixes: 91562895f803 ("ext4: properly sync file size update after O_SYNC direct IO")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Link: https://lore.kernel.org/r/20231130095653.22679-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 1c077acf246c4400df0b9be94aa88650bc31a137
Author: Naveen N Rao <naveen@kernel.org>
Date:   Thu Nov 30 12:29:47 2023 +0530

    powerpc/ftrace: Fix stack teardown in ftrace_no_trace
    
    [ Upstream commit 4b3338aaa74d7d4ec5b6734dc298f0db94ec83d2 ]
    
    Commit 41a506ef71eb ("powerpc/ftrace: Create a dummy stackframe to fix
    stack unwind") added use of a new stack frame on ftrace entry to fix
    stack unwind. However, the commit missed updating the offset used while
    tearing down the ftrace stack when ftrace is disabled. Fix the same.
    
    In addition, the commit missed saving the correct stack pointer in
    pt_regs. Update the same.
    
    Fixes: 41a506ef71eb ("powerpc/ftrace: Create a dummy stackframe to fix stack unwind")
    Cc: stable@vger.kernel.org # v6.5+
    Signed-off-by: Naveen N Rao <naveen@kernel.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20231130065947.2188860-1-naveen@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 34ae53cccf535063b20f743b178603ae3ba31a99
Author: Kelly Kane <kelly@hawknetworks.com>
Date:   Sat Dec 2 17:17:12 2023 -0800

    r8152: add vendor/device ID pair for ASUS USB-C2500
    
    [ Upstream commit 7037d95a047cd89b1f680eed253c6ab586bef1ed ]
    
    The ASUS USB-C2500 is an RTL8156 based 2.5G Ethernet controller.
    
    Add the vendor and product ID values to the driver. This makes Ethernet
    work with the adapter.
    
    Signed-off-by: Kelly Kane <kelly@hawknetworks.com>
    Link: https://lore.kernel.org/r/20231203011712.6314-1-kelly@hawknetworks.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit cac1218b32d7b56832dd36f7baf82f123f305a2a
Author: Antonio Napolitano <anton@polit.no>
Date:   Sat Aug 26 01:05:50 2023 +0200

    r8152: add vendor/device ID pair for D-Link DUB-E250
    
    [ Upstream commit 72f93a3136ee18fd59fa6579f84c07e93424681e ]
    
    The D-Link DUB-E250 is an RTL8156 based 2.5G Ethernet controller.
    
    Add the vendor and product ID values to the driver. This makes Ethernet
    work with the adapter.
    
    Signed-off-by: Antonio Napolitano <anton@polit.no>
    Link: https://lore.kernel.org/r/CV200KJEEUPC.WPKAHXCQJ05I@mercurius
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 7037d95a047c ("r8152: add vendor/device ID pair for ASUS USB-C2500")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit 893597cbabfbc00ee51fd5f73e2028994f49ded6
Author: Bjørn Mork <bjorn@mork.no>
Date:   Fri Jan 6 17:07:38 2023 +0100

    r8152: add USB device driver for config selection
    
    [ Upstream commit ec51fbd1b8a2bca2948dede99c14ec63dc57ff6b ]
    
    Subclassing the generic USB device driver to override the
    default configuration selection regardless of matching interface
    drivers.
    
    The r815x family devices expose a vendor specific function which
    the r8152 interface driver wants to handle.  This is the preferred
    device mode. Additionally one or more USB class functions are
    usually supported for hosts lacking a vendor specific driver. The
    choice is USB configuration based, with one alternate function per
    configuration.
    
    Example device with both NCM and ECM alternate cfgs:
    
    T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  4 Spd=5000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  3
    P:  Vendor=0bda ProdID=8156 Rev=31.00
    S:  Manufacturer=Realtek
    S:  Product=USB 10/100/1G/2.5G LAN
    S:  SerialNumber=001000001
    C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=256mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=00 Driver=r8152
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=   2 Ivl=128ms
    C:  #Ifs= 2 Cfg#= 2 Atr=a0 MxPwr=256mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0d Prot=00 Driver=
    E:  Ad=83(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=01 Driver=
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=01 Driver=
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    C:  #Ifs= 2 Cfg#= 3 Atr=a0 MxPwr=256mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=06 Prot=00 Driver=
    E:  Ad=83(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=00 Driver=
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    A problem with this is that Linux will prefer class functions over
    vendor specific functions. Using the above example, Linux defaults
    to cfg #2, running the device in a sub-optimal NCM mode.
    
    Previously we've attempted to work around the problem by
    blacklisting the devices in the ECM class driver "cdc_ether", and
    matching on the ECM class function in the vendor specific interface
    driver. The latter has been used to switch back to the vendor
    specific configuration when the driver is probed for a class
    function.
    
    This workaround has several issues;
    - class driver blacklists is additional maintanence cruft in an
      unrelated driver
    - class driver blacklists prevents users from optionally running
      the devices in class mode
    - each device needs double match entries in the vendor driver
    - the initial probing as a class function slows down device
      discovery
    
    Now these issues have become even worse with the introduction of
    firmware supporting both NCM and ECM, where NCM ends up as the
    default mode in Linux. To use the same workaround, we now have
    to blacklist the devices in to two different class drivers and
    add yet another match entry to the vendor specific driver.
    
    This patch implements an alternative workaround strategy -
    independent of the interface drivers.  It avoids adding a
    blacklist to the cdc_ncm driver and will let us remove the
    existing blacklist from the cdc_ether driver.
    
    As an additional bonus, removing the blacklists allow users to
    select one of the other device modes if wanted.
    
    Signed-off-by: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

commit b80d0c6e5baeabf0e4aa4fb7ed9909fe40be5e30
Author: Kan Liang <kan.liang@linux.intel.com>
Date:   Thu Jan 12 12:01:05 2023 -0800

    perf/x86/uncore: Don't WARN_ON_ONCE() for a broken discovery table
    
    commit 5d515ee40cb57ea5331998f27df7946a69f14dc3 upstream.
    
    The kernel warning message is triggered, when SPR MCC is used.
    
    [   17.945331] ------------[ cut here ]------------
    [   17.946305] WARNING: CPU: 65 PID: 1 at
    arch/x86/events/intel/uncore_discovery.c:184
    intel_uncore_has_discovery_tables+0x4c0/0x65c
    [   17.946305] Modules linked in:
    [   17.946305] CPU: 65 PID: 1 Comm: swapper/0 Not tainted
    5.4.17-2136.313.1-X10-2c+ #4
    
    It's caused by the broken discovery table of UPI.
    
    The discovery tables are from hardware. Except for dropping the broken
    information, there is nothing Linux can do. Using WARN_ON_ONCE() is
    overkilled.
    
    Use the pr_info() to replace WARN_ON_ONCE(), and specify what uncore unit
    is dropped and the reason.
    
    Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Michael Petlan <mpetlan@redhat.com>
    Link: https://lore.kernel.org/r/20230112200105.733466-6-kan.liang@linux.intel.com
    Cc: Mahmoud Adam <mngyadam@amazon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>