Changelog in Linux kernel 5.15.168

 
9p: add missing locking around taking dentry fid list [+ + +]
Author: Dominique Martinet <asmadeus@codewreck.org>
Date:   Tue May 21 21:13:36 2024 +0900

    9p: add missing locking around taking dentry fid list
    
    commit c898afdc15645efb555acb6d85b484eb40a45409 upstream.
    
    Fix a use-after-free on dentry's d_fsdata fid list when a thread
    looks up a fid through dentry while another thread unlinks it:
    
    UAF thread:
    refcount_t: addition on 0; use-after-free.
     p9_fid_get linux/./include/net/9p/client.h:262
     v9fs_fid_find+0x236/0x280 linux/fs/9p/fid.c:129
     v9fs_fid_lookup_with_uid linux/fs/9p/fid.c:181
     v9fs_fid_lookup+0xbf/0xc20 linux/fs/9p/fid.c:314
     v9fs_vfs_getattr_dotl+0xf9/0x360 linux/fs/9p/vfs_inode_dotl.c:400
     vfs_statx+0xdd/0x4d0 linux/fs/stat.c:248
    
    Freed by:
     p9_fid_destroy (inlined)
     p9_client_clunk+0xb0/0xe0 linux/net/9p/client.c:1456
     p9_fid_put linux/./include/net/9p/client.h:278
     v9fs_dentry_release+0xb5/0x140 linux/fs/9p/vfs_dentry.c:55
     v9fs_remove+0x38f/0x620 linux/fs/9p/vfs_inode.c:518
     vfs_unlink+0x29a/0x810 linux/fs/namei.c:4335
    
    The problem is that d_fsdata was not accessed under d_lock, because
    d_release() normally is only called once the dentry is otherwise no
    longer accessible but since we also call it explicitly in v9fs_remove
    that lock is required:
    move the hlist out of the dentry under lock then unref its fids once
    they are no longer accessible.
    
    Fixes: 154372e67d40 ("fs/9p: fix create-unlink-getattr idiom")
    Cc: stable@vger.kernel.org
    Reported-by: Meysam Firouzi
    Reported-by: Amirmohammad Eftekhar
    Reviewed-by: Christian Schoenebeck <linux_oss@crudebyte.com>
    Message-ID: <20240521122947.1080227-1-asmadeus@codewreck.org>
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Samasth Norway Ananda <samasth.norway.ananda@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ACPI: battery: Fix possible crash when unregistering a battery hook [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Tue Oct 1 23:28:34 2024 +0200

    ACPI: battery: Fix possible crash when unregistering a battery hook
    
    [ Upstream commit 76959aff14a0012ad6b984ec7686d163deccdc16 ]
    
    When a battery hook returns an error when adding a new battery, then
    the battery hook is automatically unregistered.
    However the battery hook provider cannot know that, so it will later
    call battery_hook_unregister() on the already unregistered battery
    hook, resulting in a crash.
    
    Fix this by using the list head to mark already unregistered battery
    hooks as already being unregistered so that they can be ignored by
    battery_hook_unregister().
    
    Fixes: fa93854f7a7e ("battery: Add the battery hooking API")
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Link: https://patch.msgid.link/20241001212835.341788-3-W_Armin@gmx.de
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: battery: Simplify battery hook locking [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Tue Oct 1 23:28:33 2024 +0200

    ACPI: battery: Simplify battery hook locking
    
    [ Upstream commit 86309cbed26139e1caae7629dcca1027d9a28e75 ]
    
    Move the conditional locking from __battery_hook_unregister()
    into battery_hook_unregister() and rename the low-level function
    to simplify the locking during battery hook removal.
    
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Reviewed-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Link: https://patch.msgid.link/20241001212835.341788-2-W_Armin@gmx.de
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Stable-dep-of: 76959aff14a0 ("ACPI: battery: Fix possible crash when unregistering a battery hook")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: bus: Avoid using CPPC if not supported by firmware [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Wed Mar 16 13:39:03 2022 +0100

    ACPI: bus: Avoid using CPPC if not supported by firmware
    
    [ Upstream commit c42fa24b44751c62c86e98430ef915c0609a2ab8 ]
    
    If the platform firmware indicates that it does not support CPPC by
    clearing the OSC_SB_CPC_SUPPORT and OSC_SB_CPCV2_SUPPORT bits in the
    platform _OSC capabilities mask, avoid attempting to evaluate _CPC
    which may fail in that case.
    
    Because the OSC_SB_CPC_SUPPORT and OSC_SB_CPCV2_SUPPORT bits are only
    added to the supported platform capabilities mask on x86, when
    X86_FEATURE_HWP is supported, allow _CPC to be evaluated regardless
    in the other cases.
    
    Link: https://lore.kernel.org/linux-acpi/CAJZ5v0i=ecAksq0TV+iLVObm-=fUfdqPABzzkgm9K6KxO1ZCcg@mail.gmail.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Tested-by: Mario Limonciello <mario.limonciello@amd.com>
    Acked-by: Huang Rui <ray.huang@amd.com>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Stable-dep-of: 60949b7b8054 ("ACPI: CPPC: Fix MASK_VAL() usage")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: CPPC: Fix MASK_VAL() usage [+ + +]
Author: Clément Léger <cleger@rivosinc.com>
Date:   Mon Aug 26 12:16:44 2024 +0200

    ACPI: CPPC: Fix MASK_VAL() usage
    
    [ Upstream commit 60949b7b805424f21326b450ca4f1806c06d982e ]
    
    MASK_VAL() was added as a way to handle bit_offset and bit_width for
    registers located in system memory address space. However, while suited
    for reading, it does not work for writing and result in corrupted
    registers when writing values with bit_offset > 0. Moreover, when a
    register is collocated with another one at the same address but with a
    different mask, the current code results in the other registers being
    overwritten with 0s. The write procedure for SYSTEM_MEMORY registers
    should actually read the value, mask it, update it and write it with the
    updated value. Moreover, since registers can be located in the same
    word, we must take care of locking the access before doing it. We should
    potentially use a global lock since we don't know in if register
    addresses aren't shared with another _CPC package but better not
    encourage vendors to do so. Assume that registers can use the same word
    inside a _CPC package and thus, use a per _CPC package lock.
    
    Fixes: 2f4a4d63a193 ("ACPI: CPPC: Use access_width over bit_width for system memory accesses")
    Signed-off-by: Clément Léger <cleger@rivosinc.com>
    Link: https://patch.msgid.link/20240826101648.95654-1-cleger@rivosinc.com
    [ rjw: Dropped redundant semicolon ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: EC: Do not release locks during operation region accesses [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Thu Jul 4 18:26:54 2024 +0200

    ACPI: EC: Do not release locks during operation region accesses
    
    [ Upstream commit dc171114926ec390ab90f46534545420ec03e458 ]
    
    It is not particularly useful to release locks (the EC mutex and the
    ACPI global lock, if present) and re-acquire them immediately thereafter
    during EC address space accesses in acpi_ec_space_handler().
    
    First, releasing them for a while before grabbing them again does not
    really help anyone because there may not be enough time for another
    thread to acquire them.
    
    Second, if another thread successfully acquires them and carries out
    a new EC write or read in the middle if an operation region access in
    progress, it may confuse the EC firmware, especially after the burst
    mode has been enabled.
    
    Finally, manipulating the locks after writing or reading every single
    byte of data is overhead that it is better to avoid.
    
    Accordingly, modify the code to carry out EC address space accesses
    entirely without releasing the locks.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/12473338.O9o76ZdvQC@rjwysocki.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: PAD: fix crash in exit_round_robin() [+ + +]
Author: Seiji Nishikawa <snishika@redhat.com>
Date:   Sun Aug 25 23:13:52 2024 +0900

    ACPI: PAD: fix crash in exit_round_robin()
    
    [ Upstream commit 0a2ed70a549e61c5181bad5db418d223b68ae932 ]
    
    The kernel occasionally crashes in cpumask_clear_cpu(), which is called
    within exit_round_robin(), because when executing clear_bit(nr, addr) with
    nr set to 0xffffffff, the address calculation may cause misalignment within
    the memory, leading to access to an invalid memory address.
    
    ----------
    BUG: unable to handle kernel paging request at ffffffffe0740618
            ...
    CPU: 3 PID: 2919323 Comm: acpi_pad/14 Kdump: loaded Tainted: G           OE  X --------- -  - 4.18.0-425.19.2.el8_7.x86_64 #1
            ...
    RIP: 0010:power_saving_thread+0x313/0x411 [acpi_pad]
    Code: 89 cd 48 89 d3 eb d1 48 c7 c7 55 70 72 c0 e8 64 86 b0 e4 c6 05 0d a1 02 00 01 e9 bc fd ff ff 45 89 e4 42 8b 04 a5 20 82 72 c0 <f0> 48 0f b3 05 f4 9c 01 00 42 c7 04 a5 20 82 72 c0 ff ff ff ff 31
    RSP: 0018:ff72a5d51fa77ec8 EFLAGS: 00010202
    RAX: 00000000ffffffff RBX: ff462981e5d8cb80 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000246 RDI: 0000000000000246
    RBP: ff46297556959d80 R08: 0000000000000382 R09: ff46297c8d0f38d8
    R10: 0000000000000000 R11: 0000000000000001 R12: 000000000000000e
    R13: 0000000000000000 R14: ffffffffffffffff R15: 000000000000000e
    FS:  0000000000000000(0000) GS:ff46297a800c0000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: ffffffffe0740618 CR3: 0000007e20410004 CR4: 0000000000771ee0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
     ? acpi_pad_add+0x120/0x120 [acpi_pad]
     kthread+0x10b/0x130
     ? set_kthread_struct+0x50/0x50
     ret_from_fork+0x1f/0x40
            ...
    CR2: ffffffffe0740618
    
    crash> dis -lr ffffffffc0726923
            ...
    /usr/src/debug/kernel-4.18.0-425.19.2.el8_7/linux-4.18.0-425.19.2.el8_7.x86_64/./include/linux/cpumask.h: 114
    0xffffffffc0726918 <power_saving_thread+776>:   mov    %r12d,%r12d
    /usr/src/debug/kernel-4.18.0-425.19.2.el8_7/linux-4.18.0-425.19.2.el8_7.x86_64/./include/linux/cpumask.h: 325
    0xffffffffc072691b <power_saving_thread+779>:   mov    -0x3f8d7de0(,%r12,4),%eax
    /usr/src/debug/kernel-4.18.0-425.19.2.el8_7/linux-4.18.0-425.19.2.el8_7.x86_64/./arch/x86/include/asm/bitops.h: 80
    0xffffffffc0726923 <power_saving_thread+787>:   lock btr %rax,0x19cf4(%rip)        # 0xffffffffc0740620 <pad_busy_cpus_bits>
    
    crash> px tsk_in_cpu[14]
    $66 = 0xffffffff
    
    crash> px 0xffffffffc072692c+0x19cf4
    $99 = 0xffffffffc0740620
    
    crash> sym 0xffffffffc0740620
    ffffffffc0740620 (b) pad_busy_cpus_bits [acpi_pad]
    
    crash> px pad_busy_cpus_bits[0]
    $42 = 0xfffc0
    ----------
    
    To fix this, ensure that tsk_in_cpu[tsk_index] != -1 before calling
    cpumask_clear_cpu() in exit_round_robin(), just as it is done in
    round_robin_cpu().
    
    Signed-off-by: Seiji Nishikawa <snishika@redhat.com>
    Link: https://patch.msgid.link/20240825141352.25280-1-snishika@redhat.com
    [ rjw: Subject edit, avoid updates to the same value ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: PMIC: Remove unneeded check in tps68470_pmic_opregion_probe() [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Wed Jul 31 01:53:39 2024 +0300

    ACPI: PMIC: Remove unneeded check in tps68470_pmic_opregion_probe()
    
    [ Upstream commit 07442c46abad1d50ac82af5e0f9c5de2732c4592 ]
    
    In tps68470_pmic_opregion_probe() pointer 'dev' is compared to NULL which
    is useless.
    
    Fix this issue by removing unneeded check.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: e13452ac3790 ("ACPI / PMIC: Add TI PMIC TPS68470 operation region driver")
    Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Link: https://patch.msgid.link/20240730225339.13165-1-amishin@t-argos.ru
    [ rjw: Subject edit ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPI: resource: Add another DMI match for the TongFang GMxXGxx [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Tue Sep 10 11:40:06 2024 +0200

    ACPI: resource: Add another DMI match for the TongFang GMxXGxx
    
    commit a98cfe6ff15b62f94a44d565607a16771c847bc6 upstream.
    
    Internal documentation suggest that the TUXEDO Polaris 15 Gen5 AMD might
    have GMxXGxX as the board name instead of GMxXGxx.
    
    Adding both to be on the safe side.
    
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Cc: All applicable <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240910094008.1601230-1-wse@tuxedocomputers.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: resource: Add Asus ExpertBook B2502CVA to irq1_level_low_skip_override[] [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Fri Sep 27 16:16:06 2024 +0200

    ACPI: resource: Add Asus ExpertBook B2502CVA to irq1_level_low_skip_override[]
    
    commit 056301e7c7c886f96d799edd36f3406cc30e1822 upstream.
    
    Like other Asus ExpertBook models the B2502CVA has its keybopard IRQ (1)
    described as ActiveLow in the DSDT, which the kernel overrides to EdgeHigh
    which breaks the keyboard.
    
    Add the B2502CVA to the irq1_level_low_skip_override[] quirk table to fix
    this.
    
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217760
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20240927141606.66826-4-hdegoede@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: resource: Add Asus Vivobook X1704VAP to irq1_level_low_skip_override[] [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Fri Sep 27 16:16:05 2024 +0200

    ACPI: resource: Add Asus Vivobook X1704VAP to irq1_level_low_skip_override[]
    
    commit 2f80ce0b78c340e332f04a5801dee5e4ac8cfaeb upstream.
    
    Like other Asus Vivobook models the X1704VAP has its keybopard IRQ (1)
    described as ActiveLow in the DSDT, which the kernel overrides to EdgeHigh
    which breaks the keyboard.
    
    Add the X1704VAP to the irq1_level_low_skip_override[] quirk table to fix
    this.
    
    Reported-by: Lamome Julien <julien.lamome@wanadoo.fr>
    Closes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1078696
    Closes: https://lore.kernel.org/all/1226760b-4699-4529-bf57-6423938157a3@wanadoo.fr/
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20240927141606.66826-3-hdegoede@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: sysfs: validate return type of _STR method [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Tue Jul 9 22:37:24 2024 +0200

    ACPI: sysfs: validate return type of _STR method
    
    commit 4bb1e7d027413835b086aed35bc3f0713bc0f72b upstream.
    
    Only buffer objects are valid return values of _STR.
    
    If something else is returned description_show() will access invalid
    memory.
    
    Fixes: d1efe3c324ea ("ACPI: Add new sysfs interface to export device description")
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Link: https://patch.msgid.link/20240709-acpi-sysfs-groups-v2-1-058ab0667fa8@weissschuh.net
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ACPICA: check null return of ACPI_ALLOCATE_ZEROED() in acpi_db_convert_to_package() [+ + +]
Author: Pei Xiao <xiaopei01@kylinos.cn>
Date:   Thu Jul 18 14:05:48 2024 +0800

    ACPICA: check null return of ACPI_ALLOCATE_ZEROED() in acpi_db_convert_to_package()
    
    [ Upstream commit a5242874488eba2b9062985bf13743c029821330 ]
    
    ACPICA commit 4d4547cf13cca820ff7e0f859ba83e1a610b9fd0
    
    ACPI_ALLOCATE_ZEROED() may fail, elements might be NULL and will cause
    NULL pointer dereference later.
    
    Link: https://github.com/acpica/acpica/commit/4d4547cf
    Signed-off-by: Pei Xiao <xiaopei01@kylinos.cn>
    Link: https://patch.msgid.link/tencent_4A21A2865B8B0A0D12CAEBEB84708EDDB505@qq.com
    [ rjw: Subject and changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPICA: Fix memory leak if acpi_ps_get_next_field() fails [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Sun Apr 14 21:50:33 2024 +0200

    ACPICA: Fix memory leak if acpi_ps_get_next_field() fails
    
    [ Upstream commit e6169a8ffee8a012badd8c703716e761ce851b15 ]
    
    ACPICA commit 1280045754264841b119a5ede96cd005bc09b5a7
    
    If acpi_ps_get_next_field() fails, the previously created field list
    needs to be properly disposed before returning the status code.
    
    Link: https://github.com/acpica/acpica/commit/12800457
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    [ rjw: Rename local variable to avoid compiler confusion ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPICA: Fix memory leak if acpi_ps_get_next_namepath() fails [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Wed Apr 3 20:50:11 2024 +0200

    ACPICA: Fix memory leak if acpi_ps_get_next_namepath() fails
    
    [ Upstream commit 5accb265f7a1b23e52b0ec42313d1e12895552f4 ]
    
    ACPICA commit 2802af722bbde7bf1a7ac68df68e179e2555d361
    
    If acpi_ps_get_next_namepath() fails, the previously allocated
    union acpi_parse_object needs to be freed before returning the
    status code.
    
    The issue was first being reported on the Linux ACPI mailing list:
    
    Link: https://lore.kernel.org/linux-acpi/56f94776-484f-48c0-8855-dba8e6a7793b@yandex.ru/T/
    Link: https://github.com/acpica/acpica/commit/2802af72
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPICA: iasl: handle empty connection_node [+ + +]
Author: Aleksandrs Vinarskis <alex.vinarskis@gmail.com>
Date:   Sun Aug 11 23:33:44 2024 +0200

    ACPICA: iasl: handle empty connection_node
    
    [ Upstream commit a0a2459b79414584af6c46dd8c6f866d8f1aa421 ]
    
    ACPICA commit 6c551e2c9487067d4b085333e7fe97e965a11625
    
    Link: https://github.com/acpica/acpica/commit/6c551e2c
    Signed-off-by: Aleksandrs Vinarskis <alex.vinarskis@gmail.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: asihpi: Fix potential OOB array access [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Aug 8 11:14:42 2024 +0200

    ALSA: asihpi: Fix potential OOB array access
    
    [ Upstream commit 7b986c7430a6bb68d523dac7bfc74cbd5b44ef96 ]
    
    ASIHPI driver stores some values in the static array upon a response
    from the driver, and its index depends on the firmware.  We shouldn't
    trust it blindly.
    
    This patch adds a sanity check of the array index to fit in the array
    size.
    
    Link: https://patch.msgid.link/20240808091454.30846-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: core: add isascii() check to card ID generator [+ + +]
Author: Jaroslav Kysela <perex@perex.cz>
Date:   Wed Oct 2 21:46:49 2024 +0200

    ALSA: core: add isascii() check to card ID generator
    
    commit d278a9de5e1837edbe57b2f1f95a104ff6c84846 upstream.
    
    The card identifier should contain only safe ASCII characters. The isalnum()
    returns true also for characters for non-ASCII characters.
    
    Link: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4135
    Link: https://lore.kernel.org/linux-sound/yk3WTvKkwheOon_LzZlJ43PPInz6byYfBzpKkbasww1yzuiMRqn7n6Y8vZcXB-xwFCu_vb8hoNjv7DTNwH5TWjpEuiVsyn9HPCEXqwF4120=@protonmail.com/
    Cc: stable@vger.kernel.org
    Reported-by: Barnabás Pőcze <pobrn@protonmail.com>
    Signed-off-by: Jaroslav Kysela <perex@perex.cz>
    Link: https://patch.msgid.link/20241002194649.1944696-1-perex@perex.cz
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/conexant: Fix conflicting quirk for System76 Pangolin [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Oct 4 10:25:58 2024 +0200

    ALSA: hda/conexant: Fix conflicting quirk for System76 Pangolin
    
    [ Upstream commit b3ebb007060f89d5a45c9b99f06a55e36a1945b5 ]
    
    We received a regression report for System76 Pangolin (pang14) due to
    the recent fix for Tuxedo Sirius devices to support the top speaker.
    The reason was the conflicting PCI SSID, as often seen.
    
    As a workaround, now the codec SSID is checked and the quirk is
    applied conditionally only to Sirius devices.
    
    Fixes: 4178d78cd7a8 ("ALSA: hda/conexant: Add pincfg quirk to enable top speakers on Sirius devices")
    Reported-by: Christian Heusel <christian@heusel.eu>
    Reported-by: Jerry <jerryluo225@gmail.com>
    Closes: https://lore.kernel.org/c930b6a6-64e5-498f-b65a-1cd5e0a1d733@heusel.eu
    Link: https://patch.msgid.link/20241004082602.29016-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/generic: Unconditionally prefer preferred_dacs pairs [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Oct 1 14:14:36 2024 +0200

    ALSA: hda/generic: Unconditionally prefer preferred_dacs pairs
    
    [ Upstream commit 1c801e7f77445bc56e5e1fec6191fd4503534787 ]
    
    Some time ago, we introduced the obey_preferred_dacs flag for choosing
    the DAC/pin pairs specified by the driver instead of parsing the
    paths.  This works as expected, per se, but there have been a few
    cases where we forgot to set this flag while preferred_dacs table is
    already set up.  It ended up with incorrect wiring and made us
    wondering why it doesn't work.
    
    Basically, when the preferred_dacs table is provided, it means that
    the driver really wants to wire up to follow that.  That is, the
    presence of the preferred_dacs table itself is already a "do-it"
    flag.
    
    In this patch, we simply replace the evaluation of obey_preferred_dacs
    flag with the presence of preferred_dacs table for fixing the
    misbehavior.  Another patch to drop of the obsoleted flag will
    follow.
    
    Fixes: 242d990c158d ("ALSA: hda/generic: Add option to enforce preferred_dacs pairs")
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1219803
    Link: https://patch.msgid.link/20241001121439.26060-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek - Fixed ALC256 headphone no sound [+ + +]
Author: Kailang Yang <kailang@realtek.com>
Date:   Thu Aug 22 10:54:19 2024 +0800

    ALSA: hda/realtek - Fixed ALC256 headphone no sound
    
    [ Upstream commit 9b82ff1362f50914c8292902e07be98a9f59d33d ]
    
    Dell platform, plug headphone or headset, it had a chance to get no
    sound from headphone.
    Replace depop procedure will solve this issue.
    
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Link: https://lore.kernel.org/bb8e2de30d294dc287944efa0667685a@realtek.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek - FIxed ALC285 headphone no sound [+ + +]
Author: Kailang Yang <kailang@realtek.com>
Date:   Thu Aug 22 16:46:56 2024 +0800

    ALSA: hda/realtek - FIxed ALC285 headphone no sound
    
    [ Upstream commit 1fa7b099d60ad64f559bd3b8e3f0d94b2e015514 ]
    
    Dell platform with ALC215 ALC285 ALC289 ALC225 ALC295 ALC299, plug
    headphone or headset.
    It had a chance to get no sound from headphone.
    Replace depop procedure will solve this issue.
    
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Link: https://lore.kernel.org/d0de1b03fd174520945dde216d765223@realtek.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Add quirk for Huawei MateBook 13 KLV-WX9 [+ + +]
Author: Ai Chao <aichao@kylinos.cn>
Date:   Thu Sep 26 14:02:52 2024 +0800

    ALSA: hda/realtek: Add quirk for Huawei MateBook 13 KLV-WX9
    
    commit dee476950cbd83125655a3f49e00d63b79f6114e upstream.
    
    The headset mic requires a fixup to be properly detected/used.
    
    Signed-off-by: Ai Chao <aichao@kylinos.cn>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240926060252.25630-1-aichao@kylinos.cn
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Fix the push button function for the ALC257 [+ + +]
Author: Oder Chiou <oder_chiou@realtek.com>
Date:   Mon Sep 30 18:50:39 2024 +0800

    ALSA: hda/realtek: Fix the push button function for the ALC257
    
    [ Upstream commit 05df9732a0894846c46d0062d4af535c5002799d ]
    
    The headset push button cannot work properly in case of the ALC257.
    This patch reverted the previous commit to correct the side effect.
    
    Fixes: ef9718b3d54e ("ALSA: hda/realtek: Fix noise from speakers on Lenovo IdeaPad 3 15IAU7")
    Signed-off-by: Oder Chiou <oder_chiou@realtek.com>
    Link: https://patch.msgid.link/20240930105039.3473266-1-oder_chiou@realtek.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hdsp: Break infinite MIDI input flush loop [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Aug 8 11:15:12 2024 +0200

    ALSA: hdsp: Break infinite MIDI input flush loop
    
    [ Upstream commit c01f3815453e2d5f699ccd8c8c1f93a5b8669e59 ]
    
    The current MIDI input flush on HDSP and HDSPM drivers relies on the
    hardware reporting the right value.  If the hardware doesn't give the
    proper value but returns -1, it may be stuck at an infinite loop.
    
    Add a counter and break if the loop is unexpectedly too long.
    
    Link: https://patch.msgid.link/20240808091513.31380-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: line6: add hw monitor volume control to POD HD500X [+ + +]
Author: Hans P. Moller <hmoller@uc.cl>
Date:   Thu Oct 3 20:28:28 2024 -0300

    ALSA: line6: add hw monitor volume control to POD HD500X
    
    commit 703235a244e533652346844cfa42623afb36eed1 upstream.
    
    Add hw monitor volume control for POD HD500X. This is done adding
    LINE6_CAP_HWMON_CTL to the capabilities
    
    Signed-off-by: Hans P. Moller <hmoller@uc.cl>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20241003232828.5819-1-hmoller@uc.cl
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: mixer_oss: Remove some incorrect kfree_const() usages [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Thu Sep 26 20:17:36 2024 +0200

    ALSA: mixer_oss: Remove some incorrect kfree_const() usages
    
    [ Upstream commit 368e4663c557de4a33f321b44e7eeec0a21b2e4e ]
    
    "assigned" and "assigned->name" are allocated in snd_mixer_oss_proc_write()
    using kmalloc() and kstrdup(), so there is no point in using kfree_const()
    to free these resources.
    
    Switch to the more standard kfree() to free these resources.
    
    This could avoid a memory leak.
    
    Fixes: 454f5ec1d2b7 ("ALSA: mixer: oss: Constify snd_mixer_oss_assign_table definition")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://patch.msgid.link/63ac20f64234b7c9ea87a7fa9baf41e8255852f7.1727374631.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Add delay quirk for VIVO USB-C HEADSET [+ + +]
Author: Lianqin Hu <hulianqin@vivo.com>
Date:   Wed Sep 25 03:16:29 2024 +0000

    ALSA: usb-audio: Add delay quirk for VIVO USB-C HEADSET
    
    commit 73385f3e0d8088b715ae8f3f66d533c482a376ab upstream.
    
    Audio control requests that sets sampling frequency sometimes fail on
    this card. Adding delay between control messages eliminates that problem.
    
    Signed-off-by: Lianqin Hu <hulianqin@vivo.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/TYUPR06MB62177E629E9DEF2401333BF7D2692@TYUPR06MB6217.apcprd06.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Add input value sanity checks for standard types [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Aug 6 14:46:50 2024 +0200

    ALSA: usb-audio: Add input value sanity checks for standard types
    
    [ Upstream commit 901e85677ec0bb9a69fb9eab1feafe0c4eb7d07e ]
    
    For an invalid input value that is out of the given range, currently
    USB-audio driver corrects the value silently and accepts without
    errors.  This is no wrong behavior, per se, but the recent kselftest
    rather wants to have an error in such a case, hence a different
    behavior is expected now.
    
    This patch adds a sanity check at each control put for the standard
    mixer types and returns an error if an invalid value is given.
    
    Note that this covers only the standard mixer types.  The mixer quirks
    that have own control callbacks would need different coverage.
    
    Link: https://patch.msgid.link/20240806124651.28203-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Add logitech Audio profile quirk [+ + +]
Author: Joshua Pius <joshuapius@chromium.org>
Date:   Thu Sep 12 15:26:28 2024 +0000

    ALSA: usb-audio: Add logitech Audio profile quirk
    
    [ Upstream commit a51c925c11d7b855167e64b63eb4378e5adfc11d ]
    
    Specify shortnames for the following Logitech Devices: Rally bar, Rally
    bar mini, Tap, MeetUp and Huddle.
    
    Signed-off-by: Joshua Pius <joshuapius@chromium.org>
    Link: https://patch.msgid.link/20240912152635.1859737-1-joshuapius@google.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Add native DSD support for Luxman D-08u [+ + +]
Author: Jan Lalinsky <lalinsky@c4.cz>
Date:   Thu Oct 3 05:08:11 2024 +0200

    ALSA: usb-audio: Add native DSD support for Luxman D-08u
    
    commit 6b0bde5d8d4078ca5feec72fd2d828f0e5cf115d upstream.
    
    Add native DSD support for Luxman D-08u DAC, by adding the PID/VID 1852:5062.
    This makes DSD playback work, and also sound quality when playing PCM files
    is improved, crackling sounds are gone.
    
    Signed-off-by: Jan Lalinsky <lalinsky@c4.cz>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20241003030811.2655735-1-lalinsky@c4.cz
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Define macros for quirk table entries [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Aug 14 15:48:41 2024 +0200

    ALSA: usb-audio: Define macros for quirk table entries
    
    [ Upstream commit 0c3ad39b791c2ecf718afcaca30e5ceafa939d5c ]
    
    Many entries in the USB-audio quirk tables have relatively complex
    expressions.  For improving the readability, introduce a few macros.
    Those are applied in the following patch.
    
    Link: https://patch.msgid.link/20240814134844.2726-2-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Fix possible NULL pointer dereference in snd_usb_pcm_has_fixed_rate() [+ + +]
Author: Jaroslav Kysela <perex@perex.cz>
Date:   Fri Jan 13 09:53:11 2023 +0100

    ALSA: usb-audio: Fix possible NULL pointer dereference in snd_usb_pcm_has_fixed_rate()
    
    commit 92a9c0ad86d47ff4cce899012e355c400f02cfb8 upstream.
    
    The subs function argument may be NULL, so do not use it before the NULL check.
    
    Fixes: 291e9da91403 ("ALSA: usb-audio: Always initialize fixed_rate in snd_usb_find_implicit_fb_sync_format()")
    Reported-by: coverity-bot <keescook@chromium.org>
    Link: https://lore.kernel.org/alsa-devel/202301121424.4A79A485@keescook/
    Signed-off-by: Jaroslav Kysela <perex@perex.cz>
    Link: https://lore.kernel.org/r/20230113085311.623325-1-perex@perex.cz
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Harshvardhan Jha <harshvardhan.j.jha@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
aoe: fix the potential use-after-free problem in more places [+ + +]
Author: Chun-Yi Lee <joeyli.kernel@gmail.com>
Date:   Wed Oct 2 11:54:58 2024 +0800

    aoe: fix the potential use-after-free problem in more places
    
    commit 6d6e54fc71ad1ab0a87047fd9c211e75d86084a3 upstream.
    
    For fixing CVE-2023-6270, f98364e92662 ("aoe: fix the potential
    use-after-free problem in aoecmd_cfg_pkts") makes tx() calling dev_put()
    instead of doing in aoecmd_cfg_pkts(). It avoids that the tx() runs
    into use-after-free.
    
    Then Nicolai Stange found more places in aoe have potential use-after-free
    problem with tx(). e.g. revalidate(), aoecmd_ata_rw(), resend(), probe()
    and aoecmd_cfg_rsp(). Those functions also use aoenet_xmit() to push
    packet to tx queue. So they should also use dev_hold() to increase the
    refcnt of skb->dev.
    
    On the other hand, moving dev_put() to tx() causes that the refcnt of
    skb->dev be reduced to a negative value, because corresponding
    dev_hold() are not called in revalidate(), aoecmd_ata_rw(), resend(),
    probe(), and aoecmd_cfg_rsp(). This patch fixed this issue.
    
    Cc: stable@vger.kernel.org
    Link: https://nvd.nist.gov/vuln/detail/CVE-2023-6270
    Fixes: f98364e92662 ("aoe: fix the potential use-after-free problem in aoecmd_cfg_pkts")
    Reported-by: Nicolai Stange <nstange@suse.com>
    Signed-off-by: Chun-Yi Lee <jlee@suse.com>
    Link: https://lore.kernel.org/stable/20240624064418.27043-1-jlee%40suse.com
    Link: https://lore.kernel.org/r/20241002035458.24401-1-jlee@suse.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: Add Cortex-715 CPU part definition [+ + +]
Author: Anshuman Khandual <anshuman.khandual@arm.com>
Date:   Mon Oct 7 13:15:16 2024 +0100

    arm64: Add Cortex-715 CPU part definition
    
    [ Upstream commit 07e39e60bbf0ccd5f895568e1afca032193705c0 ]
    
    Add the CPU Partnumbers for the new Arm designs.
    
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-kernel@vger.kernel.org
    Acked-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20221116140915.356601-2-anshuman.khandual@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Mark: Trivial backport ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: cputype: Add Neoverse-N3 definitions [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Mon Oct 7 13:15:17 2024 +0100

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

arm64: dts: renesas: r9a07g044: Correct GICD and GICR sizes [+ + +]
Author: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Date:   Tue Jul 30 13:24:36 2024 +0100

    arm64: dts: renesas: r9a07g044: Correct GICD and GICR sizes
    
    [ Upstream commit 833948fb2b63155847ab691a54800f801555429b ]
    
    The RZ/G2L(C) SoC is equipped with the GIC-600. The GICD is 64KiB +
    64KiB for the MBI alias (in total 128KiB), and the GICR is 128KiB per
    CPU.
    
    Fixes: 68a45525297b2 ("arm64: dts: renesas: Add initial DTSI for RZ/G2{L,LC} SoC's")
    Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Link: https://lore.kernel.org/20240730122436.350013-5-prabhakar.mahadev-lad.rj@bp.renesas.com
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: rockchip: Correct the Pinebook Pro battery design capacity [+ + +]
Author: Dragan Simic <dsimic@manjaro.org>
Date:   Mon Jul 15 19:44:20 2024 +0200

    arm64: dts: rockchip: Correct the Pinebook Pro battery design capacity
    
    commit def33fb1191207f5afa6dcb681d71fef2a6c1293 upstream.
    
    All batches of the Pine64 Pinebook Pro, except the latest batch (as of 2024)
    whose hardware design was revised due to the component shortage, use a 1S
    lithium battery whose nominal/design capacity is 10,000 mAh, according to the
    battery datasheet. [1][2]  Let's correct the design full-charge value in the
    Pinebook Pro board dts, to improve the accuracy of the hardware description,
    and to hopefully improve the accuracy of the fuel gauge a bit on all units
    that don't belong to the latest batch.
    
    The above-mentioned latest batch uses a different 1S lithium battery with
    a slightly lower capacity, more precisely 9,600 mAh.  To make the fuel gauge
    work reliably on the latest batch, a sample battery would need to be sent to
    CellWise, to obtain its proprietary battery profile, whose data goes into
    "cellwise,battery-profile" in the Pinebook Pro board dts.  Without that data,
    the fuel gauge reportedly works unreliably, so changing the design capacity
    won't have any negative effects on the already unreliable operation of the
    fuel gauge in the Pinebook Pros that belong to the latest batch.
    
    According to the battery datasheet, its voltage can go as low as 2.75 V while
    discharging, but it's better to leave the current 3.0 V value in the dts file,
    because of the associated Pinebook Pro's voltage regulation issues.
    
    [1] https://wiki.pine64.org/index.php/Pinebook_Pro#Battery
    [2] https://files.pine64.org/doc/datasheet/pinebook/40110175P%203.8V%2010000mAh%E8%A7%84%E6%A0%BC%E4%B9%A6-14.pdf
    
    Fixes: c7c4d698cd28 ("arm64: dts: rockchip: add fuel gauge to Pinebook Pro dts")
    Cc: stable@vger.kernel.org
    Cc: Marek Kraus <gamiee@pine64.org>
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Link: https://lore.kernel.org/r/731f8ef9b1a867bcc730d19ed277c8c0534c0842.1721065172.git.dsimic@manjaro.org
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: rockchip: fix PMIC interrupt pin in pinctrl for ROCK Pi E [+ + +]
Author: FUKAUMI Naoki <naoki@radxa.com>
Date:   Mon Jul 22 18:52:16 2024 +0900

    arm64: dts: rockchip: fix PMIC interrupt pin in pinctrl for ROCK Pi E
    
    [ Upstream commit c623e9daf60a0275d623ce054601550e54987f5b ]
    
    use GPIO0_A2 as PMIC interrupt pin in pinctrl.
    (I forgot to fix this part in previous commit.)
    
    Fixes: 02afd3d5b9fa ("arm64: dts: rockchip: fix PMIC interrupt pin on ROCK Pi E")
    Signed-off-by: FUKAUMI Naoki <naoki@radxa.com>
    Link: https://lore.kernel.org/r/20240722095216.1656081-1-naoki@radxa.com
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: rockchip: override BIOS_DISABLE signal via GPIO hog on RK3399 Puma [+ + +]
Author: Quentin Schulz <quentin.schulz@cherry.de>
Date:   Wed Jul 31 13:05:29 2024 +0200

    arm64: dts: rockchip: override BIOS_DISABLE signal via GPIO hog on RK3399 Puma
    
    commit 741f5ba7ccba5d7ae796dd11c320e28045524771 upstream.
    
    The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module eMMC
    and SPI flash powered-down initially (in fact it keeps the reset signal
    asserted). BIOS_DISABLE_OVERRIDE pin allows to override that signal so
    that eMMC and SPI can be used regardless of the state of the signal.
    
    Let's make this GPIO a hog so that it's reserved and locked in the
    proper state.
    
    At the same time, make sure the pin is reserved for the hog and cannot
    be requested by another node.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de>
    Link: https://lore.kernel.org/r/20240731-puma-emmc-6-v1-2-4e28eadf32d0@cherry.de
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: rockchip: Raise Pinebook Pro's panel backlight PWM frequency [+ + +]
Author: Dragan Simic <dsimic@manjaro.org>
Date:   Sun Aug 4 23:10:24 2024 +0200

    arm64: dts: rockchip: Raise Pinebook Pro's panel backlight PWM frequency
    
    commit 8c51521de18755d4112a77a598a348b38d0af370 upstream.
    
    Increase the frequency of the PWM signal that drives the LED backlight of
    the Pinebook Pro's panel, from about 1.35 KHz (which equals to the PWM
    period of 740,740 ns), to exactly 8 kHz (which equals to the PWM period of
    125,000 ns).  Using a higher PWM frequency for the panel backlight, which
    reduces the flicker, can only be beneficial to the end users' eyes.
    
    On top of that, increasing the backlight PWM signal frequency reportedly
    eliminates the buzzing emitted from the Pinebook Pro's built-in speakers
    when certain backlight levels are set, which cause some weird interference
    with some of the components of the Pinebook Pro's audio chain.
    
    The old value for the backlight PWM period, i.e. 740,740 ns, is pretty much
    an arbitrary value that was selected during the very early bring-up of the
    Pinebook Pro, only because that value seemed to minimize horizontal line
    distortion on the display, which resulted from the old X.org drivers causing
    screen tearing when dragging windows around.  That's no longer an issue, so
    there are no reasons to stick with the old PWM period value.
    
    The lower and the upper backlight PWM frequency limits for the Pinebook Pro's
    panel, according to its datasheet, are 200 Hz and 10 kHz, respectively. [1]
    These changes still leave some headroom, which may have some positive effects
    on the lifetime expectancy of the panel's backlight LEDs.
    
    [1] https://files.pine64.org/doc/datasheet/PinebookPro/NV140FHM-N49_Rev.P0_20160804_201710235838.pdf
    
    Fixes: 5a65505a6988 ("arm64: dts: rockchip: Add initial support for Pinebook Pro")
    Cc: stable@vger.kernel.org
    Reported-by: Nikola Radojevic <nikola@radojevic.rs>
    Signed-off-by: Dragan Simic <dsimic@manjaro.org>
    Tested-by: Nikola Radojević <nikola@radojevic.rs>
    Link: https://lore.kernel.org/r/2a23b6cfd8c0513e5b233b4006ee3d3ed09b824f.1722805655.git.dsimic@manjaro.org
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: errata: Expand speculative SSBS workaround once more [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Mon Oct 7 13:15:18 2024 +0100

    arm64: errata: Expand speculative SSBS workaround once more
    
    [ Upstream commit 081eb7932c2b244f63317a982c5e3990e2c7fbdd ]
    
    A number of Arm Ltd CPUs suffer from errata whereby an MSR to the SSBS
    special-purpose register does not affect subsequent speculative
    instructions, permitting speculative store bypassing for a window of
    time.
    
    We worked around this for a number of CPUs in commits:
    
    * 7187bb7d0b5c7dfa ("arm64: errata: Add workaround for Arm errata 3194386 and 3312417")
    * 75b3c43eab594bfb ("arm64: errata: Expand speculative SSBS workaround")
    * 145502cac7ea70b5 ("arm64: errata: Expand speculative SSBS workaround (again)")
    
    Since then, a (hopefully final) batch of updates have been published,
    with two more affected CPUs. For the affected CPUs the existing
    mitigation is sufficient, as described in their respective Software
    Developer Errata Notice (SDEN) documents:
    
    * Cortex-A715 (MP148) SDEN v15.0, erratum 3456084
      https://developer.arm.com/documentation/SDEN-2148827/1500/
    
    * Neoverse-N3 (MP195) SDEN v5.0, erratum 3456111
      https://developer.arm.com/documentation/SDEN-3050973/0500/
    
    Enable the existing mitigation by adding the relevant MIDRs to
    erratum_spec_ssbs_list, and update silicon-errata.rst and the
    Kconfig text accordingly.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20240930111705.3352047-3-mark.rutland@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    [ Mark: fix conflict in silicon-errata.rst, handle move ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: dts: imx7d-zii-rmu2: fix Ethernet PHY pinctrl property [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Wed Aug 28 11:56:36 2024 +0200

    ARM: dts: imx7d-zii-rmu2: fix Ethernet PHY pinctrl property
    
    [ Upstream commit 0e49cfe364dea4345551516eb2fe53135a10432b ]
    
    There is no "fsl,phy" property in pin controller pincfg nodes:
    
      imx7d-zii-rmu2.dtb: pinctrl@302c0000: enet1phyinterruptgrp: 'fsl,pins' is a required property
      imx7d-zii-rmu2.dtb: pinctrl@302c0000: enet1phyinterruptgrp: 'fsl,phy' does not match any of the regexes: 'pinctrl-[0-9]+'
    
    Fixes: f496e6750083 ("ARM: dts: Add ZII support for ZII i.MX7 RMU2 board")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: microchip: sam9x60: Fix rtc/rtt clocks [+ + +]
Author: Alexander Dahl <ada@thorsis.com>
Date:   Wed Aug 21 07:51:36 2024 +0200

    ARM: dts: microchip: sam9x60: Fix rtc/rtt clocks
    
    [ Upstream commit d355c895fa4ddd8bec15569eee540baeed7df8c5 ]
    
    The RTC and RTT peripherals use the timing domain slow clock (TD_SLCK),
    sourced from the 32.768 kHz crystal oscillator or slow rc oscillator.
    
    The previously used Monitoring domain slow clock (MD_SLCK) is sourced
    from an internal RC oscillator which is most probably not precise enough
    for real time clock purposes.
    
    Fixes: 1e5f532c2737 ("ARM: dts: at91: sam9x60: add device tree for soc and board")
    Fixes: 5f6b33f46346 ("ARM: dts: sam9x60: add rtt")
    Signed-off-by: Alexander Dahl <ada@thorsis.com>
    Link: https://lore.kernel.org/r/20240821055136.6858-1-ada@thorsis.com
    [claudiu.beznea: removed () around the last commit description paragraph,
     removed " in front of "timing domain slow clock", described that
     TD_SLCK can also be sourced from slow rc oscillator]
    Signed-off-by: Claudiu Beznea <claudiu.beznea@tuxon.dev>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: versatile: fix OF node leak in CPUs prepare [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Mon Aug 26 07:49:33 2024 +0200

    ARM: versatile: fix OF node leak in CPUs prepare
    
    [ Upstream commit f2642d97f2105ed17b2ece0c597450f2ff95d704 ]
    
    Machine code is leaking OF node reference from of_find_matching_node()
    in realview_smp_prepare_cpus().
    
    Fixes: 5420b4b15617 ("ARM: realview: add an DT SMP boot method")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Acked-by: Liviu Dudau <liviu.dudau@arm.com>
    Link: https://lore.kernel.org/20240826054934.10724-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: allow module autoloading for table db1200_pids [+ + +]
Author: Hongbo Li <lihongbo22@huawei.com>
Date:   Wed Aug 21 14:19:54 2024 +0800

    ASoC: allow module autoloading for table db1200_pids
    
    [ Upstream commit 0e9fdab1e8df490354562187cdbb8dec643eae2c ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly
    autoloaded based on the alias from platform_device_id table.
    
    Signed-off-by: Hongbo Li <lihongbo22@huawei.com>
    Link: https://patch.msgid.link/20240821061955.2273782-2-lihongbo22@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: imx-card: Set card.owner to avoid a warning calltrace if SND=m [+ + +]
Author: Hui Wang <hui.wang@canonical.com>
Date:   Wed Oct 2 10:56:59 2024 +0800

    ASoC: imx-card: Set card.owner to avoid a warning calltrace if SND=m
    
    [ Upstream commit 47d7d3fd72afc7dcd548806291793ee6f3848215 ]
    
    In most Linux distribution kernels, the SND is set to m, in such a
    case, when booting the kernel on i.MX8MP EVK board, there is a
    warning calltrace like below:
     Call trace:
     snd_card_init+0x484/0x4cc [snd]
     snd_card_new+0x70/0xa8 [snd]
     snd_soc_bind_card+0x310/0xbd0 [snd_soc_core]
     snd_soc_register_card+0xf0/0x108 [snd_soc_core]
     devm_snd_soc_register_card+0x4c/0xa4 [snd_soc_core]
    
    That is because the card.owner is not set, a warning calltrace is
    raised in the snd_card_init() due to it.
    
    Fixes: aa736700f42f ("ASoC: imx-card: Add imx-card machine driver")
    Signed-off-by: Hui Wang <hui.wang@canonical.com>
    Link: https://patch.msgid.link/20241002025659.723544-1-hui.wang@canonical.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: intel: fix module autoloading [+ + +]
Author: Liao Chen <liaochen4@huawei.com>
Date:   Mon Aug 26 08:49:21 2024 +0000

    ASoC: intel: fix module autoloading
    
    [ Upstream commit ae61a3391088d29aa8605c9f2db84295ab993a49 ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded
    based on the alias from of_device_id table.
    
    Signed-off-by: Liao Chen <liaochen4@huawei.com>
    Link: https://patch.msgid.link/20240826084924.368387-2-liaochen4@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: meson: axg-card: fix 'use-after-free' [+ + +]
Author: Arseniy Krasnov <avkrasnov@salutedevices.com>
Date:   Wed Sep 11 17:24:25 2024 +0300

    ASoC: meson: axg-card: fix 'use-after-free'
    
    commit 4f9a71435953f941969a4f017e2357db62d85a86 upstream.
    
    Buffer 'card->dai_link' is reallocated in 'meson_card_reallocate_links()',
    so move 'pad' pointer initialization after this function when memory is
    already reallocated.
    
    Kasan bug report:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in axg_card_add_link+0x76c/0x9bc
    Read of size 8 at addr ffff000000e8b260 by task modprobe/356
    
    CPU: 0 PID: 356 Comm: modprobe Tainted: G O 6.9.12-sdkernel #1
    Call trace:
     dump_backtrace+0x94/0xec
     show_stack+0x18/0x24
     dump_stack_lvl+0x78/0x90
     print_report+0xfc/0x5c0
     kasan_report+0xb8/0xfc
     __asan_load8+0x9c/0xb8
     axg_card_add_link+0x76c/0x9bc [snd_soc_meson_axg_sound_card]
     meson_card_probe+0x344/0x3b8 [snd_soc_meson_card_utils]
     platform_probe+0x8c/0xf4
     really_probe+0x110/0x39c
     __driver_probe_device+0xb8/0x18c
     driver_probe_device+0x108/0x1d8
     __driver_attach+0xd0/0x25c
     bus_for_each_dev+0xe0/0x154
     driver_attach+0x34/0x44
     bus_add_driver+0x134/0x294
     driver_register+0xa8/0x1e8
     __platform_driver_register+0x44/0x54
     axg_card_pdrv_init+0x20/0x1000 [snd_soc_meson_axg_sound_card]
     do_one_initcall+0xdc/0x25c
     do_init_module+0x10c/0x334
     load_module+0x24c4/0x26cc
     init_module_from_file+0xd4/0x128
     __arm64_sys_finit_module+0x1f4/0x41c
     invoke_syscall+0x60/0x188
     el0_svc_common.constprop.0+0x78/0x13c
     do_el0_svc+0x30/0x40
     el0_svc+0x38/0x78
     el0t_64_sync_handler+0x100/0x12c
     el0t_64_sync+0x190/0x194
    
    Fixes: 7864a79f37b5 ("ASoC: meson: add axg sound card support")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Arseniy Krasnov <avkrasnov@salutedevices.com>
    Reviewed-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://patch.msgid.link/20240911142425.598631-1-avkrasnov@salutedevices.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: rt5682: Return devm_of_clk_add_hw_provider to transfer the error [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Fri Aug 30 22:31:54 2024 +0800

    ASoC: rt5682: Return devm_of_clk_add_hw_provider to transfer the error
    
    commit fcca6d05ef49d5650514ea1dcfd12e4ae3ff2be6 upstream.
    
    Return devm_of_clk_add_hw_provider() in order to transfer the error, if it
    fails due to resource allocation failure or device tree clock provider
    registration failure.
    
    Cc: stable@vger.kernel.org
    Fixes: ebbfabc16d23 ("ASoC: rt5682: Add CCF usage for providing I2S clks")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Link: https://patch.msgid.link/20240830143154.3448004-1-make24@iscas.ac.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: tda7419: fix module autoloading [+ + +]
Author: Liao Chen <liaochen4@huawei.com>
Date:   Mon Aug 26 08:49:23 2024 +0000

    ASoC: tda7419: fix module autoloading
    
    [ Upstream commit 934b44589da9aa300201a00fe139c5c54f421563 ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded
    based on the alias from of_device_id table.
    
    Signed-off-by: Liao Chen <liaochen4@huawei.com>
    Link: https://patch.msgid.link/20240826084924.368387-4-liaochen4@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ata: sata_sil: Rename sil_blacklist to sil_quirks [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Fri Jul 26 11:14:11 2024 +0900

    ata: sata_sil: Rename sil_blacklist to sil_quirks
    
    [ Upstream commit 93b0f9e11ce511353c65b7f924cf5f95bd9c3aba ]
    
    Rename the array sil_blacklist to sil_quirks as this name is more
    neutral and is also consistent with how this driver define quirks with
    the SIL_QUIRK_XXX flags.
    
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Reviewed-by: Niklas Cassel <cassel@kernel.org>
    Reviewed-by: Igor Pylypiv <ipylypiv@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bareudp: Pull inner IP header in bareudp_udp_encap_recv(). [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Wed Sep 11 11:20:58 2024 +0200

    bareudp: Pull inner IP header in bareudp_udp_encap_recv().
    
    [ Upstream commit 45fa29c85117170b0508790f878b13ec6593c888 ]
    
    Bareudp reads the inner IP header to get the ECN value. Therefore, it
    needs to ensure that it's part of the skb's linear data.
    
    This is similar to the vxlan and geneve fixes for that same problem:
      * commit f7789419137b ("vxlan: Pull inner IP header in vxlan_rcv().")
      * commit 1ca1ba465e55 ("geneve: make sure to pull inner header in
        geneve_rx()")
    
    Fixes: 571912c69f0e ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/5205940067c40218a70fbb888080466b2fc288db.1726046181.git.gnault@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bareudp: Pull inner IP header on xmit. [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Wed Sep 11 11:21:05 2024 +0200

    bareudp: Pull inner IP header on xmit.
    
    [ Upstream commit c471236b2359e6b27388475dd04fff0a5e2bf922 ]
    
    Both bareudp_xmit_skb() and bareudp6_xmit_skb() read their skb's inner
    IP header to get its ECN value (with ip_tunnel_ecn_encap()). Therefore
    we need to ensure that the inner IP header is part of the skb's linear
    data.
    
    Fixes: 571912c69f0e ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/267328222f0a11519c6de04c640a4f87a38ea9ed.1726046181.git.gnault@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
blk-integrity: convert to struct device_attribute [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Wed Oct 2 11:01:21 2024 -0300

    blk-integrity: convert to struct device_attribute
    
    Upstream commit 76b8c319f02715e14abdbbbdd6508e83a1059bcc.
    
    An upcoming patch will register the integrity attributes directly with
    the struct device kobject.
    For this the attributes have to be implemented in terms of
    struct device_attribute.
    
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Link: https://lore.kernel.org/r/20230309-kobj_release-gendisk_integrity-v3-2-ceccb4493c46@weissschuh.net
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

blk-integrity: register sysfs attributes on struct device [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Wed Oct 2 11:01:22 2024 -0300

    blk-integrity: register sysfs attributes on struct device
    
    Upstream commit ff53cd52d9bdbf4074d2bbe9b591729997780bd3.
    
    The "integrity" kobject only acted as a holder for static sysfs entries.
    It also was embedded into struct gendisk without managing it, violating
    assumptions of the driver core.
    
    Instead register the sysfs entries directly onto the struct device.
    
    Also drop the now unused member integrity_kobj from struct gendisk.
    
    Suggested-by: Christoph Hellwig <hch@infradead.org>
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Link: https://lore.kernel.org/r/20230309-kobj_release-gendisk_integrity-v3-3-ceccb4493c46@weissschuh.net
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    [cascardo: conflict because of constification of integrity_ktype]
    [cascardo: struct gendisk is defined at include/linux/genhd.h]
    [cascardo: there is no blk_trace_attr_group]
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

blk-integrity: use sysfs_emit [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Wed Oct 2 11:01:20 2024 -0300

    blk-integrity: use sysfs_emit
    
    Upstream commit 3315e169b446249c1b61ff988d157238f4b2c5a0.
    
    The correct way to emit data into sysfs is via sysfs_emit(), use it.
    
    Also perform some trivial syntactic cleanups.
    
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Link: https://lore.kernel.org/r/20230309-kobj_release-gendisk_integrity-v3-1-ceccb4493c46@weissschuh.net
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
blk_iocost: fix more out of bound shifts [+ + +]
Author: Konstantin Ovsepian <ovs@ovs.to>
Date:   Thu Aug 22 08:41:36 2024 -0700

    blk_iocost: fix more out of bound shifts
    
    [ Upstream commit 9bce8005ec0dcb23a58300e8522fe4a31da606fa ]
    
    Recently running UBSAN caught few out of bound shifts in the
    ioc_forgive_debts() function:
    
    UBSAN: shift-out-of-bounds in block/blk-iocost.c:2142:38
    shift exponent 80 is too large for 64-bit type 'u64' (aka 'unsigned long
    long')
    ...
    UBSAN: shift-out-of-bounds in block/blk-iocost.c:2144:30
    shift exponent 80 is too large for 64-bit type 'u64' (aka 'unsigned long
    long')
    ...
    Call Trace:
    <IRQ>
    dump_stack_lvl+0xca/0x130
    __ubsan_handle_shift_out_of_bounds+0x22c/0x280
    ? __lock_acquire+0x6441/0x7c10
    ioc_timer_fn+0x6cec/0x7750
    ? blk_iocost_init+0x720/0x720
    ? call_timer_fn+0x5d/0x470
    call_timer_fn+0xfa/0x470
    ? blk_iocost_init+0x720/0x720
    __run_timer_base+0x519/0x700
    ...
    
    Actual impact of this issue was not identified but I propose to fix the
    undefined behaviour.
    The proposed fix to prevent those out of bound shifts consist of
    precalculating exponent before using it the shift operations by taking
    min value from the actual exponent and maximum possible number of bits.
    
    Reported-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Konstantin Ovsepian <ovs@ovs.to>
    Acked-by: Tejun Heo <tj@kernel.org>
    Link: https://lore.kernel.org/r/20240822154137.2627818-1-ovs@ovs.to
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
block, bfq: choose the last bfqq from merge chain in bfq_setup_cooperator() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Sep 2 21:03:27 2024 +0800

    block, bfq: choose the last bfqq from merge chain in bfq_setup_cooperator()
    
    [ Upstream commit 0e456dba86c7f9a19792204a044835f1ca2c8dbb ]
    
    Consider the following merge chain:
    
    Process 1       Process 2       Process 3       Process 4
     (BIC1)          (BIC2)          (BIC3)          (BIC4)
      Λ                |               |               |
       \--------------\ \-------------\ \-------------\|
                       V               V               V
      bfqq1--------->bfqq2---------->bfqq3----------->bfqq4
    
    IO from Process 1 will get bfqf2 from BIC1 first, then
    bfq_setup_cooperator() will found bfqq2 already merged to bfqq3 and then
    handle this IO from bfqq3. However, the merge chain can be much deeper
    and bfqq3 can be merged to other bfqq as well.
    
    Fix this problem by iterating to the last bfqq in
    bfq_setup_cooperator().
    
    Fixes: 36eca8948323 ("block, bfq: add Early Queue Merge (EQM)")
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240902130329.3787024-3-yukuai1@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

block, bfq: don't break merge chain in bfq_split_bfqq() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Sep 2 21:03:28 2024 +0800

    block, bfq: don't break merge chain in bfq_split_bfqq()
    
    [ Upstream commit 42c306ed723321af4003b2a41bb73728cab54f85 ]
    
    Consider the following scenario:
    
        Process 1       Process 2       Process 3       Process 4
         (BIC1)          (BIC2)          (BIC3)          (BIC4)
          Λ               |               |                |
           \-------------\ \-------------\ \--------------\|
                          V               V                V
          bfqq1--------->bfqq2---------->bfqq3----------->bfqq4
    ref    0              1               2                4
    
    If Process 1 issue a new IO and bfqq2 is found, and then bfq_init_rq()
    decide to spilt bfqq2 by bfq_split_bfqq(). Howerver, procress reference
    of bfqq2 is 1 and bfq_split_bfqq() just clear the coop flag, which will
    break the merge chain.
    
    Expected result: caller will allocate a new bfqq for BIC1
    
        Process 1       Process 2       Process 3       Process 4
         (BIC1)          (BIC2)          (BIC3)          (BIC4)
                          |               |                |
                           \-------------\ \--------------\|
                                          V                V
          bfqq1--------->bfqq2---------->bfqq3----------->bfqq4
    ref    0              0               1                3
    
    Since the condition is only used for the last bfqq4 when the previous
    bfqq2 and bfqq3 are already splited. Fix the problem by checking if
    bfqq is the last one in the merge chain as well.
    
    Fixes: 36eca8948323 ("block, bfq: add Early Queue Merge (EQM)")
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240902130329.3787024-4-yukuai1@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

block, bfq: fix possible UAF for bfqq->bic with merge chain [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Sep 2 21:03:26 2024 +0800

    block, bfq: fix possible UAF for bfqq->bic with merge chain
    
    [ Upstream commit 18ad4df091dd5d067d2faa8fce1180b79f7041a7 ]
    
    1) initial state, three tasks:
    
                    Process 1       Process 2       Process 3
                     (BIC1)          (BIC2)          (BIC3)
                      |  Λ            |  Λ            |  Λ
                      |  |            |  |            |  |
                      V  |            V  |            V  |
                      bfqq1           bfqq2           bfqq3
    process ref:       1                1               1
    
    2) bfqq1 merged to bfqq2:
    
                    Process 1       Process 2       Process 3
                     (BIC1)          (BIC2)          (BIC3)
                      |               |               |  Λ
                      \--------------\|               |  |
                                      V               V  |
                      bfqq1--------->bfqq2            bfqq3
    process ref:       0                2               1
    
    3) bfqq2 merged to bfqq3:
    
                    Process 1       Process 2       Process 3
                     (BIC1)          (BIC2)          (BIC3)
             here -> Λ                |               |
                      \--------------\ \-------------\|
                                      V               V
                      bfqq1--------->bfqq2---------->bfqq3
    process ref:       0                1               3
    
    In this case, IO from Process 1 will get bfqq2 from BIC1 first, and then
    get bfqq3 through merge chain, and finially handle IO by bfqq3.
    Howerver, current code will think bfqq2 is owned by BIC1, like initial
    state, and set bfqq2->bic to BIC1.
    
    bfq_insert_request
    -> by Process 1
     bfqq = bfq_init_rq(rq)
      bfqq = bfq_get_bfqq_handle_split
       bfqq = bic_to_bfqq
       -> get bfqq2 from BIC1
     bfqq->ref++
     rq->elv.priv[0] = bic
     rq->elv.priv[1] = bfqq
     if (bfqq_process_refs(bfqq) == 1)
      bfqq->bic = bic
      -> record BIC1 to bfqq2
    
      __bfq_insert_request
       new_bfqq = bfq_setup_cooperator
       -> get bfqq3 from bfqq2->new_bfqq
       bfqq_request_freed(bfqq)
       new_bfqq->ref++
       rq->elv.priv[1] = new_bfqq
       -> handle IO by bfqq3
    
    Fix the problem by checking bfqq is from merge chain fist. And this
    might fix a following problem reported by our syzkaller(unreproducible):
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in bfq_do_early_stable_merge block/bfq-iosched.c:5692 [inline]
    BUG: KASAN: slab-use-after-free in bfq_do_or_sched_stable_merge block/bfq-iosched.c:5805 [inline]
    BUG: KASAN: slab-use-after-free in bfq_get_queue+0x25b0/0x2610 block/bfq-iosched.c:5889
    Write of size 1 at addr ffff888123839eb8 by task kworker/0:1H/18595
    
    CPU: 0 PID: 18595 Comm: kworker/0:1H Tainted: G             L     6.6.0-07439-gba2303cacfda #6
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
    Workqueue: kblockd blk_mq_requeue_work
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x91/0xf0 lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:364 [inline]
     print_report+0x10d/0x610 mm/kasan/report.c:475
     kasan_report+0x8e/0xc0 mm/kasan/report.c:588
     bfq_do_early_stable_merge block/bfq-iosched.c:5692 [inline]
     bfq_do_or_sched_stable_merge block/bfq-iosched.c:5805 [inline]
     bfq_get_queue+0x25b0/0x2610 block/bfq-iosched.c:5889
     bfq_get_bfqq_handle_split+0x169/0x5d0 block/bfq-iosched.c:6757
     bfq_init_rq block/bfq-iosched.c:6876 [inline]
     bfq_insert_request block/bfq-iosched.c:6254 [inline]
     bfq_insert_requests+0x1112/0x5cf0 block/bfq-iosched.c:6304
     blk_mq_insert_request+0x290/0x8d0 block/blk-mq.c:2593
     blk_mq_requeue_work+0x6bc/0xa70 block/blk-mq.c:1502
     process_one_work kernel/workqueue.c:2627 [inline]
     process_scheduled_works+0x432/0x13f0 kernel/workqueue.c:2700
     worker_thread+0x6f2/0x1160 kernel/workqueue.c:2781
     kthread+0x33c/0x440 kernel/kthread.c:388
     ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:305
     </TASK>
    
    Allocated by task 20776:
     kasan_save_stack+0x20/0x40 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     __kasan_slab_alloc+0x87/0x90 mm/kasan/common.c:328
     kasan_slab_alloc include/linux/kasan.h:188 [inline]
     slab_post_alloc_hook mm/slab.h:763 [inline]
     slab_alloc_node mm/slub.c:3458 [inline]
     kmem_cache_alloc_node+0x1a4/0x6f0 mm/slub.c:3503
     ioc_create_icq block/blk-ioc.c:370 [inline]
     ioc_find_get_icq+0x180/0xaa0 block/blk-ioc.c:436
     bfq_prepare_request+0x39/0xf0 block/bfq-iosched.c:6812
     blk_mq_rq_ctx_init.isra.7+0x6ac/0xa00 block/blk-mq.c:403
     __blk_mq_alloc_requests+0xcc0/0x1070 block/blk-mq.c:517
     blk_mq_get_new_requests block/blk-mq.c:2940 [inline]
     blk_mq_submit_bio+0x624/0x27c0 block/blk-mq.c:3042
     __submit_bio+0x331/0x6f0 block/blk-core.c:624
     __submit_bio_noacct_mq block/blk-core.c:703 [inline]
     submit_bio_noacct_nocheck+0x816/0xb40 block/blk-core.c:732
     submit_bio_noacct+0x7a6/0x1b50 block/blk-core.c:826
     xlog_write_iclog+0x7d5/0xa00 fs/xfs/xfs_log.c:1958
     xlog_state_release_iclog+0x3b8/0x720 fs/xfs/xfs_log.c:619
     xlog_cil_push_work+0x19c5/0x2270 fs/xfs/xfs_log_cil.c:1330
     process_one_work kernel/workqueue.c:2627 [inline]
     process_scheduled_works+0x432/0x13f0 kernel/workqueue.c:2700
     worker_thread+0x6f2/0x1160 kernel/workqueue.c:2781
     kthread+0x33c/0x440 kernel/kthread.c:388
     ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:305
    
    Freed by task 946:
     kasan_save_stack+0x20/0x40 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     kasan_save_free_info+0x2b/0x50 mm/kasan/generic.c:522
     ____kasan_slab_free mm/kasan/common.c:236 [inline]
     __kasan_slab_free+0x12c/0x1c0 mm/kasan/common.c:244
     kasan_slab_free include/linux/kasan.h:164 [inline]
     slab_free_hook mm/slub.c:1815 [inline]
     slab_free_freelist_hook mm/slub.c:1841 [inline]
     slab_free mm/slub.c:3786 [inline]
     kmem_cache_free+0x118/0x6f0 mm/slub.c:3808
     rcu_do_batch+0x35c/0xe30 kernel/rcu/tree.c:2189
     rcu_core+0x819/0xd90 kernel/rcu/tree.c:2462
     __do_softirq+0x1b0/0x7a2 kernel/softirq.c:553
    
    Last potentially related work creation:
     kasan_save_stack+0x20/0x40 mm/kasan/common.c:45
     __kasan_record_aux_stack+0xaf/0xc0 mm/kasan/generic.c:492
     __call_rcu_common kernel/rcu/tree.c:2712 [inline]
     call_rcu+0xce/0x1020 kernel/rcu/tree.c:2826
     ioc_destroy_icq+0x54c/0x830 block/blk-ioc.c:105
     ioc_release_fn+0xf0/0x360 block/blk-ioc.c:124
     process_one_work kernel/workqueue.c:2627 [inline]
     process_scheduled_works+0x432/0x13f0 kernel/workqueue.c:2700
     worker_thread+0x6f2/0x1160 kernel/workqueue.c:2781
     kthread+0x33c/0x440 kernel/kthread.c:388
     ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:305
    
    Second to last potentially related work creation:
     kasan_save_stack+0x20/0x40 mm/kasan/common.c:45
     __kasan_record_aux_stack+0xaf/0xc0 mm/kasan/generic.c:492
     __call_rcu_common kernel/rcu/tree.c:2712 [inline]
     call_rcu+0xce/0x1020 kernel/rcu/tree.c:2826
     ioc_destroy_icq+0x54c/0x830 block/blk-ioc.c:105
     ioc_release_fn+0xf0/0x360 block/blk-ioc.c:124
     process_one_work kernel/workqueue.c:2627 [inline]
     process_scheduled_works+0x432/0x13f0 kernel/workqueue.c:2700
     worker_thread+0x6f2/0x1160 kernel/workqueue.c:2781
     kthread+0x33c/0x440 kernel/kthread.c:388
     ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
     ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:305
    
    The buggy address belongs to the object at ffff888123839d68
     which belongs to the cache bfq_io_cq of size 1360
    The buggy address is located 336 bytes inside of
     freed 1360-byte region [ffff888123839d68, ffff88812383a2b8)
    
    The buggy address belongs to the physical page:
    page:ffffea00048e0e00 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88812383f588 pfn:0x123838
    head:ffffea00048e0e00 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    flags: 0x17ffffc0000a40(workingset|slab|head|node=0|zone=2|lastcpupid=0x1fffff)
    page_type: 0xffffffff()
    raw: 0017ffffc0000a40 ffff88810588c200 ffffea00048ffa10 ffff888105889488
    raw: ffff88812383f588 0000000000150006 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff888123839d80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888123839e00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff888123839e80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                            ^
     ffff888123839f00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888123839f80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    Fixes: 36eca8948323 ("block, bfq: add Early Queue Merge (EQM)")
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240902130329.3787024-2-yukuai1@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

block, bfq: fix uaf for accessing waker_bfqq after splitting [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Sep 9 21:41:48 2024 +0800

    block, bfq: fix uaf for accessing waker_bfqq after splitting
    
    commit 1ba0403ac6447f2d63914fb760c44a3b19c44eaf upstream.
    
    After commit 42c306ed7233 ("block, bfq: don't break merge chain in
    bfq_split_bfqq()"), if the current procress is the last holder of bfqq,
    the bfqq can be freed after bfq_split_bfqq(). Hence recored the bfqq and
    then access bfqq->waker_bfqq may trigger UAF. What's more, the waker_bfqq
    may in the merge chain of bfqq, hence just recored waker_bfqq is still
    not safe.
    
    Fix the problem by adding a helper bfq_waker_bfqq() to check if
    bfqq->waker_bfqq is in the merge chain, and current procress is the only
    holder.
    
    Fixes: 42c306ed7233 ("block, bfq: don't break merge chain in bfq_split_bfqq()")
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240909134154.954924-2-yukuai1@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: fix potential invalid pointer dereference in blk_add_partition [+ + +]
Author: Riyan Dhiman <riyandhiman14@gmail.com>
Date:   Wed Sep 11 18:59:54 2024 +0530

    block: fix potential invalid pointer dereference in blk_add_partition
    
    [ Upstream commit 26e197b7f9240a4ac301dd0ad520c0c697c2ea7d ]
    
    The blk_add_partition() function initially used a single if-condition
    (IS_ERR(part)) to check for errors when adding a partition. This was
    modified to handle the specific case of -ENXIO separately, allowing the
    function to proceed without logging the error in this case. However,
    this change unintentionally left a path where md_autodetect_dev()
    could be called without confirming that part is a valid pointer.
    
    This commit separates the error handling logic by splitting the
    initial if-condition, improving code readability and handling specific
    error scenarios explicitly. The function now distinguishes the general
    error case from -ENXIO without altering the existing behavior of
    md_autodetect_dev() calls.
    
    Fixes: b72053072c0b (block: allow partitions on host aware zone devices)
    Signed-off-by: Riyan Dhiman <riyandhiman14@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20240911132954.5874-1-riyandhiman14@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

block: print symbolic error name instead of error code [+ + +]
Author: Christian Heusel <christian@heusel.eu>
Date:   Fri Jan 12 00:15:18 2024 +0100

    block: print symbolic error name instead of error code
    
    [ Upstream commit 25c1772a0493463408489b1fae65cf77fe46cac1 ]
    
    Utilize the %pe print specifier to get the symbolic error name as a
    string (i.e "-ENOMEM") in the log message instead of the error code to
    increase its readablility.
    
    This change was suggested in
    https://lore.kernel.org/all/92972476-0b1f-4d0a-9951-af3fc8bc6e65@suswa.mountain/
    
    Signed-off-by: Christian Heusel <christian@heusel.eu>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Link: https://lore.kernel.org/r/20240111231521.1596838-1-christian@heusel.eu
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: 26e197b7f924 ("block: fix potential invalid pointer dereference in blk_add_partition")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: btmrvl: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Thu Sep 12 11:12:04 2024 +0800

    Bluetooth: btmrvl: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit 7b1ab460592ca818e7b52f27cd3ec86af79220d1 ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: bb7f4f0bcee6 ("btmrvl: add platform specific wakeup interrupt support")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: btusb: Fix not handling ZPL/short-transfer [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Sep 9 16:51:52 2024 -0400

    Bluetooth: btusb: Fix not handling ZPL/short-transfer
    
    [ Upstream commit 7b05933340f4490ef5b09e84d644d12484b05fdf ]
    
    Requesting transfers of the exact same size of wMaxPacketSize may result
    in ZPL/short-transfer since the USB stack cannot handle it as we are
    limiting the buffer size to be the same as wMaxPacketSize.
    
    Also, in terms of throughput this change has the same effect to
    interrupt endpoint as 290ba200815f "Bluetooth: Improve USB driver throughput
    by increasing the frame size" had for the bulk endpoint, so users of the
    advertisement bearer (e.g. BT Mesh) may benefit from this change.
    
    Fixes: 5e23b923da03 ("[Bluetooth] Add generic driver for Bluetooth USB devices")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Tested-by: Kiran K <kiran.k@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: RFCOMM: FIX possible deadlock in rfcomm_sk_state_change [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Sep 30 13:26:21 2024 -0400

    Bluetooth: RFCOMM: FIX possible deadlock in rfcomm_sk_state_change
    
    [ Upstream commit 08d1914293dae38350b8088980e59fbc699a72fe ]
    
    rfcomm_sk_state_change attempts to use sock_lock so it must never be
    called with it locked but rfcomm_sock_ioctl always attempt to lock it
    causing the following trace:
    
    ======================================================
    WARNING: possible circular locking dependency detected
    6.8.0-syzkaller-08951-gfe46a7dd189e #0 Not tainted
    ------------------------------------------------------
    syz-executor386/5093 is trying to acquire lock:
    ffff88807c396258 (sk_lock-AF_BLUETOOTH-BTPROTO_RFCOMM){+.+.}-{0:0}, at: lock_sock include/net/sock.h:1671 [inline]
    ffff88807c396258 (sk_lock-AF_BLUETOOTH-BTPROTO_RFCOMM){+.+.}-{0:0}, at: rfcomm_sk_state_change+0x5b/0x310 net/bluetooth/rfcomm/sock.c:73
    
    but task is already holding lock:
    ffff88807badfd28 (&d->lock){+.+.}-{3:3}, at: __rfcomm_dlc_close+0x226/0x6a0 net/bluetooth/rfcomm/core.c:491
    
    Reported-by: syzbot+d7ce59b06b3eb14fd218@syzkaller.appspotmail.com
    Tested-by: syzbot+d7ce59b06b3eb14fd218@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=d7ce59b06b3eb14fd218
    Fixes: 3241ad820dbb ("[Bluetooth] Add timestamp support to L2CAP, RFCOMM and SCO")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bonding: Fix unnecessary warnings and logs from bond_xdp_get_xmit_slave() [+ + +]
Author: Jiwon Kim <jiwonaid0@gmail.com>
Date:   Wed Sep 18 14:06:02 2024 +0000

    bonding: Fix unnecessary warnings and logs from bond_xdp_get_xmit_slave()
    
    [ Upstream commit 0cbfd45fbcf0cb26d85c981b91c62fe73cdee01c ]
    
    syzbot reported a WARNING in bond_xdp_get_xmit_slave. To reproduce
    this[1], one bond device (bond1) has xdpdrv, which increases
    bpf_master_redirect_enabled_key. Another bond device (bond0) which is
    unsupported by XDP but its slave (veth3) has xdpgeneric that returns
    XDP_TX. This triggers WARN_ON_ONCE() from the xdp_master_redirect().
    To reduce unnecessary warnings and improve log management, we need to
    delete the WARN_ON_ONCE() and add ratelimit to the netdev_err().
    
    [1] Steps to reproduce:
        # Needs tx_xdp with return XDP_TX;
        ip l add veth0 type veth peer veth1
        ip l add veth3 type veth peer veth4
        ip l add bond0 type bond mode 6 # BOND_MODE_ALB, unsupported by XDP
        ip l add bond1 type bond # BOND_MODE_ROUNDROBIN by default
        ip l set veth0 master bond1
        ip l set bond1 up
        # Increases bpf_master_redirect_enabled_key
        ip l set dev bond1 xdpdrv object tx_xdp.o section xdp_tx
        ip l set veth3 master bond0
        ip l set bond0 up
        ip l set veth4 up
        # Triggers WARN_ON_ONCE() from the xdp_master_redirect()
        ip l set veth3 xdpgeneric object tx_xdp.o section xdp_tx
    
    Reported-by: syzbot+c187823a52ed505b2257@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=c187823a52ed505b2257
    Fixes: 9e2ee5c7e7c3 ("net, bonding: Add XDP support to the bonding driver")
    Signed-off-by: Jiwon Kim <jiwonaid0@gmail.com>
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Link: https://patch.msgid.link/20240918140602.18644-1-jiwonaid0@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, x64: Fix a jit convergence issue [+ + +]
Author: Yonghong Song <yonghong.song@linux.dev>
Date:   Wed Sep 4 15:12:51 2024 -0700

    bpf, x64: Fix a jit convergence issue
    
    [ Upstream commit c8831bdbfbab672c006a18006d36932a494b2fd6 ]
    
    Daniel Hodges reported a jit error when playing with a sched-ext program.
    The error message is:
      unexpected jmp_cond padding: -4 bytes
    
    But further investigation shows the error is actual due to failed
    convergence. The following are some analysis:
    
      ...
      pass4, final_proglen=4391:
        ...
        20e:    48 85 ff                test   rdi,rdi
        211:    74 7d                   je     0x290
        213:    48 8b 77 00             mov    rsi,QWORD PTR [rdi+0x0]
        ...
        289:    48 85 ff                test   rdi,rdi
        28c:    74 17                   je     0x2a5
        28e:    e9 7f ff ff ff          jmp    0x212
        293:    bf 03 00 00 00          mov    edi,0x3
    
    Note that insn at 0x211 is 2-byte cond jump insn for offset 0x7d (-125)
    and insn at 0x28e is 5-byte jmp insn with offset -129.
    
      pass5, final_proglen=4392:
        ...
        20e:    48 85 ff                test   rdi,rdi
        211:    0f 84 80 00 00 00       je     0x297
        217:    48 8b 77 00             mov    rsi,QWORD PTR [rdi+0x0]
        ...
        28d:    48 85 ff                test   rdi,rdi
        290:    74 1a                   je     0x2ac
        292:    eb 84                   jmp    0x218
        294:    bf 03 00 00 00          mov    edi,0x3
    
    Note that insn at 0x211 is 6-byte cond jump insn now since its offset
    becomes 0x80 based on previous round (0x293 - 0x213 = 0x80). At the same
    time, insn at 0x292 is a 2-byte insn since its offset is -124.
    
    pass6 will repeat the same code as in pass4. pass7 will repeat the same
    code as in pass5, and so on. This will prevent eventual convergence.
    
    Passes 1-14 are with padding = 0. At pass15, padding is 1 and related
    insn looks like:
    
        211:    0f 84 80 00 00 00       je     0x297
        217:    48 8b 77 00             mov    rsi,QWORD PTR [rdi+0x0]
        ...
        24d:    48 85 d2                test   rdx,rdx
    
    The similar code in pass14:
        211:    74 7d                   je     0x290
        213:    48 8b 77 00             mov    rsi,QWORD PTR [rdi+0x0]
        ...
        249:    48 85 d2                test   rdx,rdx
        24c:    74 21                   je     0x26f
        24e:    48 01 f7                add    rdi,rsi
        ...
    
    Before generating the following insn,
      250:    74 21                   je     0x273
    "padding = 1" enables some checking to ensure nops is either 0 or 4
    where
      #define INSN_SZ_DIFF (((addrs[i] - addrs[i - 1]) - (prog - temp)))
      nops = INSN_SZ_DIFF - 2
    
    In this specific case,
      addrs[i] = 0x24e // from pass14
      addrs[i-1] = 0x24d // from pass15
      prog - temp = 3 // from 'test rdx,rdx' in pass15
    so
      nops = -4
    and this triggers the failure.
    
    To fix the issue, we need to break cycles of je <-> jmp. For example,
    in the above case, we have
      211:    74 7d                   je     0x290
    the offset is 0x7d. If 2-byte je insn is generated only if
    the offset is less than 0x7d (<= 0x7c), the cycle can be
    break and we can achieve the convergence.
    
    I did some study on other cases like je <-> je, jmp <-> je and
    jmp <-> jmp which may cause cycles. Those cases are not from actual
    reproducible cases since it is pretty hard to construct a test case
    for them. the results show that the offset <= 0x7b (0x7b = 123) should
    be enough to cover all cases. This patch added a new helper to generate 8-bit
    cond/uncond jmp insns only if the offset range is [-128, 123].
    
    Reported-by: Daniel Hodges <hodgesd@meta.com>
    Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
    Link: https://lore.kernel.org/r/20240904221251.37109-1-yonghong.song@linux.dev
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Check percpu map value size first [+ + +]
Author: Tao Chen <chen.dylane@gmail.com>
Date:   Tue Sep 10 22:41:10 2024 +0800

    bpf: Check percpu map value size first
    
    [ Upstream commit 1d244784be6b01162b732a5a7d637dfc024c3203 ]
    
    Percpu map is often used, but the map value size limit often ignored,
    like issue: https://github.com/iovisor/bcc/issues/2519. Actually,
    percpu map value size is bound by PCPU_MIN_UNIT_SIZE, so we
    can check the value size whether it exceeds PCPU_MIN_UNIT_SIZE first,
    like percpu map of local_storage. Maybe the error message seems clearer
    compared with "cannot allocate memory".
    
    Signed-off-by: Jinke Han <jinkehan@didiglobal.com>
    Signed-off-by: Tao Chen <chen.dylane@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20240910144111.1464912-2-chen.dylane@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix bpf_strtol and bpf_strtoul helpers for 32bit [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Fri Sep 13 21:17:46 2024 +0200

    bpf: Fix bpf_strtol and bpf_strtoul helpers for 32bit
    
    [ Upstream commit cfe69c50b05510b24e26ccb427c7cc70beafd6c1 ]
    
    The bpf_strtol() and bpf_strtoul() helpers are currently broken on 32bit:
    
    The argument type ARG_PTR_TO_LONG is BPF-side "long", not kernel-side "long"
    and therefore always considered fixed 64bit no matter if 64 or 32bit underlying
    architecture.
    
    This contract breaks in case of the two mentioned helpers since their BPF_CALL
    definition for the helpers was added with {unsigned,}long *res. Meaning, the
    transition from BPF-side "long" (BPF program) to kernel-side "long" (BPF helper)
    breaks here.
    
    Both helpers call __bpf_strtoll() with "long long" correctly, but later assigning
    the result into 32-bit "*(long *)" on 32bit architectures. From a BPF program
    point of view, this means upper bits will be seen as uninitialised.
    
    Therefore, fix both BPF_CALL signatures to {s,u}64 types to fix this situation.
    
    Now, changing also uapi/bpf.h helper documentation which generates bpf_helper_defs.h
    for BPF programs is tricky: Changing signatures there to __{s,u}64 would trigger
    compiler warnings (incompatible pointer types passing 'long *' to parameter of type
    '__s64 *' (aka 'long long *')) for existing BPF programs.
    
    Leaving the signatures as-is would be fine as from BPF program point of view it is
    still BPF-side "long" and thus equivalent to __{s,u}64 on 64 or 32bit underlying
    architectures.
    
    Note that bpf_strtol() and bpf_strtoul() are the only helpers with this issue.
    
    Fixes: d7a4cb9b6705 ("bpf: Introduce bpf_strtol and bpf_strtoul helpers")
    Reported-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/481fcec8-c12c-9abb-8ecb-76c71c009959@iogearbox.net
    Link: https://lore.kernel.org/r/20240913191754.13290-1-daniel@iogearbox.net
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: lsm: Set bpf_lsm_blob_sizes.lbs_task to 0 [+ + +]
Author: Song Liu <song@kernel.org>
Date:   Tue Sep 10 22:55:08 2024 -0700

    bpf: lsm: Set bpf_lsm_blob_sizes.lbs_task to 0
    
    commit 300a90b2cb5d442879e6398920c49aebbd5c8e40 upstream.
    
    bpf task local storage is now using task_struct->bpf_storage, so
    bpf_lsm_blob_sizes.lbs_task is no longer needed. Remove it to save some
    memory.
    
    Fixes: a10787e6d58c ("bpf: Enable task local storage for tracing programs")
    Cc: stable@vger.kernel.org
    Cc: KP Singh <kpsingh@kernel.org>
    Cc: Matt Bobrowski <mattbobrowski@google.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Acked-by: Matt Bobrowski <mattbobrowski@google.com>
    Link: https://lore.kernel.org/r/20240911055508.9588-1-song@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: fix a NULL pointer dereference when failed to start a new trasacntion [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Sat Sep 28 08:05:58 2024 +0930

    btrfs: fix a NULL pointer dereference when failed to start a new trasacntion
    
    commit c3b47f49e83197e8dffd023ec568403bcdbb774b upstream.
    
    [BUG]
    Syzbot reported a NULL pointer dereference with the following crash:
    
      FAULT_INJECTION: forcing a failure.
       start_transaction+0x830/0x1670 fs/btrfs/transaction.c:676
       prepare_to_relocate+0x31f/0x4c0 fs/btrfs/relocation.c:3642
       relocate_block_group+0x169/0xd20 fs/btrfs/relocation.c:3678
      ...
      BTRFS info (device loop0): balance: ended with status: -12
      Oops: general protection fault, probably for non-canonical address 0xdffffc00000000cc: 0000 [#1] PREEMPT SMP KASAN NOPTI
      KASAN: null-ptr-deref in range [0x0000000000000660-0x0000000000000667]
      RIP: 0010:btrfs_update_reloc_root+0x362/0xa80 fs/btrfs/relocation.c:926
      Call Trace:
       <TASK>
       commit_fs_roots+0x2ee/0x720 fs/btrfs/transaction.c:1496
       btrfs_commit_transaction+0xfaf/0x3740 fs/btrfs/transaction.c:2430
       del_balance_item fs/btrfs/volumes.c:3678 [inline]
       reset_balance_state+0x25e/0x3c0 fs/btrfs/volumes.c:3742
       btrfs_balance+0xead/0x10c0 fs/btrfs/volumes.c:4574
       btrfs_ioctl_balance+0x493/0x7c0 fs/btrfs/ioctl.c:3673
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:907 [inline]
       __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    [CAUSE]
    The allocation failure happens at the start_transaction() inside
    prepare_to_relocate(), and during the error handling we call
    unset_reloc_control(), which makes fs_info->balance_ctl to be NULL.
    
    Then we continue the error path cleanup in btrfs_balance() by calling
    reset_balance_state() which will call del_balance_item() to fully delete
    the balance item in the root tree.
    
    However during the small window between set_reloc_contrl() and
    unset_reloc_control(), we can have a subvolume tree update and created a
    reloc_root for that subvolume.
    
    Then we go into the final btrfs_commit_transaction() of
    del_balance_item(), and into btrfs_update_reloc_root() inside
    commit_fs_roots().
    
    That function checks if fs_info->reloc_ctl is in the merge_reloc_tree
    stage, but since fs_info->reloc_ctl is NULL, it results a NULL pointer
    dereference.
    
    [FIX]
    Just add extra check on fs_info->reloc_ctl inside
    btrfs_update_reloc_root(), before checking
    fs_info->reloc_ctl->merge_reloc_tree.
    
    That DEAD_RELOC_TREE handling is to prevent further modification to the
    reloc tree during merge stage, but since there is no reloc_ctl at all,
    we do not need to bother that.
    
    Reported-by: syzbot+283673dbc38527ef9f3d@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/linux-btrfs/66f6bfa7.050a0220.38ace9.0019.GAE@google.com/
    CC: stable@vger.kernel.org # 4.19+
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: update target inode's ctime on unlink [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Mon Aug 12 12:30:52 2024 -0400

    btrfs: update target inode's ctime on unlink
    
    [ Upstream commit 3bc2ac2f8f0b78a13140fc72022771efe0c9b778 ]
    
    Unlink changes the link count on the target inode. POSIX mandates that
    the ctime must also change when this occurs.
    
    According to https://pubs.opengroup.org/onlinepubs/9699919799/functions/unlink.html:
    
    "Upon successful completion, unlink() shall mark for update the last data
     modification and last file status change timestamps of the parent
     directory. Also, if the file's link count is not 0, the last file status
     change timestamp of the file shall be marked for update."
    
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Reviewed-by: David Sterba <dsterba@suse.com>
    [ add link to the opengroup docs ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: wait for fixup workers before stopping cleaner kthread during umount [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Tue Oct 1 11:06:52 2024 +0100

    btrfs: wait for fixup workers before stopping cleaner kthread during umount
    
    commit 41fd1e94066a815a7ab0a7025359e9b40e4b3576 upstream.
    
    During unmount, at close_ctree(), we have the following steps in this order:
    
    1) Park the cleaner kthread - this doesn't destroy the kthread, it basically
       halts its execution (wake ups against it work but do nothing);
    
    2) We stop the cleaner kthread - this results in freeing the respective
       struct task_struct;
    
    3) We call btrfs_stop_all_workers() which waits for any jobs running in all
       the work queues and then free the work queues.
    
    Syzbot reported a case where a fixup worker resulted in a crash when doing
    a delayed iput on its inode while attempting to wake up the cleaner at
    btrfs_add_delayed_iput(), because the task_struct of the cleaner kthread
    was already freed. This can happen during unmount because we don't wait
    for any fixup workers still running before we call kthread_stop() against
    the cleaner kthread, which stops and free all its resources.
    
    Fix this by waiting for any fixup workers at close_ctree() before we call
    kthread_stop() against the cleaner and run pending delayed iputs.
    
    The stack traces reported by syzbot were the following:
    
      BUG: KASAN: slab-use-after-free in __lock_acquire+0x77/0x2050 kernel/locking/lockdep.c:5065
      Read of size 8 at addr ffff8880272a8a18 by task kworker/u8:3/52
    
      CPU: 1 UID: 0 PID: 52 Comm: kworker/u8:3 Not tainted 6.12.0-rc1-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
      Workqueue: btrfs-fixup btrfs_work_helper
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:94 [inline]
       dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
       print_address_description mm/kasan/report.c:377 [inline]
       print_report+0x169/0x550 mm/kasan/report.c:488
       kasan_report+0x143/0x180 mm/kasan/report.c:601
       __lock_acquire+0x77/0x2050 kernel/locking/lockdep.c:5065
       lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5825
       __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
       _raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162
       class_raw_spinlock_irqsave_constructor include/linux/spinlock.h:551 [inline]
       try_to_wake_up+0xb0/0x1480 kernel/sched/core.c:4154
       btrfs_writepage_fixup_worker+0xc16/0xdf0 fs/btrfs/inode.c:2842
       btrfs_work_helper+0x390/0xc50 fs/btrfs/async-thread.c:314
       process_one_work kernel/workqueue.c:3229 [inline]
       process_scheduled_works+0xa63/0x1850 kernel/workqueue.c:3310
       worker_thread+0x870/0xd30 kernel/workqueue.c:3391
       kthread+0x2f0/0x390 kernel/kthread.c:389
       ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
       </TASK>
    
      Allocated by task 2:
       kasan_save_stack mm/kasan/common.c:47 [inline]
       kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
       unpoison_slab_object mm/kasan/common.c:319 [inline]
       __kasan_slab_alloc+0x66/0x80 mm/kasan/common.c:345
       kasan_slab_alloc include/linux/kasan.h:247 [inline]
       slab_post_alloc_hook mm/slub.c:4086 [inline]
       slab_alloc_node mm/slub.c:4135 [inline]
       kmem_cache_alloc_node_noprof+0x16b/0x320 mm/slub.c:4187
       alloc_task_struct_node kernel/fork.c:180 [inline]
       dup_task_struct+0x57/0x8c0 kernel/fork.c:1107
       copy_process+0x5d1/0x3d50 kernel/fork.c:2206
       kernel_clone+0x223/0x880 kernel/fork.c:2787
       kernel_thread+0x1bc/0x240 kernel/fork.c:2849
       create_kthread kernel/kthread.c:412 [inline]
       kthreadd+0x60d/0x810 kernel/kthread.c:765
       ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
      Freed by task 61:
       kasan_save_stack mm/kasan/common.c:47 [inline]
       kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
       kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:579
       poison_slab_object mm/kasan/common.c:247 [inline]
       __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264
       kasan_slab_free include/linux/kasan.h:230 [inline]
       slab_free_hook mm/slub.c:2343 [inline]
       slab_free mm/slub.c:4580 [inline]
       kmem_cache_free+0x1a2/0x420 mm/slub.c:4682
       put_task_struct include/linux/sched/task.h:144 [inline]
       delayed_put_task_struct+0x125/0x300 kernel/exit.c:228
       rcu_do_batch kernel/rcu/tree.c:2567 [inline]
       rcu_core+0xaaa/0x17a0 kernel/rcu/tree.c:2823
       handle_softirqs+0x2c5/0x980 kernel/softirq.c:554
       __do_softirq kernel/softirq.c:588 [inline]
       invoke_softirq kernel/softirq.c:428 [inline]
       __irq_exit_rcu+0xf4/0x1c0 kernel/softirq.c:637
       irq_exit_rcu+0x9/0x30 kernel/softirq.c:649
       instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1037 [inline]
       sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1037
       asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
    
      Last potentially related work creation:
       kasan_save_stack+0x3f/0x60 mm/kasan/common.c:47
       __kasan_record_aux_stack+0xac/0xc0 mm/kasan/generic.c:541
       __call_rcu_common kernel/rcu/tree.c:3086 [inline]
       call_rcu+0x167/0xa70 kernel/rcu/tree.c:3190
       context_switch kernel/sched/core.c:5318 [inline]
       __schedule+0x184b/0x4ae0 kernel/sched/core.c:6675
       schedule_idle+0x56/0x90 kernel/sched/core.c:6793
       do_idle+0x56a/0x5d0 kernel/sched/idle.c:354
       cpu_startup_entry+0x42/0x60 kernel/sched/idle.c:424
       start_secondary+0x102/0x110 arch/x86/kernel/smpboot.c:314
       common_startup_64+0x13e/0x147
    
      The buggy address belongs to the object at ffff8880272a8000
       which belongs to the cache task_struct of size 7424
      The buggy address is located 2584 bytes inside of
       freed 7424-byte region [ffff8880272a8000, ffff8880272a9d00)
    
      The buggy address belongs to the physical page:
      page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x272a8
      head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
      flags: 0xfff00000000040(head|node=0|zone=1|lastcpupid=0x7ff)
      page_type: f5(slab)
      raw: 00fff00000000040 ffff88801bafa500 dead000000000122 0000000000000000
      raw: 0000000000000000 0000000080040004 00000001f5000000 0000000000000000
      head: 00fff00000000040 ffff88801bafa500 dead000000000122 0000000000000000
      head: 0000000000000000 0000000080040004 00000001f5000000 0000000000000000
      head: 00fff00000000003 ffffea00009caa01 ffffffffffffffff 0000000000000000
      head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      page_owner tracks the page as allocated
      page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 2, tgid 2 (kthreadd), ts 71247381401, free_ts 71214998153
       set_page_owner include/linux/page_owner.h:32 [inline]
       post_alloc_hook+0x1f3/0x230 mm/page_alloc.c:1537
       prep_new_page mm/page_alloc.c:1545 [inline]
       get_page_from_freelist+0x3039/0x3180 mm/page_alloc.c:3457
       __alloc_pages_noprof+0x256/0x6c0 mm/page_alloc.c:4733
       alloc_pages_mpol_noprof+0x3e8/0x680 mm/mempolicy.c:2265
       alloc_slab_page+0x6a/0x120 mm/slub.c:2413
       allocate_slab+0x5a/0x2f0 mm/slub.c:2579
       new_slab mm/slub.c:2632 [inline]
       ___slab_alloc+0xcd1/0x14b0 mm/slub.c:3819
       __slab_alloc+0x58/0xa0 mm/slub.c:3909
       __slab_alloc_node mm/slub.c:3962 [inline]
       slab_alloc_node mm/slub.c:4123 [inline]
       kmem_cache_alloc_node_noprof+0x1fe/0x320 mm/slub.c:4187
       alloc_task_struct_node kernel/fork.c:180 [inline]
       dup_task_struct+0x57/0x8c0 kernel/fork.c:1107
       copy_process+0x5d1/0x3d50 kernel/fork.c:2206
       kernel_clone+0x223/0x880 kernel/fork.c:2787
       kernel_thread+0x1bc/0x240 kernel/fork.c:2849
       create_kthread kernel/kthread.c:412 [inline]
       kthreadd+0x60d/0x810 kernel/kthread.c:765
       ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
      page last free pid 5230 tgid 5230 stack trace:
       reset_page_owner include/linux/page_owner.h:25 [inline]
       free_pages_prepare mm/page_alloc.c:1108 [inline]
       free_unref_page+0xcd0/0xf00 mm/page_alloc.c:2638
       discard_slab mm/slub.c:2678 [inline]
       __put_partials+0xeb/0x130 mm/slub.c:3146
       put_cpu_partial+0x17c/0x250 mm/slub.c:3221
       __slab_free+0x2ea/0x3d0 mm/slub.c:4450
       qlink_free mm/kasan/quarantine.c:163 [inline]
       qlist_free_all+0x9a/0x140 mm/kasan/quarantine.c:179
       kasan_quarantine_reduce+0x14f/0x170 mm/kasan/quarantine.c:286
       __kasan_slab_alloc+0x23/0x80 mm/kasan/common.c:329
       kasan_slab_alloc include/linux/kasan.h:247 [inline]
       slab_post_alloc_hook mm/slub.c:4086 [inline]
       slab_alloc_node mm/slub.c:4135 [inline]
       kmem_cache_alloc_noprof+0x135/0x2a0 mm/slub.c:4142
       getname_flags+0xb7/0x540 fs/namei.c:139
       do_sys_openat2+0xd2/0x1d0 fs/open.c:1409
       do_sys_open fs/open.c:1430 [inline]
       __do_sys_openat fs/open.c:1446 [inline]
       __se_sys_openat fs/open.c:1441 [inline]
       __x64_sys_openat+0x247/0x2a0 fs/open.c:1441
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
      Memory state around the buggy address:
       ffff8880272a8900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff8880272a8980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      >ffff8880272a8a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                  ^
       ffff8880272a8a80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff8880272a8b00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ==================================================================
    
    Reported-by: syzbot+8aaf2df2ef0164ffe1fb@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/linux-btrfs/66fb36b1.050a0220.aab67.003b.GAE@google.com/
    CC: stable@vger.kernel.org # 4.19+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
build-id: require program headers to be right after ELF header [+ + +]
Author: Alexey Dobriyan <adobriyan@gmail.com>
Date:   Fri Jun 21 21:39:33 2024 +0300

    build-id: require program headers to be right after ELF header
    
    [ Upstream commit 961a2851324561caed579764ffbee3db82b32829 ]
    
    Neither ELF spec not ELF loader require program header to be placed right
    after ELF header, but build-id code very much assumes such placement:
    
    See
    
            find_get_page(vma->vm_file->f_mapping, 0);
    
    line and checks against PAGE_SIZE.
    
    Returns errors for now until someone rewrites build-id parser
    to be more inline with load_elf_binary().
    
    Link: https://lkml.kernel.org/r/d58bc281-6ca7-467a-9a64-40fa214bd63e@p183
    Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
    Reviewed-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 905415ff3ffb ("lib/buildid: harden build ID parsing logic")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bus: integrator-lm: fix OF node leak in probe() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Mon Aug 26 07:49:34 2024 +0200

    bus: integrator-lm: fix OF node leak in probe()
    
    commit 15a62b81175885b5adfcaf49870466e3603f06c7 upstream.
    
    Driver code is leaking OF node reference from of_find_matching_node() in
    probe().
    
    Fixes: ccea5e8a5918 ("bus: Add driver for Integrator/AP logic modules")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Acked-by: Liviu Dudau <liviu.dudau@arm.com>
    Link: https://lore.kernel.org/20240826054934.10724-2-krzysztof.kozlowski@linaro.org
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
can: bcm: Clear bo->bcm_proc_read after remove_proc_entry(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Wed Sep 4 18:22:37 2024 -0700

    can: bcm: Clear bo->bcm_proc_read after remove_proc_entry().
    
    [ Upstream commit 94b0818fa63555a65f6ba107080659ea6bcca63e ]
    
    syzbot reported a warning in bcm_release(). [0]
    
    The blamed change fixed another warning that is triggered when
    connect() is issued again for a socket whose connect()ed device has
    been unregistered.
    
    However, if the socket is just close()d without the 2nd connect(), the
    remaining bo->bcm_proc_read triggers unnecessary remove_proc_entry()
    in bcm_release().
    
    Let's clear bo->bcm_proc_read after remove_proc_entry() in bcm_notify().
    
    [0]
    name '4986'
    WARNING: CPU: 0 PID: 5234 at fs/proc/generic.c:711 remove_proc_entry+0x2e7/0x5d0 fs/proc/generic.c:711
    Modules linked in:
    CPU: 0 UID: 0 PID: 5234 Comm: syz-executor606 Not tainted 6.11.0-rc5-syzkaller-00178-g5517ae241919 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
    RIP: 0010:remove_proc_entry+0x2e7/0x5d0 fs/proc/generic.c:711
    Code: ff eb 05 e8 cb 1e 5e ff 48 8b 5c 24 10 48 c7 c7 e0 f7 aa 8e e8 2a 38 8e 09 90 48 c7 c7 60 3a 1b 8c 48 89 de e8 da 42 20 ff 90 <0f> 0b 90 90 48 8b 44 24 18 48 c7 44 24 40 0e 36 e0 45 49 c7 04 07
    RSP: 0018:ffffc9000345fa20 EFLAGS: 00010246
    RAX: 2a2d0aee2eb64600 RBX: ffff888032f1f548 RCX: ffff888029431e00
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    RBP: ffffc9000345fb08 R08: ffffffff8155b2f2 R09: 1ffff1101710519a
    R10: dffffc0000000000 R11: ffffed101710519b R12: ffff888011d38640
    R13: 0000000000000004 R14: 0000000000000000 R15: dffffc0000000000
    FS:  0000000000000000(0000) GS:ffff8880b8800000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fcfb52722f0 CR3: 000000000e734000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     bcm_release+0x250/0x880 net/can/bcm.c:1578
     __sock_release net/socket.c:659 [inline]
     sock_close+0xbc/0x240 net/socket.c:1421
     __fput+0x24a/0x8a0 fs/file_table.c:422
     task_work_run+0x24f/0x310 kernel/task_work.c:228
     exit_task_work include/linux/task_work.h:40 [inline]
     do_exit+0xa2f/0x27f0 kernel/exit.c:882
     do_group_exit+0x207/0x2c0 kernel/exit.c:1031
     __do_sys_exit_group kernel/exit.c:1042 [inline]
     __se_sys_exit_group kernel/exit.c:1040 [inline]
     __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1040
     x64_sys_call+0x2634/0x2640 arch/x86/include/generated/asm/syscalls_64.h:232
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fcfb51ee969
    Code: Unable to access opcode bytes at 0x7fcfb51ee93f.
    RSP: 002b:00007ffce0109ca8 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
    RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007fcfb51ee969
    RDX: 000000000000003c RSI: 00000000000000e7 RDI: 0000000000000001
    RBP: 00007fcfb526f3b0 R08: ffffffffffffffb8 R09: 0000555500000000
    R10: 0000555500000000 R11: 0000000000000246 R12: 00007fcfb526f3b0
    R13: 0000000000000000 R14: 00007fcfb5271ee0 R15: 00007fcfb51bf160
     </TASK>
    
    Fixes: 76fe372ccb81 ("can: bcm: Remove proc entry when dev is unregistered.")
    Reported-by: syzbot+0532ac7a06fb1a03187e@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=0532ac7a06fb1a03187e
    Tested-by: syzbot+0532ac7a06fb1a03187e@syzkaller.appspotmail.com
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Link: https://patch.msgid.link/20240905012237.79683-1-kuniyu@amazon.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: j1939: use correct function name in comment [+ + +]
Author: Zhang Changzhong <zhangchangzhong@huawei.com>
Date:   Thu Aug 29 20:48:23 2024 +0800

    can: j1939: use correct function name in comment
    
    [ Upstream commit dc2ddcd136fe9b6196a7dd01f75f824beb02d43f ]
    
    The function j1939_cancel_all_active_sessions() was renamed to
    j1939_cancel_active_session() but name in comment wasn't updated.
    
    Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Link: https://patch.msgid.link/1724935703-44621-1-git-send-email-zhangchangzhong@huawei.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: m_can: m_can_close(): stop clocks after device has been shut down [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Mon Sep 9 15:07:41 2024 +0200

    can: m_can: m_can_close(): stop clocks after device has been shut down
    
    [ Upstream commit 2c09b50efcad985cf920ca88baa9aa52b1999dcc ]
    
    After calling m_can_stop() an interrupt may be pending or NAPI might
    still be executed. This means the driver might still touch registers
    of the IP core after the clocks have been disabled. This is not good
    practice and might lead to aborts depending on the SoC integration.
    
    To avoid these potential problems, make m_can_close() symmetric to
    m_can_open(), i.e. stop the clocks at the end, right before shutting
    down the transceiver.
    
    Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support")
    Link: https://patch.msgid.link/20240910-can-m_can-fix-ifup-v3-2-6c1720ba45ce@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ceph: remove the incorrect Fw reference check when dirtying pages [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Thu Sep 5 06:22:18 2024 +0800

    ceph: remove the incorrect Fw reference check when dirtying pages
    
    [ Upstream commit c08dfb1b49492c09cf13838c71897493ea3b424e ]
    
    When doing the direct-io reads it will also try to mark pages dirty,
    but for the read path it won't hold the Fw caps and there is case
    will it get the Fw reference.
    
    Fixes: 5dda377cf0a6 ("ceph: set i_head_snapc when getting CEPH_CAP_FILE_WR reference")
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cgroup: Make operations on the cgroup root_list RCU safe [+ + +]
Author: Yafang Shao <laoar.shao@gmail.com>
Date:   Sun Oct 29 06:14:29 2023 +0000

    cgroup: Make operations on the cgroup root_list RCU safe
    
    [ Upstream commit d23b5c577715892c87533b13923306acc6243f93 ]
    
    At present, when we perform operations on the cgroup root_list, we must
    hold the cgroup_mutex, which is a relatively heavyweight lock. In reality,
    we can make operations on this list RCU-safe, eliminating the need to hold
    the cgroup_mutex during traversal. Modifications to the list only occur in
    the cgroup root setup and destroy paths, which should be infrequent in a
    production environment. In contrast, traversal may occur frequently.
    Therefore, making it RCU-safe would be beneficial.
    
    Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

cgroup: Move rcu_head up near the top of cgroup_root [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Thu Dec 7 08:46:14 2023 -0500

    cgroup: Move rcu_head up near the top of cgroup_root
    
    commit a7fb0423c201ba12815877a0b5a68a6a1710b23a upstream.
    
    Commit d23b5c577715 ("cgroup: Make operations on the cgroup root_list RCU
    safe") adds a new rcu_head to the cgroup_root structure and kvfree_rcu()
    for freeing the cgroup_root.
    
    The current implementation of kvfree_rcu(), however, has the limitation
    that the offset of the rcu_head structure within the larger data
    structure must be less than 4096 or the compilation will fail. See the
    macro definition of __is_kvfree_rcu_offset() in include/linux/rcupdate.h
    for more information.
    
    By putting rcu_head below the large cgroup structure, any change to the
    cgroup structure that makes it larger run the risk of causing build
    failure under certain configurations. Commit 77070eeb8821 ("cgroup:
    Avoid false cacheline sharing of read mostly rstat_cpu") happens to be
    the last straw that breaks it. Fix this problem by moving the rcu_head
    structure up before the cgroup structure.
    
    Fixes: d23b5c577715 ("cgroup: Make operations on the cgroup root_list RCU safe")
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Closes: https://lore.kernel.org/lkml/20231207143806.114e0a74@canb.auug.org.au/
    Signed-off-by: Waiman Long <longman@redhat.com>
    Acked-by: Yafang Shao <laoar.shao@gmail.com>
    Reviewed-by: Yosry Ahmed <yosryahmed@google.com>
    Reviewed-by: Michal Koutný <mkoutny@suse.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: bcm: bcm53573: fix OF node leak in init [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Mon Aug 26 08:58:01 2024 +0200

    clk: bcm: bcm53573: fix OF node leak in init
    
    [ Upstream commit f92d67e23b8caa81f6322a2bad1d633b00ca000e ]
    
    Driver code is leaking OF node reference from of_get_parent() in
    bcm53573_ilp_init().  Usage of of_get_parent() is not needed in the
    first place, because the parent node will not be freed while we are
    processing given node (triggered by CLK_OF_DECLARE()).  Thus fix the
    leak by accessing parent directly, instead of of_get_parent().
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20240826065801.17081-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: imx: imx8mp: fix clock tree update of TF-A managed clocks [+ + +]
Author: Zhipeng Wang <zhipeng.wang_1@nxp.com>
Date:   Fri Jun 7 21:33:38 2024 +0800

    clk: imx: imx8mp: fix clock tree update of TF-A managed clocks
    
    [ Upstream commit 3d29036853b9cb07ac49e8261fca82a940be5c41 ]
    
    On the i.MX8M*, the TF-A exposes a SiP (Silicon Provider) service
    for DDR frequency scaling. The imx8m-ddrc-devfreq driver calls the
    SiP and then does clk_set_parent on the DDR muxes to synchronize
    the clock tree.
    
    since commit 936c383673b9 ("clk: imx: fix composite peripheral flags"),
    these TF-A managed muxes have SET_PARENT_GATE set, which results
    in imx8m-ddrc-devfreq's clk_set_parent after SiP failing with -EBUSY:
    
    clk_set_parent(dram_apb_src, sys1_pll_40m);(busfreq-imx8mq.c)
    
    commit 926bf91248dd
    ("clk: imx8m: fix clock tree update of TF-A managed clocks") adds this
    method and enables 8mm, 8mn and 8mq. i.MX8MP also needs it.
    
    This is safe to do, because updating the Linux clock tree to reflect
    reality will always be glitch-free.
    
    Another reason to this patch is that powersave image BT music
    requires dram to be 400MTS, so clk_set_parent(dram_alt_src,
    sys1_pll_800m); is required. Without this patch, it will not succeed.
    
    Fixes: 936c383673b9 ("clk: imx: fix composite peripheral flags")
    Signed-off-by: Zhipeng Wang <zhipeng.wang_1@nxp.com>
    Reviewed-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
    Link: https://lore.kernel.org/r/20240607133347.3291040-7-peng.fan@oss.nxp.com
    Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: imx: imx8qxp: Parent should be initialized earlier than the clock [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Jun 7 21:33:46 2024 +0800

    clk: imx: imx8qxp: Parent should be initialized earlier than the clock
    
    [ Upstream commit 766c386c16c9899461b83573a06380d364c6e261 ]
    
    The initialization order of SCU clocks affects the sequence of SCU clock
    resume. If there are no other effects, the earlier the initialization,
    the earlier the resume. During SCU clock resume, the clock rate is
    restored. As SCFW guidelines, configure the parent clock rate before
    configuring the child rate.
    
    Fixes: babfaa9556d7 ("clk: imx: scu: add more scu clocks")
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
    Link: https://lore.kernel.org/r/20240607133347.3291040-15-peng.fan@oss.nxp.com
    Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: imx: imx8qxp: Register dc0_bypass0_clk before disp clk [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Jun 7 21:33:45 2024 +0800

    clk: imx: imx8qxp: Register dc0_bypass0_clk before disp clk
    
    [ Upstream commit e61352d5ecdc0da2e7253121c15d9a3e040f78a1 ]
    
    The initialization order of SCU clocks affects the sequence of SCU clock
    resume. If there are no other effects, the earlier the initialization,
    the earlier the resume. During SCU clock resume, the clock rate is
    restored. As SCFW guidelines, configure the parent clock rate before
    configuring the child rate.
    
    Fixes: 91e916771de0 ("clk: imx: scu: remove legacy scu clock binding support")
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
    Link: https://lore.kernel.org/r/20240607133347.3291040-14-peng.fan@oss.nxp.com
    Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: imx: Remove CLK_SET_PARENT_GATE for DRAM mux for i.MX7D [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Jun 7 21:33:39 2024 +0800

    clk: imx: Remove CLK_SET_PARENT_GATE for DRAM mux for i.MX7D
    
    [ Upstream commit a54c441b46a0745683c2eef5a359d22856d27323 ]
    
    For i.MX7D DRAM related mux clock, the clock source change should ONLY
    be done done in low level asm code without accessing DRAM, and then
    calling clk API to sync the HW clock status with clk tree, it should never
    touch real clock source switch via clk API, so CLK_SET_PARENT_GATE flag
    should NOT be added, otherwise, DRAM's clock parent will be disabled when
    DRAM is active, and system will hang.
    
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
    Link: https://lore.kernel.org/r/20240607133347.3291040-8-peng.fan@oss.nxp.com
    Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: clk-rpmh: Fix overflow in BCM vote [+ + +]
Author: Mike Tipton <quic_mdtipton@quicinc.com>
Date:   Fri Aug 9 10:51:29 2024 +0530

    clk: qcom: clk-rpmh: Fix overflow in BCM vote
    
    commit a4e5af27e6f6a8b0d14bc0d7eb04f4a6c7291586 upstream.
    
    Valid frequencies may result in BCM votes that exceed the max HW value.
    Set vote ceiling to BCM_TCS_CMD_VOTE_MASK to ensure the votes aren't
    truncated, which can result in lower frequencies than desired.
    
    Fixes: 04053f4d23a4 ("clk: qcom: clk-rpmh: Add IPA clock support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mike Tipton <quic_mdtipton@quicinc.com>
    Reviewed-by: Taniya Das <quic_tdas@quicinc.com>
    Signed-off-by: Imran Shaik <quic_imrashai@quicinc.com>
    Link: https://lore.kernel.org/r/20240809-clk-rpmh-bcm-vote-fix-v2-1-240c584b7ef9@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: qcom: dispcc-sm8250: use CLK_SET_RATE_PARENT for branch clocks [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Sun Aug 4 08:40:05 2024 +0300

    clk: qcom: dispcc-sm8250: use CLK_SET_RATE_PARENT for branch clocks
    
    commit 0e93c6320ecde0583de09f3fe801ce8822886fec upstream.
    
    Add CLK_SET_RATE_PARENT for several branch clocks. Such clocks don't
    have a way to change the rate, so set the parent rate instead.
    
    Fixes: 80a18f4a8567 ("clk: qcom: Add display clock controller driver for SM8150 and SM8250")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20240804-sm8350-fixes-v1-1-1149dd8399fe@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: qcom: gcc-sc8180x: Add GPLL9 support [+ + +]
Author: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
Date:   Mon Aug 12 10:43:03 2024 +0530

    clk: qcom: gcc-sc8180x: Add GPLL9 support
    
    [ Upstream commit 818a2f8d5e4ad2c1e39a4290158fe8e39a744c70 ]
    
    Add the missing GPLL9 pll and fix the gcc_parents_7 data to use
    the correct pll hw.
    
    Fixes: 4433594bbe5d ("clk: qcom: gcc: Add global clock controller driver for SC8180x")
    Cc: stable@vger.kernel.org
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
    Link: https://lore.kernel.org/r/20240812-gcc-sc8180x-fixes-v2-3-8b3eaa5fb856@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: qcom: gcc-sc8180x: Fix the sdcc2 and sdcc4 clocks freq table [+ + +]
Author: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
Date:   Mon Aug 12 10:43:04 2024 +0530

    clk: qcom: gcc-sc8180x: Fix the sdcc2 and sdcc4 clocks freq table
    
    commit b8acaf2de8081371761ab4cf1e7a8ee4e7acc139 upstream.
    
    Update the frequency tables of gcc_sdcc2_apps_clk and gcc_sdcc4_apps_clk
    as per the latest frequency plan.
    
    Fixes: 4433594bbe5d ("clk: qcom: gcc: Add global clock controller driver for SC8180x")
    Cc: stable@vger.kernel.org
    Signed-off-by: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
    Link: https://lore.kernel.org/r/20240812-gcc-sc8180x-fixes-v2-4-8b3eaa5fb856@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: qcom: gcc-sm8150: De-register gcc_cpuss_ahb_clk_src [+ + +]
Author: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
Date:   Mon Aug 12 10:43:05 2024 +0530

    clk: qcom: gcc-sm8150: De-register gcc_cpuss_ahb_clk_src
    
    commit bab0c7a0bc586e736b7cd2aac8e6391709a70ef2 upstream.
    
    The branch clocks of gcc_cpuss_ahb_clk_src are marked critical
    and hence these clocks vote on XO blocking the suspend.
    De-register these clocks and its source as there is no rate
    setting happening on them.
    
    Fixes: 4433594bbe5d ("clk: qcom: gcc: Add global clock controller driver for SC8180x")
    Cc: stable@vger.kernel.org
    Signed-off-by: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
    Link: https://lore.kernel.org/r/20240812-gcc-sc8180x-fixes-v2-5-8b3eaa5fb856@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: qcom: gcc-sm8250: Do not turn off PCIe GDSCs during gdsc_disable() [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Date:   Fri Jul 19 19:12:38 2024 +0530

    clk: qcom: gcc-sm8250: Do not turn off PCIe GDSCs during gdsc_disable()
    
    commit ade508b545c969c72cd68479f275a5dd640fd8b9 upstream.
    
    With PWRSTS_OFF_ON, PCIe GDSCs are turned off during gdsc_disable(). This
    can happen during scenarios such as system suspend and breaks the resume
    of PCIe controllers from suspend.
    
    So use PWRSTS_RET_ON to indicate the GDSC driver to not turn off the GDSCs
    during gdsc_disable() and allow the hardware to transition the GDSCs to
    retention when the parent domain enters low power state during system
    suspend.
    
    Cc: stable@vger.kernel.org # 5.7
    Fixes: 3e5770921a88 ("clk: qcom: gcc: Add global clock controller driver for SM8250")
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Link: https://lore.kernel.org/r/20240719134238.312191-1-manivannan.sadhasivam@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: rockchip: fix error for unknown clocks [+ + +]
Author: Sebastian Reichel <sebastian.reichel@collabora.com>
Date:   Mon Mar 25 20:33:36 2024 +0100

    clk: rockchip: fix error for unknown clocks
    
    commit 12fd64babaca4dc09d072f63eda76ba44119816a upstream.
    
    There is a clk == NULL check after the switch to check for
    unsupported clk types. Since clk is re-assigned in a loop,
    this check is useless right now for anything but the first
    round. Let's fix this up by assigning clk = NULL in the
    loop before the switch statement.
    
    Fixes: a245fecbb806 ("clk: rockchip: add basic infrastructure for clock branches")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    [added fixes + stable-cc]
    Link: https://lore.kernel.org/r/20240325193609.237182-6-sebastian.reichel@collabora.com
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: rockchip: Set parent rate for DCLK_VOP clock on RK3228 [+ + +]
Author: Jonas Karlman <jonas@kwiboo.se>
Date:   Sat Jun 15 17:03:53 2024 +0000

    clk: rockchip: Set parent rate for DCLK_VOP clock on RK3228
    
    [ Upstream commit 1d34b9757523c1ad547bd6d040381f62d74a3189 ]
    
    Similar to DCLK_LCDC on RK3328, the DCLK_VOP on RK3228 is typically
    parented by the hdmiphy clk and it is expected that the DCLK_VOP and
    hdmiphy clk rate are kept in sync.
    
    Use CLK_SET_RATE_PARENT and CLK_SET_RATE_NO_REPARENT flags, same as used
    on RK3328, to make full use of all possible supported display modes.
    
    Fixes: 0a9d4ac08ebc ("clk: rockchip: set the clock ids for RK3228 VOP")
    Fixes: 307a2e9ac524 ("clk: rockchip: add clock controller for rk3228")
    Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
    Link: https://lore.kernel.org/r/20240615170417.3134517-3-jonas@kwiboo.se
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: ti: dra7-atl: Fix leak of of_nodes [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Mon Aug 26 10:35:29 2024 -0500

    clk: ti: dra7-atl: Fix leak of of_nodes
    
    [ Upstream commit 9d6e9f10e2e031fb7bfb3030a7d1afc561a28fea ]
    
    This fix leaking the of_node references in of_dra7_atl_clk_probe().
    
    The docs for of_parse_phandle_with_args() say that the caller must call
    of_node_put() on the returned node. This adds the missing of_node_put()
    to fix the leak.
    
    Fixes: 9ac33b0ce81f ("CLK: TI: Driver for DRA7 ATL (Audio Tracking Logic)")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20240826-clk-fix-leak-v1-1-f55418a13aa6@baylibre.com
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clocksource/drivers/qcom: Add missing iounmap() on errors in msm_dt_timer_init() [+ + +]
Author: Ankit Agrawal <agrawal.ag.ankit@gmail.com>
Date:   Sat Jul 13 15:27:13 2024 +0530

    clocksource/drivers/qcom: Add missing iounmap() on errors in msm_dt_timer_init()
    
    [ Upstream commit ca140a0dc0a18acd4653b56db211fec9b2339986 ]
    
    Add the missing iounmap() when clock frequency fails to get read by the
    of_property_read_u32() call, or if the call to msm_timer_init() fails.
    
    Fixes: 6e3321631ac2 ("ARM: msm: Add DT support to msm_timer")
    Signed-off-by: Ankit Agrawal <agrawal.ag.ankit@gmail.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Link: https://lore.kernel.org/r/20240713095713.GA430091@bnew-VirtualBox
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
close_range(): fix the logics in descriptor table trimming [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Fri Aug 16 15:17:00 2024 -0400

    close_range(): fix the logics in descriptor table trimming
    
    commit 678379e1d4f7443b170939525d3312cfc37bf86b upstream.
    
    Cloning a descriptor table picks the size that would cover all currently
    opened files.  That's fine for clone() and unshare(), but for close_range()
    there's an additional twist - we clone before we close, and it would be
    a shame to have
            close_range(3, ~0U, CLOSE_RANGE_UNSHARE)
    leave us with a huge descriptor table when we are not going to keep
    anything past stderr, just because some large file descriptor used to
    be open before our call has taken it out.
    
    Unfortunately, it had been dealt with in an inherently racy way -
    sane_fdtable_size() gets a "don't copy anything past that" argument
    (passed via unshare_fd() and dup_fd()), close_range() decides how much
    should be trimmed and passes that to unshare_fd().
    
    The problem is, a range that used to extend to the end of descriptor
    table back when close_range() had looked at it might very well have stuff
    grown after it by the time dup_fd() has allocated a new files_struct
    and started to figure out the capacity of fdtable to be attached to that.
    
    That leads to interesting pathological cases; at the very least it's a
    QoI issue, since unshare(CLONE_FILES) is atomic in a sense that it takes
    a snapshot of descriptor table one might have observed at some point.
    Since CLOSE_RANGE_UNSHARE close_range() is supposed to be a combination
    of unshare(CLONE_FILES) with plain close_range(), ending up with a
    weird state that would never occur with unshare(2) is confusing, to put
    it mildly.
    
    It's not hard to get rid of - all it takes is passing both ends of the
    range down to sane_fdtable_size().  There we are under ->files_lock,
    so the race is trivially avoided.
    
    So we do the following:
            * switch close_files() from calling unshare_fd() to calling
    dup_fd().
            * undo the calling convention change done to unshare_fd() in
    60997c3d45d9 "close_range: add CLOSE_RANGE_UNSHARE"
            * introduce struct fd_range, pass a pointer to that to dup_fd()
    and sane_fdtable_size() instead of "trim everything past that point"
    they are currently getting.  NULL means "we are not going to be punching
    any holes"; NR_OPEN_MAX is gone.
            * make sane_fdtable_size() use find_last_bit() instead of
    open-coding it; it's easier to follow that way.
            * while we are at it, have dup_fd() report errors by returning
    ERR_PTR(), no need to use a separate int *errorp argument.
    
    Fixes: 60997c3d45d9 "close_range: add CLOSE_RANGE_UNSHARE"
    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
comedi: ni_routing: tools: Check when the file could not be opened [+ + +]
Author: Ruffalo Lavoisier <ruffalolavoisier@gmail.com>
Date:   Sat Sep 7 05:30:25 2024 +0900

    comedi: ni_routing: tools: Check when the file could not be opened
    
    [ Upstream commit 5baeb157b341b1d26a5815aeaa4d3bb9e0444fda ]
    
    - After fopen check NULL before using the file pointer use
    
    Signed-off-by: Ruffalo Lavoisier <RuffaloLavoisier@gmail.com>
    Link: https://lore.kernel.org/r/20240906203025.89588-1-RuffaloLavoisier@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
coresight: tmc: sg: Do not leak sg_table [+ + +]
Author: Suzuki K Poulose <suzuki.poulose@arm.com>
Date:   Tue Jul 2 14:28:46 2024 +0100

    coresight: tmc: sg: Do not leak sg_table
    
    [ Upstream commit c58dc5a1f886f2fcc1133746d0cbaa1fe7fd44ff ]
    
    Running perf with cs_etm on Juno triggers the following kmemleak warning !
    
    :~# cat /sys/kernel/debug/kmemleak
     unreferenced object 0xffffff8806b6d720 (size 96):
     comm "perf", pid 562, jiffies 4297810960
     hex dump (first 32 bytes):
     38 d8 13 07 88 ff ff ff 00 d0 9e 85 c0 ff ff ff  8...............
     00 10 00 88 c0 ff ff ff 00 f0 ff f7 ff 00 00 00  ................
     backtrace (crc 1dbf6e00):
     [<ffffffc08107381c>] kmemleak_alloc+0xbc/0xd8
     [<ffffffc0802f9798>] kmalloc_trace_noprof+0x220/0x2e8
     [<ffffffc07bb71948>] tmc_alloc_sg_table+0x48/0x208 [coresight_tmc]
     [<ffffffc07bb71cbc>] tmc_etr_alloc_sg_buf+0xac/0x240 [coresight_tmc]
     [<ffffffc07bb72538>] tmc_alloc_etr_buf.constprop.0+0x1f0/0x260 [coresight_tmc]
     [<ffffffc07bb7280c>] alloc_etr_buf.constprop.0.isra.0+0x74/0xa8 [coresight_tmc]
     [<ffffffc07bb72950>] tmc_alloc_etr_buffer+0x110/0x260 [coresight_tmc]
     [<ffffffc07bb38afc>] etm_setup_aux+0x204/0x3b0 [coresight]
     [<ffffffc08025837c>] rb_alloc_aux+0x20c/0x318
     [<ffffffc08024dd84>] perf_mmap+0x2e4/0x7a0
     [<ffffffc0802cceb0>] mmap_region+0x3b0/0xa08
     [<ffffffc0802cd8a8>] do_mmap+0x3a0/0x500
     [<ffffffc080295328>] vm_mmap_pgoff+0x100/0x1d0
     [<ffffffc0802cadf8>] ksys_mmap_pgoff+0xb8/0x110
     [<ffffffc080020688>] __arm64_sys_mmap+0x38/0x58
     [<ffffffc080028fc0>] invoke_syscall.constprop.0+0x58/0x100
    
    This due to the fact that we do not free the "sg_table" itself while
    freeing up  the SG table and data pages. Fix this by freeing the sg_table
    in tmc_free_sg_table().
    
    Fixes: 99443ea19e8b ("coresight: Add generic TMC sg table framework")
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: James Clark <james.clark@arm.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20240702132846.1677261-1-suzuki.poulose@arm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpufreq: ti-cpufreq: Introduce quirks to handle syscon fails appropriately [+ + +]
Author: Nishanth Menon <nm@ti.com>
Date:   Wed Aug 28 08:19:15 2024 -0500

    cpufreq: ti-cpufreq: Introduce quirks to handle syscon fails appropriately
    
    [ Upstream commit abc00ffda43bd4ba85896713464c7510c39f8165 ]
    
    Commit b4bc9f9e27ed ("cpufreq: ti-cpufreq: add support for omap34xx
    and omap36xx") introduced special handling for OMAP3 class devices
    where syscon node may not be present. However, this also creates a bug
    where the syscon node is present, however the offset used to read
    is beyond the syscon defined range.
    
    Fix this by providing a quirk option that is populated when such
    special handling is required. This allows proper failure for all other
    platforms when the syscon node and efuse offsets are mismatched.
    
    Fixes: b4bc9f9e27ed ("cpufreq: ti-cpufreq: add support for omap34xx and omap36xx")
    Signed-off-by: Nishanth Menon <nm@ti.com>
    Tested-by: Dhruva Gole <d-gole@ti.com>
    Reviewed-by: Kevin Hilman <khilman@baylibre.com>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: ccp - Properly unregister /dev/sev on sev PLATFORM_STATUS failure [+ + +]
Author: Pavan Kumar Paluri <papaluri@amd.com>
Date:   Thu Aug 15 07:25:00 2024 -0500

    crypto: ccp - Properly unregister /dev/sev on sev PLATFORM_STATUS failure
    
    commit ce3d2d6b150ba8528f3218ebf0cee2c2c572662d upstream.
    
    In case of sev PLATFORM_STATUS failure, sev_get_api_version() fails
    resulting in sev_data field of psp_master nulled out. This later becomes
    a problem when unloading the ccp module because the device has not been
    unregistered (via misc_deregister()) before clearing the sev_data field
    of psp_master. As a result, on reloading the ccp module, a duplicate
    device issue is encountered as can be seen from the dmesg log below.
    
    on reloading ccp module via modprobe ccp
    
    Call Trace:
      <TASK>
      dump_stack_lvl+0xd7/0xf0
      dump_stack+0x10/0x20
      sysfs_warn_dup+0x5c/0x70
      sysfs_create_dir_ns+0xbc/0xd
      kobject_add_internal+0xb1/0x2f0
      kobject_add+0x7a/0xe0
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? get_device_parent+0xd4/0x1e0
      ? __pfx_klist_children_get+0x10/0x10
      device_add+0x121/0x870
      ? srso_alias_return_thunk+0x5/0xfbef5
      device_create_groups_vargs+0xdc/0x100
      device_create_with_groups+0x3f/0x60
      misc_register+0x13b/0x1c0
      sev_dev_init+0x1d4/0x290 [ccp]
      psp_dev_init+0x136/0x300 [ccp]
      sp_init+0x6f/0x80 [ccp]
      sp_pci_probe+0x2a6/0x310 [ccp]
      ? srso_alias_return_thunk+0x5/0xfbef5
      local_pci_probe+0x4b/0xb0
      work_for_cpu_fn+0x1a/0x30
      process_one_work+0x203/0x600
      worker_thread+0x19e/0x350
      ? __pfx_worker_thread+0x10/0x10
      kthread+0xeb/0x120
      ? __pfx_kthread+0x10/0x10
      ret_from_fork+0x3c/0x60
      ? __pfx_kthread+0x10/0x10
      ret_from_fork_asm+0x1a/0x30
      </TASK>
      kobject: kobject_add_internal failed for sev with -EEXIST, don't try to register things with the same name in the same directory.
      ccp 0000:22:00.1: sev initialization failed
      ccp 0000:22:00.1: psp initialization failed
      ccp 0000:a2:00.1: no command queues available
      ccp 0000:a2:00.1: psp enabled
    
    Address this issue by unregistering the /dev/sev before clearing out
    sev_data in case of PLATFORM_STATUS failure.
    
    Fixes: 200664d5237f ("crypto: ccp: Add Secure Encrypted Virtualization (SEV) command support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Pavan Kumar Paluri <papaluri@amd.com>
    Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

crypto: xor - fix template benchmarking [+ + +]
Author: Helge Deller <deller@kernel.org>
Date:   Mon Jul 8 14:24:52 2024 +0200

    crypto: xor - fix template benchmarking
    
    [ Upstream commit ab9a244c396aae4aaa34b2399b82fc15ec2df8c1 ]
    
    Commit c055e3eae0f1 ("crypto: xor - use ktime for template benchmarking")
    switched from using jiffies to ktime-based performance benchmarking.
    
    This works nicely on machines which have a fine-grained ktime()
    clocksource as e.g. x86 machines with TSC.
    But other machines, e.g. my 4-way HP PARISC server, don't have such
    fine-grained clocksources, which is why it seems that 800 xor loops
    take zero seconds, which then shows up in the logs as:
    
     xor: measuring software checksum speed
        8regs           : -1018167296 MB/sec
        8regs_prefetch  : -1018167296 MB/sec
        32regs          : -1018167296 MB/sec
        32regs_prefetch : -1018167296 MB/sec
    
    Fix this with some small modifications to the existing code to improve
    the algorithm to always produce correct results without introducing
    major delays for architectures with a fine-grained ktime()
    clocksource:
    a) Delay start of the timing until ktime() just advanced. On machines
    with a fast ktime() this should be just one additional ktime() call.
    b) Count the number of loops. Run at minimum 800 loops and finish
    earliest when the ktime() counter has progressed.
    
    With that the throughput can now be calculated more accurately under all
    conditions.
    
    Fixes: c055e3eae0f1 ("crypto: xor - use ktime for template benchmarking")
    Signed-off-by: Helge Deller <deller@gmx.de>
    Tested-by: John David Anglin <dave.anglin@bell.net>
    
    v2:
    - clean up coding style (noticed & suggested by Herbert Xu)
    - rephrased & fixed typo in commit message
    
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
debugobjects: Fix conditions in fill_pool() [+ + +]
Author: Zhen Lei <thunder.leizhen@huawei.com>
Date:   Wed Sep 4 21:39:40 2024 +0800

    debugobjects: Fix conditions in fill_pool()
    
    commit 684d28feb8546d1e9597aa363c3bfcf52fe250b7 upstream.
    
    fill_pool() uses 'obj_pool_min_free' to decide whether objects should be
    handed back to the kmem cache. But 'obj_pool_min_free' records the lowest
    historical value of the number of objects in the object pool and not the
    minimum number of objects which should be kept in the pool.
    
    Use 'debug_objects_pool_min_level' instead, which holds the minimum number
    which was scaled to the number of CPUs at boot time.
    
    [ tglx: Massage change log ]
    
    Fixes: d26bf5056fc0 ("debugobjects: Reduce number of pool_lock acquisitions in fill_pool()")
    Fixes: 36c4ead6f6df ("debugobjects: Add global free list and the counter")
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20240904133944.2124-3-thunder.leizhen@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
device property: Add fwnode_iomap() [+ + +]
Author: Anand Ashok Dumbre <anand.ashok.dumbre@xilinx.com>
Date:   Fri Dec 3 21:23:54 2021 +0000

    device property: Add fwnode_iomap()
    
    [ Upstream commit eca6e2d4a4a4b824f055eeaaa24f1c2327fb91a2 ]
    
    This patch introduces a new helper routine - fwnode_iomap(), which
    allows to map the memory mapped IO for a given device node.
    
    This implementation does not cover the ACPI case and may be expanded
    in the future. The main purpose here is to be able to develop resource
    provider agnostic drivers.
    
    Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Anand Ashok Dumbre <anand.ashok.dumbre@xilinx.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://lore.kernel.org/r/20211203212358.31444-2-anand.ashok.dumbre@xilinx.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: 8d3cefaf6592 ("i2c: core: Lock address during client device instantiation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

device property: Add fwnode_irq_get_byname [+ + +]
Author: Akhil R <akhilrajeev@nvidia.com>
Date:   Fri Jan 28 17:14:25 2022 +0530

    device property: Add fwnode_irq_get_byname
    
    [ Upstream commit ca0acb511c21738b32386ce0f85c284b351d919e ]
    
    Add fwnode_irq_get_byname() to get an interrupt by name from either
    ACPI table or Device Tree, whichever is used for enumeration.
    
    In the ACPI case, this allow us to use 'interrupt-names' in
    _DSD which can be mapped to Interrupt() resource by index.
    The implementation is similar to 'interrupt-names' in the
    Device Tree.
    
    Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 8d3cefaf6592 ("i2c: core: Lock address during client device instantiation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dma-buf: heaps: Fix off-by-one in CMA heap fault handler [+ + +]
Author: T.J. Mercier <tjmercier@google.com>
Date:   Fri Aug 30 19:26:26 2024 +0000

    dma-buf: heaps: Fix off-by-one in CMA heap fault handler
    
    commit ea5ff5d351b520524019f7ff7f9ce418de2dad87 upstream.
    
    Until VM_DONTEXPAND was added in commit 1c1914d6e8c6 ("dma-buf: heaps:
    Don't track CMA dma-buf pages under RssFile") it was possible to obtain
    a mapping larger than the buffer size via mremap and bypass the overflow
    check in dma_buf_mmap_internal. When using such a mapping to attempt to
    fault past the end of the buffer, the CMA heap fault handler also checks
    the fault offset against the buffer size, but gets the boundary wrong by
    1. Fix the boundary check so that we don't read off the end of the pages
    array and insert an arbitrary page in the mapping.
    
    Reported-by: Xingyu Jin <xingyuj@google.com>
    Fixes: a5d2d29e24be ("dma-buf: heaps: Move heap-helper logic into the cma_heap implementation")
    Cc: stable@vger.kernel.org # Applicable >= 5.10. Needs adjustments only for 5.10.
    Signed-off-by: T.J. Mercier <tjmercier@google.com>
    Acked-by: John Stultz <jstultz@google.com>
    Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240830192627.2546033-1-tjmercier@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drbd: Add NULL check for net_conf to prevent dereference in state validation [+ + +]
Author: Mikhail Lobanov <m.lobanov@rosalinux.ru>
Date:   Mon Sep 9 09:37:36 2024 -0400

    drbd: Add NULL check for net_conf to prevent dereference in state validation
    
    commit a5e61b50c9f44c5edb6e134ede6fee8806ffafa9 upstream.
    
    If the net_conf pointer is NULL and the code attempts to access its
    fields without a check, it will lead to a null pointer dereference.
    Add a NULL check before dereferencing the pointer.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 44ed167da748 ("drbd: rcu_read_lock() and rcu_dereference() for tconn->net_conf")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mikhail Lobanov <m.lobanov@rosalinux.ru>
    Link: https://lore.kernel.org/r/20240909133740.84297-1-m.lobanov@rosalinux.ru
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drbd: Fix atomicity violation in drbd_uuid_set_bm() [+ + +]
Author: Qiu-ji Chen <chenqiuji666@gmail.com>
Date:   Fri Sep 13 16:35:04 2024 +0800

    drbd: Fix atomicity violation in drbd_uuid_set_bm()
    
    commit 2f02b5af3a4482b216e6a466edecf6ba8450fa45 upstream.
    
    The violation of atomicity occurs when the drbd_uuid_set_bm function is
    executed simultaneously with modifying the value of
    device->ldev->md.uuid[UI_BITMAP]. Consider a scenario where, while
    device->ldev->md.uuid[UI_BITMAP] passes the validity check when its
    value is not zero, the value of device->ldev->md.uuid[UI_BITMAP] is
    written to zero. In this case, the check in drbd_uuid_set_bm might refer
    to the old value of device->ldev->md.uuid[UI_BITMAP] (before locking),
    which allows an invalid value to pass the validity check, resulting in
    inconsistency.
    
    To address this issue, it is recommended to include the data validity
    check within the locked section of the function. This modification
    ensures that the value of device->ldev->md.uuid[UI_BITMAP] does not
    change during the validation process, thereby maintaining its integrity.
    
    This possible bug is found by an experimental static analysis tool
    developed by our team. This tool analyzes the locking APIs to extract
    function pairs that can be concurrently executed, and then analyzes the
    instructions in the paired functions to identify possible concurrency
    bugs including data races and atomicity violations.
    
    Fixes: 9f2247bb9b75 ("drbd: Protect accesses to the uuid set with a spinlock")
    Cc: stable@vger.kernel.org
    Signed-off-by: Qiu-ji Chen <chenqiuji666@gmail.com>
    Reviewed-by: Philipp Reisner <philipp.reisner@linbit.com>
    Link: https://lore.kernel.org/r/20240913083504.10549-1-chenqiuji666@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
driver core: bus: Return -EIO instead of 0 when show/store invalid bus attribute [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Wed Jul 24 21:54:48 2024 +0800

    driver core: bus: Return -EIO instead of 0 when show/store invalid bus attribute
    
    [ Upstream commit c0fd973c108cdc22a384854bc4b3e288a9717bb2 ]
    
    Return -EIO instead of 0 for below erroneous bus attribute operations:
     - read a bus attribute without show().
     - write a bus attribute without store().
    
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20240724-bus_fix-v2-1-5adbafc698fb@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drivers: media: dvb-frontends/rtl2830: fix an out-of-bounds write error [+ + +]
Author: Junlin Li <make24@iscas.ac.cn>
Date:   Wed Jul 3 01:50:23 2024 +0800

    drivers: media: dvb-frontends/rtl2830: fix an out-of-bounds write error
    
    [ Upstream commit 46d7ebfe6a75a454a5fa28604f0ef1491f9d8d14 ]
    
    Ensure index in rtl2830_pid_filter does not exceed 31 to prevent
    out-of-bounds access.
    
    dev->filters is a 32-bit value, so set_bit and clear_bit functions should
    only operate on indices from 0 to 31. If index is 32, it will attempt to
    access a non-existent 33rd bit, leading to out-of-bounds access.
    Change the boundary check from index > 32 to index >= 32 to resolve this
    issue.
    
    Fixes: df70ddad81b4 ("[media] rtl2830: implement PID filter")
    Signed-off-by: Junlin Li <make24@iscas.ac.cn>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drivers: media: dvb-frontends/rtl2832: fix an out-of-bounds write error [+ + +]
Author: Junlin Li <make24@iscas.ac.cn>
Date:   Tue Jul 2 21:24:13 2024 +0800

    drivers: media: dvb-frontends/rtl2832: fix an out-of-bounds write error
    
    [ Upstream commit 8ae06f360cfaca2b88b98ca89144548b3186aab1 ]
    
    Ensure index in rtl2832_pid_filter does not exceed 31 to prevent
    out-of-bounds access.
    
    dev->filters is a 32-bit value, so set_bit and clear_bit functions should
    only operate on indices from 0 to 31. If index is 32, it will attempt to
    access a non-existent 33rd bit, leading to out-of-bounds access.
    Change the boundary check from index > 32 to index >= 32 to resolve this
    issue.
    
    Signed-off-by: Junlin Li <make24@iscas.ac.cn>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Fixes: 4b01e01a81b6 ("[media] rtl2832: implement PID filter")
    [hverkuil: added fixes tag, rtl2830_pid_filter -> rtl2832_pid_filter in logmsg]
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: drivers:drm:exynos_drm_gsc:Fix wrong assignment in gsc_bind() [+ + +]
Author: Yuesong Li <liyuesong@vivo.com>
Date:   Thu Aug 22 17:09:27 2024 +0800

    drivers:drm:exynos_drm_gsc:Fix wrong assignment in gsc_bind()
    
    [ Upstream commit 94ebc3d3235c5c516f67315059ce657e5090e94b ]
    
    cocci reported a double assignment problem. Upon reviewing previous
    commits, it appears this may actually be an incorrect assignment.
    
    Fixes: 8b9550344d39 ("drm/ipp: clean up debug messages")
    Signed-off-by: Yuesong Li <liyuesong@vivo.com>
    Signed-off-by: Inki Dae <inki.dae@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Add null check for set_output_gamma in dcn30_set_output_transfer_func [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Mon Jul 22 17:18:17 2024 +0530

    drm/amd/display: Add null check for set_output_gamma in dcn30_set_output_transfer_func
    
    [ Upstream commit 08ae395ea22fb3d9b318c8bde28c0dfd2f5fa4d2 ]
    
    This commit adds a null check for the set_output_gamma function pointer
    in the  dcn30_set_output_transfer_func function. Previously,
    set_output_gamma was being checked for nullity at line 386, but then it
    was being dereferenced without any nullity check at line 401. This
    could potentially lead to a null pointer dereference error if
    set_output_gamma is indeed null.
    
    To fix this, we now ensure that set_output_gamma is not null before
    dereferencing it. We do this by adding a nullity check for
    set_output_gamma before the call to set_output_gamma at line 401. If
    set_output_gamma is null, we log an error message and do not call the
    function.
    
    This fix prevents a potential null pointer dereference error.
    
    drivers/gpu/drm/amd/amdgpu/../display/dc/hwss/dcn30/dcn30_hwseq.c:401 dcn30_set_output_transfer_func()
    error: we previously assumed 'mpc->funcs->set_output_gamma' could be null (see line 386)
    
    drivers/gpu/drm/amd/amdgpu/../display/dc/hwss/dcn30/dcn30_hwseq.c
        373 bool dcn30_set_output_transfer_func(struct dc *dc,
        374                                 struct pipe_ctx *pipe_ctx,
        375                                 const struct dc_stream_state *stream)
        376 {
        377         int mpcc_id = pipe_ctx->plane_res.hubp->inst;
        378         struct mpc *mpc = pipe_ctx->stream_res.opp->ctx->dc->res_pool->mpc;
        379         const struct pwl_params *params = NULL;
        380         bool ret = false;
        381
        382         /* program OGAM or 3DLUT only for the top pipe*/
        383         if (pipe_ctx->top_pipe == NULL) {
        384                 /*program rmu shaper and 3dlut in MPC*/
        385                 ret = dcn30_set_mpc_shaper_3dlut(pipe_ctx, stream);
        386                 if (ret == false && mpc->funcs->set_output_gamma) {
                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ If this is NULL
    
        387                         if (stream->out_transfer_func.type == TF_TYPE_HWPWL)
        388                                 params = &stream->out_transfer_func.pwl;
        389                         else if (pipe_ctx->stream->out_transfer_func.type ==
        390                                         TF_TYPE_DISTRIBUTED_POINTS &&
        391                                         cm3_helper_translate_curve_to_hw_format(
        392                                         &stream->out_transfer_func,
        393                                         &mpc->blender_params, false))
        394                                 params = &mpc->blender_params;
        395                          /* there are no ROM LUTs in OUTGAM */
        396                         if (stream->out_transfer_func.type == TF_TYPE_PREDEFINED)
        397                                 BREAK_TO_DEBUGGER();
        398                 }
        399         }
        400
    --> 401         mpc->funcs->set_output_gamma(mpc, mpcc_id, params);
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Then it will crash
    
        402         return ret;
        403 }
    
    Fixes: d99f13878d6f ("drm/amd/display: Add DCN3 HWSEQ")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Cc: Tom Chung <chiahsuan.chung@amd.com>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Cc: Roman Li <roman.li@amd.com>
    Cc: Hersen Wu <hersenxs.wu@amd.com>
    Cc: Alex Hung <alex.hung@amd.com>
    Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Add null check for top_pipe_to_program in commit_planes_for_stream [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Thu Jul 25 07:23:48 2024 +0530

    drm/amd/display: Add null check for top_pipe_to_program in commit_planes_for_stream
    
    [ Upstream commit 66d71a72539e173a9b00ca0b1852cbaa5f5bf1ad ]
    
    This commit addresses a null pointer dereference issue in the
    `commit_planes_for_stream` function at line 4140. The issue could occur
    when `top_pipe_to_program` is null.
    
    The fix adds a check to ensure `top_pipe_to_program` is not null before
    accessing its stream_res. This prevents a null pointer dereference.
    
    Reported by smatch:
    drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc.c:4140 commit_planes_for_stream() error: we previously assumed 'top_pipe_to_program' could be null (see line 3906)
    
    Cc: Tom Chung <chiahsuan.chung@amd.com>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Cc: Roman Li <roman.li@amd.com>
    Cc: Alex Hung <alex.hung@amd.com>
    Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Allow backlight to go below `AMDGPU_DM_DEFAULT_MIN_BACKLIGHT` [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Sun Sep 15 14:28:37 2024 -0500

    drm/amd/display: Allow backlight to go below `AMDGPU_DM_DEFAULT_MIN_BACKLIGHT`
    
    [ Upstream commit 87d749a6aab73d8069d0345afaa98297816cb220 ]
    
    The issue with panel power savings compatibility below
    `AMDGPU_DM_DEFAULT_MIN_BACKLIGHT` happens at
    `AMDGPU_DM_DEFAULT_MIN_BACKLIGHT` as well.
    
    That issue will be fixed separately, so don't prevent the backlight
    brightness from going that low.
    
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Thomas Weißschuh <linux@weissschuh.net>
    Link: https://lore.kernel.org/amd-gfx/be04226a-a9e3-4a45-a83b-6d263c6557d8@t-8ch.de/T/#m400dee4e2fc61fe9470334d20a7c8c89c9aef44f
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Check null pointer before dereferencing se [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Thu Aug 29 17:30:26 2024 -0600

    drm/amd/display: Check null pointer before dereferencing se
    
    [ Upstream commit ff599ef6970ee000fa5bc38d02fa5ff5f3fc7575 ]
    
    [WHAT & HOW]
    se is null checked previously in the same function, indicating
    it might be null; therefore, it must be checked when used again.
    
    This fixes 1 FORWARD_NULL issue reported by Coverity.
    
    Acked-by: Alex Hung <alex.hung@amd.com>
    Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Check null pointers before using dc->clk_mgr [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Mon Jul 29 15:29:09 2024 -0600

    drm/amd/display: Check null pointers before using dc->clk_mgr
    
    [ Upstream commit 95d9e0803e51d5a24276b7643b244c7477daf463 ]
    
    [WHY & HOW]
    dc->clk_mgr is null checked previously in the same function, indicating
    it might be null.
    
    Passing "dc" to "dc->hwss.apply_idle_power_optimizations", which
    dereferences null "dc->clk_mgr". (The function pointer resolves to
    "dcn35_apply_idle_power_optimizations".)
    
    This fixes 1 FORWARD_NULL issue reported by Coverity.
    
    Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Check stream before comparing them [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Thu Jun 27 20:05:14 2024 -0600

    drm/amd/display: Check stream before comparing them
    
    [ Upstream commit 35ff747c86767937ee1e0ca987545b7eed7a0810 ]
    
    [WHAT & HOW]
    amdgpu_dm can pass a null stream to dc_is_stream_unchanged. It is
    necessary to check for null before dereferencing them.
    
    This fixes 1 FORWARD_NULL issue reported by Coverity.
    
    Reviewed-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
    Signed-off-by: Jerry Zuo <jerry.zuo@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Fix index out of bounds in DCN30 color transformation [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Sat Jul 20 18:05:20 2024 +0530

    drm/amd/display: Fix index out of bounds in DCN30 color transformation
    
    [ Upstream commit d81873f9e715b72d4f8d391c8eb243946f784dfc ]
    
    This commit addresses a potential index out of bounds issue in the
    `cm3_helper_translate_curve_to_hw_format` function in the DCN30 color
    management module. The issue could occur when the index 'i' exceeds the
    number of transfer function points (TRANSFER_FUNC_POINTS).
    
    The fix adds a check to ensure 'i' is within bounds before accessing the
    transfer function points. If 'i' is out of bounds, the function returns
    false to indicate an error.
    
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_cm_common.c:180 cm3_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.red' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_cm_common.c:181 cm3_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.green' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_cm_common.c:182 cm3_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.blue' 1025 <= s32max
    
    Cc: Tom Chung <chiahsuan.chung@amd.com>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Cc: Roman Li <roman.li@amd.com>
    Cc: Alex Hung <alex.hung@amd.com>
    Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Fix index out of bounds in DCN30 degamma hardware format translation [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Sat Jul 20 18:44:02 2024 +0530

    drm/amd/display: Fix index out of bounds in DCN30 degamma hardware format translation
    
    [ Upstream commit bc50b614d59990747dd5aeced9ec22f9258991ff ]
    
    This commit addresses a potential index out of bounds issue in the
    `cm3_helper_translate_curve_to_degamma_hw_format` function in the DCN30
    color  management module. The issue could occur when the index 'i'
    exceeds the  number of transfer function points (TRANSFER_FUNC_POINTS).
    
    The fix adds a check to ensure 'i' is within bounds before accessing the
    transfer function points. If 'i' is out of bounds, the function returns
    false to indicate an error.
    
    Reported by smatch:
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_cm_common.c:338 cm3_helper_translate_curve_to_degamma_hw_format() error: buffer overflow 'output_tf->tf_pts.red' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_cm_common.c:339 cm3_helper_translate_curve_to_degamma_hw_format() error: buffer overflow 'output_tf->tf_pts.green' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_cm_common.c:340 cm3_helper_translate_curve_to_degamma_hw_format() error: buffer overflow 'output_tf->tf_pts.blue' 1025 <= s32max
    
    Cc: Tom Chung <chiahsuan.chung@amd.com>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Cc: Roman Li <roman.li@amd.com>
    Cc: Alex Hung <alex.hung@amd.com>
    Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Fix index out of bounds in degamma hardware format translation [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Sat Jul 20 17:48:27 2024 +0530

    drm/amd/display: Fix index out of bounds in degamma hardware format translation
    
    [ Upstream commit b7e99058eb2e86aabd7a10761e76cae33d22b49f ]
    
    Fixes index out of bounds issue in
    `cm_helper_translate_curve_to_degamma_hw_format` function. The issue
    could occur when the index 'i' exceeds the number of transfer function
    points (TRANSFER_FUNC_POINTS).
    
    The fix adds a check to ensure 'i' is within bounds before accessing the
    transfer function points. If 'i' is out of bounds the function returns
    false to indicate an error.
    
    Reported by smatch:
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:594 cm_helper_translate_curve_to_degamma_hw_format() error: buffer overflow 'output_tf->tf_pts.red' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:595 cm_helper_translate_curve_to_degamma_hw_format() error: buffer overflow 'output_tf->tf_pts.green' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:596 cm_helper_translate_curve_to_degamma_hw_format() error: buffer overflow 'output_tf->tf_pts.blue' 1025 <= s32max
    
    Cc: Tom Chung <chiahsuan.chung@amd.com>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Cc: Roman Li <roman.li@amd.com>
    Cc: Alex Hung <alex.hung@amd.com>
    Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Hamza Mahfooz <hamza.mahfooz@amd.com>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Fix Synaptics Cascaded Panamera DSC Determination [+ + +]
Author: Fangzhi Zuo <Jerry.Zuo@amd.com>
Date:   Mon Aug 12 12:13:44 2024 -0400

    drm/amd/display: Fix Synaptics Cascaded Panamera DSC Determination
    
    commit 4437936c6b696b98f3fe1d8679a2788c41b4df77 upstream.
    
    Synaptics Cascaded Panamera topology needs to unconditionally
    acquire root aux for dsc decoding.
    
    Reviewed-by: Roman Li <roman.li@amd.com>
    Signed-off-by: Fangzhi Zuo <Jerry.Zuo@amd.com>
    Signed-off-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: Mario Limonciello <superm1@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Fix system hang while resume with TBT monitor [+ + +]
Author: Tom Chung <chiahsuan.chung@amd.com>
Date:   Fri Sep 13 15:44:40 2024 +0800

    drm/amd/display: Fix system hang while resume with TBT monitor
    
    commit 52d4e3fb3d340447dcdac0e14ff21a764f326907 upstream.
    
    [Why]
    Connected with a Thunderbolt monitor and do the suspend and the system
    may hang while resume.
    
    The TBT monitor HPD will be triggered during the resume procedure
    and call the drm_client_modeset_probe() while
    struct drm_connector connector->dev->master is NULL.
    
    It will mess up the pipe topology after resume.
    
    [How]
    Skip the TBT monitor HPD during the resume procedure because we
    currently will probe the connectors after resume by default.
    
    Reviewed-by: Wayne Lin <wayne.lin@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Fangzhi Zuo <jerry.zuo@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 453f86a26945207a16b8f66aaed5962dc2b95b85)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Initialize get_bytes_per_element's default to 1 [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Mon Jul 15 09:57:01 2024 -0600

    drm/amd/display: Initialize get_bytes_per_element's default to 1
    
    [ Upstream commit 4067f4fa0423a89fb19a30b57231b384d77d2610 ]
    
    Variables, used as denominators and maybe not assigned to other values,
    should not be 0. bytes_per_element_y & bytes_per_element_c are
    initialized by get_bytes_per_element() which should never return 0.
    
    This fixes 10 DIVIDE_BY_ZERO issues reported by Coverity.
    
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Reviewed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Rodrigo Siqueira <rodrigo.siqueira@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Round calculated vtotal [+ + +]
Author: Robin Chen <robin.chen@amd.com>
Date:   Fri Aug 23 15:00:28 2024 +0800

    drm/amd/display: Round calculated vtotal
    
    commit c03fca619fc687338a3b6511fdbed94096abdf79 upstream.
    
    [WHY]
    The calculated vtotal may has 1 line deviation. To get precisely
    vtotal number, round the vtotal result.
    
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Anthony Koo <anthony.koo@amd.com>
    Signed-off-by: Robin Chen <robin.chen@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Validate backlight caps are sane [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Sep 13 13:00:39 2024 -0500

    drm/amd/display: Validate backlight caps are sane
    
    commit 327e62f47eb57ae5ff63de82b0815557104e439a upstream.
    
    Currently amdgpu takes backlight caps provided by the ACPI tables
    on systems as is.  If the firmware sets maximums that are too low
    this means that users don't get a good experience.
    
    To avoid having to maintain a quirk list of such systems, do a sanity
    check on the values.  Check that the spread is at least half of the
    values that amdgpu would use if no ACPI table was found and if not
    use the amdgpu defaults.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3020
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm: ensure the fw_info is not null before using it [+ + +]
Author: Tim Huang <tim.huang@amd.com>
Date:   Wed Aug 7 17:15:12 2024 +0800

    drm/amd/pm: ensure the fw_info is not null before using it
    
    [ Upstream commit 186fb12e7a7b038c2710ceb2fb74068f1b5d55a4 ]
    
    This resolves the dereference null return value warning
    reported by Coverity.
    
    Signed-off-by: Tim Huang <tim.huang@amd.com>
    Reviewed-by: Jesse Zhang <jesse.zhang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu: add raven1 gfxoff quirk [+ + +]
Author: Peng Liu <liupeng01@kylinos.cn>
Date:   Fri Aug 30 15:25:54 2024 +0800

    drm/amdgpu: add raven1 gfxoff quirk
    
    [ Upstream commit 0126c0ae11e8b52ecfde9d1b174ee2f32d6c3a5d ]
    
    Fix screen corruption with openkylin.
    
    Link: https://bbs.openkylin.top/t/topic/171497
    Signed-off-by: Peng Liu <liupeng01@kylinos.cn>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: enable gfxoff quirk on HP 705G4 [+ + +]
Author: Peng Liu <liupeng01@kylinos.cn>
Date:   Fri Aug 30 15:27:08 2024 +0800

    drm/amdgpu: enable gfxoff quirk on HP 705G4
    
    [ Upstream commit 2c7795e245d993bcba2f716a8c93a5891ef910c9 ]
    
    Enabling gfxoff quirk results in perfectly usable
    graphical user interface on HP 705G4 DM with R5 2400G.
    
    Without the quirk, X server is completely unusable as
    every few seconds there is gpu reset due to ring gfx timeout.
    
    Signed-off-by: Peng Liu <liupeng01@kylinos.cn>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: properly handle vbios fake edid sizing [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Tue Jul 23 13:23:56 2024 -0400

    drm/amdgpu: properly handle vbios fake edid sizing
    
    [ Upstream commit 8155566a26b8d6c1dd914f06a0c652e4e2f2adf1 ]
    
    The comment in the vbios structure says:
    // = 128 means EDID length is 128 bytes, otherwise the EDID length = ucFakeEDIDLength*128
    
    This fake edid struct has not been used in a long time, so I'm
    not sure if there were actually any boards out there with a non-128 byte
    EDID, but align the code with the comment.
    
    Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
    Reported-by: Thomas Weißschuh <linux@weissschuh.net>
    Link: https://lists.freedesktop.org/archives/amd-gfx/2024-June/109964.html
    Fixes: d38ceaf99ed0 ("drm/amdgpu: add core driver (v4)")
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: Replace one-element array with flexible-array member [+ + +]
Author: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com>
Date:   Sat Oct 29 14:30:44 2022 +1300

    drm/amdgpu: Replace one-element array with flexible-array member
    
    [ Upstream commit 320e2590e281d0a7865e861f50155b5b435e9813 ]
    
    One-element arrays are deprecated, and we are replacing them with
    flexible array members instead. So, replace one-element array with
    flexible-array member in struct _ATOM_FAKE_EDID_PATCH_RECORD and
    refactor the rest of the code accordingly.
    
    Important to mention is that doing a build before/after this patch
    results in no binary output differences.
    
    This helps with the ongoing efforts to tighten the FORTIFY_SOURCE
    routines on memcpy() and help us make progress towards globally
    enabling -fstrict-flex-arrays=3 [1].
    
    Link: https://github.com/KSPP/linux/issues/79
    Link: https://github.com/KSPP/linux/issues/238
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836 [1]
    
    Signed-off-by: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Stable-dep-of: 8155566a26b8 ("drm/amdgpu: properly handle vbios fake edid sizing")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/bridge: lontium-lt8912b: Validate mode in drm_bridge_funcs::mode_valid() [+ + +]
Author: Liu Ying <victor.liu@nxp.com>
Date:   Tue Aug 13 17:16:37 2024 +0800

    drm/bridge: lontium-lt8912b: Validate mode in drm_bridge_funcs::mode_valid()
    
    [ Upstream commit fe828fbd87786238b30f44cafd698d975d956c97 ]
    
    If the bridge is attached with the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag set,
    this driver won't initialize a connector and hence display mode won't be
    validated in drm_connector_helper_funcs::mode_valid().  So, move the mode
    validation from drm_connector_helper_funcs::mode_valid() to
    drm_bridge_funcs::mode_valid(), because the mode validation is always done
    for the bridge.
    
    Fixes: 30e2ae943c26 ("drm/bridge: Introduce LT8912B DSI to HDMI bridge")
    Signed-off-by: Liu Ying <victor.liu@nxp.com>
    Reviewed-by: Robert Foss <rfoss@kernel.org>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240813091637.1054586-1-victor.liu@nxp.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/crtc: fix uninitialized variable use even harder [+ + +]
Author: Rob Clark <robdclark@chromium.org>
Date:   Mon Feb 12 13:55:34 2024 -0800

    drm/crtc: fix uninitialized variable use even harder
    
    [ Upstream commit b6802b61a9d0e99dcfa6fff7c50db7c48a9623d3 ]
    
    DRM_MODESET_LOCK_ALL_BEGIN() has a hidden trap-door (aka retry loop),
    which means we can't rely too much on variable initializers.
    
    Fixes: 6e455f5dcdd1 ("drm/crtc: fix uninitialized variable use")
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Tested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> # sc7180, sdm845
    Link: https://patchwork.freedesktop.org/patch/msgid/20240212215534.190682-1-robdclark@gmail.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/mediatek: Use spin_lock_irqsave() for CRTC event lock [+ + +]
Author: Fei Shao <fshao@chromium.org>
Date:   Wed Aug 28 18:14:47 2024 +0800

    drm/mediatek: Use spin_lock_irqsave() for CRTC event lock
    
    [ Upstream commit be03b30b7aa99aca876fbc7c1c1b73b2d0339321 ]
    
    Use the state-aware spin_lock_irqsave() and spin_unlock_irqrestore()
    to avoid unconditionally re-enabling the local interrupts.
    
    Fixes: 411f5c1eacfe ("drm/mediatek: handle events when enabling/disabling crtc")
    Signed-off-by: Fei Shao <fshao@chromium.org>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20240828101511.3269822-1-fshao@chromium.org/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/a5xx: disable preemption in submits by default [+ + +]
Author: Vladimir Lypak <vladimir.lypak@gmail.com>
Date:   Sun Sep 1 13:54:00 2024 +0000

    drm/msm/a5xx: disable preemption in submits by default
    
    [ Upstream commit db9dec2db76146d65e1cfbb6afb2e2bd5dab67f8 ]
    
    Fine grain preemption (switching from/to points within submits)
    requires extra handling in command stream of those submits, especially
    when rendering with tiling (using GMEM). However this handling is
    missing at this point in mesa (and always was). For this reason we get
    random GPU faults and hangs if more than one priority level is used
    because local preemption is enabled prior to executing command stream
    from submit.
    With that said it was ahead of time to enable local preemption by
    default considering the fact that even on downstream kernel it is only
    enabled if requested via UAPI.
    
    Fixes: a7a4c19c36de ("drm/msm/a5xx: fix setting of the CP_PREEMPT_ENABLE_LOCAL register")
    Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com>
    Patchwork: https://patchwork.freedesktop.org/patch/612041/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/a5xx: fix races in preemption evaluation stage [+ + +]
Author: Vladimir Lypak <vladimir.lypak@gmail.com>
Date:   Sun Sep 1 13:54:02 2024 +0000

    drm/msm/a5xx: fix races in preemption evaluation stage
    
    [ Upstream commit ce050f307ad93bcc5958d0dd35fc276fd394d274 ]
    
    On A5XX GPUs when preemption is used it's invietable to enter a soft
    lock-up state in which GPU is stuck at empty ring-buffer doing nothing.
    This appears as full UI lockup and not detected as GPU hang (because
    it's not). This happens due to not triggering preemption when it was
    needed. Sometimes this state can be recovered by some new submit but
    generally it won't happen because applications are waiting for old
    submits to retire.
    
    One of the reasons why this happens is a race between a5xx_submit and
    a5xx_preempt_trigger called from IRQ during submit retire. Former thread
    updates ring->cur of previously empty and not current ring right after
    latter checks it for emptiness. Then both threads can just exit because
    for first one preempt_state wasn't NONE yet and for second one all rings
    appeared to be empty.
    
    To prevent such situations from happening we need to establish guarantee
    for preempt_trigger to make decision after each submit or retire. To
    implement this we serialize preemption initiation using spinlock. If
    switch is already in progress we need to re-trigger preemption when it
    finishes.
    
    Fixes: b1fc2839d2f9 ("drm/msm: Implement preemption for A5XX targets")
    Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com>
    Patchwork: https://patchwork.freedesktop.org/patch/612045/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/a5xx: properly clear preemption records on resume [+ + +]
Author: Vladimir Lypak <vladimir.lypak@gmail.com>
Date:   Sun Sep 1 13:54:01 2024 +0000

    drm/msm/a5xx: properly clear preemption records on resume
    
    [ Upstream commit 64fd6d01a52904bdbda0ce810a45a428c995a4ca ]
    
    Two fields of preempt_record which are used by CP aren't reset on
    resume: "data" and "info". This is the reason behind faults which happen
    when we try to switch to the ring that was active last before suspend.
    In addition those faults can't be recovered from because we use suspend
    and resume to do so (keeping values of those fields again).
    
    Fixes: b1fc2839d2f9 ("drm/msm: Implement preemption for A5XX targets")
    Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/612043/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/a5xx: workaround early ring-buffer emptiness check [+ + +]
Author: Vladimir Lypak <vladimir.lypak@gmail.com>
Date:   Sun Sep 1 13:54:03 2024 +0000

    drm/msm/a5xx: workaround early ring-buffer emptiness check
    
    [ Upstream commit a30f9f65b5ac82d4390548c32ed9c7f05de7ddf5 ]
    
    There is another cause for soft lock-up of GPU in empty ring-buffer:
    race between GPU executing last commands and CPU checking ring for
    emptiness. On GPU side IRQ for retire is triggered by CACHE_FLUSH_TS
    event and RPTR shadow (which is used to check ring emptiness) is updated
    a bit later from CP_CONTEXT_SWITCH_YIELD. Thus if GPU is executing its
    last commands slow enough or we check that ring too fast we will miss a
    chance to trigger switch to lower priority ring because current ring isn't
    empty just yet. This can escalate to lock-up situation described in
    previous patch.
    To work-around this issue we keep track of last submit sequence number
    for each ring and compare it with one written to memptrs from GPU during
    execution of CACHE_FLUSH_TS event.
    
    Fixes: b1fc2839d2f9 ("drm/msm: Implement preemption for A5XX targets")
    Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com>
    Patchwork: https://patchwork.freedesktop.org/patch/612047/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/adreno: Fix error return if missing firmware-name [+ + +]
Author: Rob Clark <robdclark@chromium.org>
Date:   Tue Jul 16 09:06:30 2024 -0700

    drm/msm/adreno: Fix error return if missing firmware-name
    
    [ Upstream commit 624ab9cde26a9f150b4fd268b0f3dae3184dc40c ]
    
    -ENODEV is used to signify that there is no zap shader for the platform,
    and the CPU can directly take the GPU out of secure mode.  We want to
    use this return code when there is no zap-shader node.  But not when
    there is, but without a firmware-name property.  This case we want to
    treat as-if the needed fw is not found.
    
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/604564/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm: Drop priv->lastctx [+ + +]
Author: Rob Clark <robdclark@chromium.org>
Date:   Tue Nov 9 10:11:02 2021 -0800

    drm/msm: Drop priv->lastctx
    
    [ Upstream commit 1d054c9b8457b56a651109fac21f56f46ccd46b2 ]
    
    cur_ctx_seqno already does the same thing, but handles the edge cases
    where a refcnt'd context can live after lastclose.  So let's not have
    two ways to do the same thing.
    
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Reviewed-by: Akhil P Oommen <akhilpo@codeaurora.org>
    Link: https://lore.kernel.org/r/20211109181117.591148-3-robdclark@gmail.com
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Stable-dep-of: a30f9f65b5ac ("drm/msm/a5xx: workaround early ring-buffer emptiness check")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm: fix %s null argument error [+ + +]
Author: Sherry Yang <sherry.yang@oracle.com>
Date:   Tue Aug 27 09:53:37 2024 -0700

    drm/msm: fix %s null argument error
    
    [ Upstream commit 25b85075150fe8adddb096db8a4b950353045ee1 ]
    
    The following build error was triggered because of NULL string argument:
    
    BUILDSTDERR: drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c: In function 'mdp5_smp_dump':
    BUILDSTDERR: drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c:352:51: error: '%s' directive argument is null [-Werror=format-overflow=]
    BUILDSTDERR:   352 |                         drm_printf(p, "%s:%d\t%d\t%s\n",
    BUILDSTDERR:       |                                                   ^~
    BUILDSTDERR: drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c:352:51: error: '%s' directive argument is null [-Werror=format-overflow=]
    
    This happens from the commit a61ddb4393ad ("drm: enable (most) W=1
    warnings by default across the subsystem"). Using "(null)" instead
    to fix it.
    
    Fixes: bc5289eed481 ("drm/msm/mdp5: add debugfs to show smp block status")
    Signed-off-by: Sherry Yang <sherry.yang@oracle.com>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/611071/
    Link: https://lore.kernel.org/r/20240827165337.1075904-1-sherry.yang@oracle.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm: Fix incorrect file name output in adreno_request_fw() [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Fri Jul 5 12:13:12 2024 +0300

    drm/msm: Fix incorrect file name output in adreno_request_fw()
    
    [ Upstream commit e19366911340c2313a1abbb09c54eaf9bdea4f58 ]
    
    In adreno_request_fw() when debugging information is printed to the log
    after firmware load, an incorrect filename is printed. 'newname' is used
    instead of 'fwname', so prefix "qcom/" is being added to filename.
    Looks like "copy-paste" mistake.
    
    Fix this mistake by replacing 'newname' with 'fwname'.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 2c41ef1b6f7d ("drm/msm/adreno: deal with linux-firmware fw paths")
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Patchwork: https://patchwork.freedesktop.org/patch/602382/
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/printer: Allow NULL data in devcoredump printer [+ + +]
Author: Matthew Brost <matthew.brost@intel.com>
Date:   Thu Aug 1 08:41:17 2024 -0700

    drm/printer: Allow NULL data in devcoredump printer
    
    [ Upstream commit 53369581dc0c68a5700ed51e1660f44c4b2bb524 ]
    
    We want to determine the size of the devcoredump before writing it out.
    To that end, we will run the devcoredump printer with NULL data to get
    the size, alloc data based on the generated offset, then run the
    devcorecump again with a valid data pointer to print.  This necessitates
    not writing data to the data pointer on the initial pass, when it is
    NULL.
    
    v5:
     - Better commit message (Jonathan)
     - Add kerenl doc with examples (Jani)
    
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Signed-off-by: Matthew Brost <matthew.brost@intel.com>
    Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240801154118.2547543-3-matthew.brost@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon/evergreen_cs: fix int overflow errors in cs track offsets [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Tue Aug 6 10:19:04 2024 -0700

    drm/radeon/evergreen_cs: fix int overflow errors in cs track offsets
    
    [ Upstream commit 3fbaf475a5b8361ebee7da18964db809e37518b7 ]
    
    Several cs track offsets (such as 'track->db_s_read_offset')
    either are initialized with or plainly take big enough values that,
    once shifted 8 bits left, may be hit with integer overflow if the
    resulting values end up going over u32 limit.
    
    Same goes for a few instances of 'surf.layer_size * mslice'
    multiplications that are added to 'offset' variable - they may
    potentially overflow as well and need to be validated properly.
    
    While some debug prints in this code section take possible overflow
    issues into account, simply casting to (unsigned long) may be
    erroneous in its own way, as depending on CPU architecture one is
    liable to get different results.
    
    Fix said problems by:
     - casting 'offset' to fixed u64 data type instead of
     ambiguous unsigned long.
     - casting one of the operands in vulnerable to integer
     overflow cases to u64.
     - adjust format specifiers in debug prints to properly
     represent 'offset' values.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: 285484e2d55e ("drm/radeon: add support for evergreen/ni tiling informations v11")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon/r100: Handle unknown family in r100_cp_init_microcode() [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Tue Jul 30 17:58:12 2024 +0200

    drm/radeon/r100: Handle unknown family in r100_cp_init_microcode()
    
    [ Upstream commit c6dbab46324b1742b50dc2fb5c1fee2c28129439 ]
    
    With -Werror:
    
        In function ‘r100_cp_init_microcode’,
            inlined from ‘r100_cp_init’ at drivers/gpu/drm/radeon/r100.c:1136:7:
        include/linux/printk.h:465:44: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
          465 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
              |                                            ^
        include/linux/printk.h:437:17: note: in definition of macro ‘printk_index_wrap’
          437 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
              |                 ^~~~~~~
        include/linux/printk.h:508:9: note: in expansion of macro ‘printk’
          508 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
              |         ^~~~~~
        drivers/gpu/drm/radeon/r100.c:1062:17: note: in expansion of macro ‘pr_err’
         1062 |                 pr_err("radeon_cp: Failed to load firmware \"%s\"\n", fw_name);
              |                 ^~~~~~
    
    Fix this by converting the if/else if/... construct into a proper
    switch() statement with a default to handle the error case.
    
    As a bonus, the generated code is ca. 100 bytes smaller (with gcc 11.4.0
    targeting arm32).
    
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon: properly handle vbios fake edid sizing [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Tue Jul 23 13:31:58 2024 -0400

    drm/radeon: properly handle vbios fake edid sizing
    
    [ Upstream commit 17c6baff3d5f65c8da164137a58742541a060b2f ]
    
    The comment in the vbios structure says:
    // = 128 means EDID length is 128 bytes, otherwise the EDID length = ucFakeEDIDLength*128
    
    This fake edid struct has not been used in a long time, so I'm
    not sure if there were actually any boards out there with a non-128 byte
    EDID, but align the code with the comment.
    
    Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
    Reported-by: Thomas Weißschuh <linux@weissschuh.net>
    Link: https://lists.freedesktop.org/archives/amd-gfx/2024-June/109964.html
    Fixes: c324acd5032f ("drm/radeon/kms: parse the extended LCD info block")
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/radeon: Replace one-element array with flexible-array member [+ + +]
Author: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com>
Date:   Sat Oct 29 16:32:05 2022 +1300

    drm/radeon: Replace one-element array with flexible-array member
    
    [ Upstream commit c81c5bd5cf2f428867e0bcfcccd4e4d2f8c68f51 ]
    
    One-element arrays are deprecated, and we are replacing them with
    flexible array members instead. So, replace one-element array with
    flexible-array member in struct _ATOM_FAKE_EDID_PATCH_RECORD and
    refactor the rest of the code accordingly.
    
    It's worth mentioning that doing a build before/after this patch results
    in no binary output differences.
    
    This helps with the ongoing efforts to tighten the FORTIFY_SOURCE
    routines on memcpy() and help us make progress towards globally
    enabling -fstrict-flex-arrays=3 [1].
    
    Link: https://github.com/KSPP/linux/issues/79
    Link: https://github.com/KSPP/linux/issues/239
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836 [1]
    
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Stable-dep-of: 17c6baff3d5f ("drm/radeon: properly handle vbios fake edid sizing")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/rockchip: define gamma registers for RK3399 [+ + +]
Author: Hugh Cole-Baker <sigmaris@gmail.com>
Date:   Tue Oct 19 22:58:41 2021 +0100

    drm/rockchip: define gamma registers for RK3399
    
    [ Upstream commit 3ba000d6ae999b99f29afd64814877a5c4406786 ]
    
    The VOP on RK3399 has a different approach from previous versions for
    setting a gamma lookup table, using an update_gamma_lut register. As
    this differs from RK3288, give RK3399 its own set of "common" register
    definitions.
    
    Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
    Tested-by: "Milan P. Stanić" <mps@arvanta.net>
    Tested-by: Linus Heckemann <git@sphalerite.org>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211019215843.42718-2-sigmaris@gmail.com
    Stable-dep-of: 6b44aa559d6c ("drm/rockchip: vop: clear DMA stop bit on RK3066")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/rockchip: dw_hdmi: Fix reading EDID when using a forced mode [+ + +]
Author: Jonas Karlman <jonas@kwiboo.se>
Date:   Sat Jun 15 17:03:55 2024 +0000

    drm/rockchip: dw_hdmi: Fix reading EDID when using a forced mode
    
    [ Upstream commit a5d024541ec466f428e6c514577d511a40779c7b ]
    
    EDID cannot be read on RK3328 until after read_hpd has been called and
    correct io voltage has been configured based on connection status.
    
    When a forced mode is used, e.g. video=1920x1080@60e, the connector
    detect ops, that in turn normally calls the read_hpd, never gets called.
    
    This result in reading EDID to fail in connector get_modes ops.
    
    Call dw_hdmi_rk3328_read_hpd at end of dw_hdmi_rk3328_setup_hpd to
    correct io voltage and allow reading EDID after setup_hpd.
    
    Fixes: 1c53ba8f22a1 ("drm/rockchip: dw_hdmi: add dw-hdmi support for the rk3328")
    Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240615170417.3134517-5-jonas@kwiboo.se
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/rockchip: support gamma control on RK3399 [+ + +]
Author: Hugh Cole-Baker <sigmaris@gmail.com>
Date:   Tue Oct 19 22:58:42 2021 +0100

    drm/rockchip: support gamma control on RK3399
    
    [ Upstream commit 7ae7a6211fe7251543796d5af971acb8c9e2da9e ]
    
    The RK3399 has a 1024-entry gamma LUT with 10 bits per component on its
    "big" VOP and a 256-entry, 8 bit per component LUT on the "little" VOP.
    Compared to the RK3288, it no longer requires disabling gamma while
    updating the LUT. On the RK3399, the LUT can be updated at any time as
    the hardware has two LUT buffers, one can be written while the other is
    in use. A swap of the buffers is triggered by writing 1 to the
    update_gamma_lut register.
    
    Signed-off-by: Hugh Cole-Baker <sigmaris@gmail.com>
    Tested-by: "Milan P. Stanić" <mps@arvanta.net>
    Tested-by: Linus Heckemann <git@sphalerite.org>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211019215843.42718-3-sigmaris@gmail.com
    Stable-dep-of: 6b44aa559d6c ("drm/rockchip: vop: clear DMA stop bit on RK3066")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/rockchip: vop: Allow 4096px width scaling [+ + +]
Author: Alex Bee <knaerzche@gmail.com>
Date:   Sat Jun 15 17:03:54 2024 +0000

    drm/rockchip: vop: Allow 4096px width scaling
    
    [ Upstream commit 0ef968d91a20b5da581839f093f98f7a03a804f7 ]
    
    There is no reason to limit VOP scaling to 3840px width, the limit of
    RK3288, when there are newer VOP versions that support 4096px width.
    
    Change to enforce a maximum of 4096px width plane scaling, the maximum
    supported output width of the VOP versions supported by this driver.
    
    Fixes: 4c156c21c794 ("drm/rockchip: vop: support plane scale")
    Signed-off-by: Alex Bee <knaerzche@gmail.com>
    Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240615170417.3134517-4-jonas@kwiboo.se
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/rockchip: vop: clear DMA stop bit on RK3066 [+ + +]
Author: Val Packett <val@packett.cool>
Date:   Mon Jun 24 17:40:48 2024 -0300

    drm/rockchip: vop: clear DMA stop bit on RK3066
    
    [ Upstream commit 6b44aa559d6c7f4ea591ef9d2352a7250138d62a ]
    
    The RK3066 VOP sets a dma_stop bit when it's done scanning out a frame
    and needs the driver to acknowledge that by clearing the bit.
    
    Unless we clear it "between" frames, the RGB output only shows noise
    instead of the picture. atomic_flush is the place for it that least
    affects other code (doing it on vblank would require converting all
    other usages of the reg_lock to spin_(un)lock_irq, which would affect
    performance for everyone).
    
    This seems to be a redundant synchronization mechanism that was removed
    in later iterations of the VOP hardware block.
    
    Fixes: f4a6de855eae ("drm: rockchip: vop: add rk3066 vop definitions")
    Cc: stable@vger.kernel.org
    Signed-off-by: Val Packett <val@packett.cool>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240624204054.5524-2-val@packett.cool
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/sched: Add locking to drm_sched_entity_modify_sched [+ + +]
Author: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Date:   Fri Sep 13 17:05:52 2024 +0100

    drm/sched: Add locking to drm_sched_entity_modify_sched
    
    commit 4286cc2c953983d44d248c9de1c81d3a9643345c upstream.
    
    Without the locking amdgpu currently can race between
    amdgpu_ctx_set_entity_priority() (via drm_sched_entity_modify_sched()) and
    drm_sched_job_arm(), leading to the latter accesing potentially
    inconsitent entity->sched_list and entity->num_sched_list pair.
    
    v2:
     * Improve commit message. (Philipp)
    
    Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Fixes: b37aced31eb0 ("drm/scheduler: implement a function to modify sched list")
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: Luben Tuikov <ltuikov89@gmail.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: David Airlie <airlied@gmail.com>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: dri-devel@lists.freedesktop.org
    Cc: Philipp Stanner <pstanner@redhat.com>
    Cc: <stable@vger.kernel.org> # v5.7+
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240913160559.49054-2-tursulin@igalia.com
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/stm: Fix an error handling path in stm_drm_platform_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sat Jan 6 17:54:32 2024 +0100

    drm/stm: Fix an error handling path in stm_drm_platform_probe()
    
    [ Upstream commit ce7c90bfda2656418c69ba0dd8f8a7536b8928d4 ]
    
    If drm_dev_register() fails, a call to drv_load() must be undone, as
    already done in the remove function.
    
    Fixes: b759012c5fa7 ("drm/stm: Add STM32 LTDC driver")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Acked-by: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20fff7f853f20a48a96db8ff186124470ec4d976.1704560028.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/v3d: Stop the active perfmon before being destroyed [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Fri Oct 4 10:02:29 2024 -0300

    drm/v3d: Stop the active perfmon before being destroyed
    
    commit 7d1fd3638ee3a9f9bca4785fffb638ca19120718 upstream.
    
    When running `kmscube` with one or more performance monitors enabled
    via `GALLIUM_HUD`, the following kernel panic can occur:
    
    [   55.008324] Unable to handle kernel paging request at virtual address 00000000052004a4
    [   55.008368] Mem abort info:
    [   55.008377]   ESR = 0x0000000096000005
    [   55.008387]   EC = 0x25: DABT (current EL), IL = 32 bits
    [   55.008402]   SET = 0, FnV = 0
    [   55.008412]   EA = 0, S1PTW = 0
    [   55.008421]   FSC = 0x05: level 1 translation fault
    [   55.008434] Data abort info:
    [   55.008442]   ISV = 0, ISS = 0x00000005, ISS2 = 0x00000000
    [   55.008455]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [   55.008467]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [   55.008481] user pgtable: 4k pages, 39-bit VAs, pgdp=00000001046c6000
    [   55.008497] [00000000052004a4] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000
    [   55.008525] Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
    [   55.008542] Modules linked in: rfcomm [...] vc4 v3d snd_soc_hdmi_codec drm_display_helper
    gpu_sched drm_shmem_helper cec drm_dma_helper drm_kms_helper i2c_brcmstb
    drm drm_panel_orientation_quirks snd_soc_core snd_compress snd_pcm_dmaengine snd_pcm snd_timer snd backlight
    [   55.008799] CPU: 2 PID: 166 Comm: v3d_bin Tainted: G         C         6.6.47+rpt-rpi-v8 #1  Debian 1:6.6.47-1+rpt1
    [   55.008824] Hardware name: Raspberry Pi 4 Model B Rev 1.5 (DT)
    [   55.008838] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [   55.008855] pc : __mutex_lock.constprop.0+0x90/0x608
    [   55.008879] lr : __mutex_lock.constprop.0+0x58/0x608
    [   55.008895] sp : ffffffc080673cf0
    [   55.008904] x29: ffffffc080673cf0 x28: 0000000000000000 x27: ffffff8106188a28
    [   55.008926] x26: ffffff8101e78040 x25: ffffff8101baa6c0 x24: ffffffd9d989f148
    [   55.008947] x23: ffffffda1c2a4008 x22: 0000000000000002 x21: ffffffc080673d38
    [   55.008968] x20: ffffff8101238000 x19: ffffff8104f83188 x18: 0000000000000000
    [   55.008988] x17: 0000000000000000 x16: ffffffda1bd04d18 x15: 00000055bb08bc90
    [   55.009715] x14: 0000000000000000 x13: 0000000000000000 x12: ffffffda1bd4cbb0
    [   55.010433] x11: 00000000fa83b2da x10: 0000000000001a40 x9 : ffffffda1bd04d04
    [   55.011162] x8 : ffffff8102097b80 x7 : 0000000000000000 x6 : 00000000030a5857
    [   55.011880] x5 : 00ffffffffffffff x4 : 0300000005200470 x3 : 0300000005200470
    [   55.012598] x2 : ffffff8101238000 x1 : 0000000000000021 x0 : 0300000005200470
    [   55.013292] Call trace:
    [   55.013959]  __mutex_lock.constprop.0+0x90/0x608
    [   55.014646]  __mutex_lock_slowpath+0x1c/0x30
    [   55.015317]  mutex_lock+0x50/0x68
    [   55.015961]  v3d_perfmon_stop+0x40/0xe0 [v3d]
    [   55.016627]  v3d_bin_job_run+0x10c/0x2d8 [v3d]
    [   55.017282]  drm_sched_main+0x178/0x3f8 [gpu_sched]
    [   55.017921]  kthread+0x11c/0x128
    [   55.018554]  ret_from_fork+0x10/0x20
    [   55.019168] Code: f9400260 f1001c1f 54001ea9 927df000 (b9403401)
    [   55.019776] ---[ end trace 0000000000000000 ]---
    [   55.020411] note: v3d_bin[166] exited with preempt_count 1
    
    This issue arises because, upon closing the file descriptor (which happens
    when we interrupt `kmscube`), the active performance monitor is not
    stopped. Although all perfmons are destroyed in `v3d_perfmon_close_file()`,
    the active performance monitor's pointer (`v3d->active_perfmon`) is still
    retained.
    
    If `kmscube` is run again, the driver will attempt to stop the active
    performance monitor using the stale pointer in `v3d->active_perfmon`.
    However, this pointer is no longer valid because the previous process has
    already terminated, and all performance monitors associated with it have
    been destroyed and freed.
    
    To fix this, when the active performance monitor belongs to a given
    process, explicitly stop it before destroying and freeing it.
    
    Cc: stable@vger.kernel.org # v5.15+
    Closes: https://github.com/raspberrypi/linux/issues/6389
    Fixes: 26a4dc29b74a ("drm/v3d: Expose performance counters to userspace")
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Reviewed-by: Juan A. Suarez <jasuarez@igalia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241004130625.918580-2-mcanal@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm: Consistently use struct drm_mode_rect for FB_DAMAGE_CLIPS [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Mon Sep 23 09:58:14 2024 +0200

    drm: Consistently use struct drm_mode_rect for FB_DAMAGE_CLIPS
    
    commit 8b0d2f61545545ab5eef923ed6e59fc3be2385e0 upstream.
    
    FB_DAMAGE_CLIPS is a plane property for damage handling. Its UAPI
    should only use UAPI types. Hence replace struct drm_rect with
    struct drm_mode_rect in drm_atomic_plane_set_property(). Both types
    are identical in practice, so there's no change in behavior.
    
    Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Closes: https://lore.kernel.org/dri-devel/Zu1Ke1TuThbtz15E@intel.com/
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Fixes: d3b21767821e ("drm: Add a new plane property to send damage during plane update")
    Cc: Lukasz Spintzyk <lukasz.spintzyk@displaylink.com>
    Cc: Deepak Rawat <drawat@vmware.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Thomas Hellstrom <thellstrom@vmware.com>
    Cc: David Airlie <airlied@gmail.com>
    Cc: Simona Vetter <simona@ffwll.ch>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Maxime Ripard <mripard@kernel.org>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: dri-devel@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v5.0+
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240923075841.16231-1-tzimmermann@suse.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm: komeda: Fix an issue related to normalized zpos [+ + +]
Author: hongchi.peng <hongchi.peng@siengine.com>
Date:   Mon Aug 26 10:45:17 2024 +0800

    drm: komeda: Fix an issue related to normalized zpos
    
    [ Upstream commit 258905cb9a6414be5c9ca4aa20ef855f8dc894d4 ]
    
    We use komeda_crtc_normalize_zpos to normalize zpos of affected planes
    to their blending zorder in CU. If there's only one slave plane in
    affected planes and its layer_split property is enabled, order++ for
    its split layer, so that when calculating the normalized_zpos
    of master planes, the split layer of the slave plane is included, but
    the max_slave_zorder does not include the split layer and keep zero
    because there's only one slave plane in affacted planes, although we
    actually use two slave layers in this commit.
    
    In most cases, this bug does not result in a commit failure, but assume
    the following situation:
        slave_layer 0: zpos = 0, layer split enabled, normalized_zpos =
        0;(use slave_layer 2 as its split layer)
        master_layer 0: zpos = 2, layer_split enabled, normalized_zpos =
        2;(use master_layer 2 as its split layer)
        master_layer 1: zpos = 4, normalized_zpos = 4;
        master_layer 3: zpos = 5, normalized_zpos = 5;
        kcrtc_st->max_slave_zorder = 0;
    When we use master_layer 3 as a input of CU in function
    komeda_compiz_set_input and check it with function
    komeda_component_check_input, the parameter idx is equal to
    normailzed_zpos minus max_slave_zorder, the value of idx is 5
    and is euqal to CU's max_active_inputs, so that
    komeda_component_check_input returns a -EINVAL value.
    
    To fix the bug described above, when calculating the max_slave_zorder
    with the layer_split enabled, count the split layer in this calculation
    directly.
    
    Signed-off-by: hongchi.peng <hongchi.peng@siengine.com>
    Acked-by: Liviu Dudau <liviu.dudau@arm.com>
    Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240826024517.3739-1-hongchi.peng@siengine.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm: omapdrm: Add missing check for alloc_ordered_workqueue [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Thu Aug 8 14:13:36 2024 +0800

    drm: omapdrm: Add missing check for alloc_ordered_workqueue
    
    commit e794b7b9b92977365c693760a259f8eef940c536 upstream.
    
    As it may return NULL pointer and cause NULL pointer dereference. Add check
    for the return value of alloc_ordered_workqueue.
    
    Cc: stable@vger.kernel.org
    Fixes: 2f95bc6d324a ("drm: omapdrm: Perform initialization/cleanup at probe/remove time")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240808061336.2796729-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dt-bindings: clock: qcom: Add GPLL9 support on gcc-sc8180x [+ + +]
Author: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
Date:   Mon Aug 12 10:43:02 2024 +0530

    dt-bindings: clock: qcom: Add GPLL9 support on gcc-sc8180x
    
    [ Upstream commit 648b4bde0aca2980ebc0b90cdfbb80d222370c3d ]
    
    Add the missing GPLL9 which is required for the gcc sdcc2 clock.
    
    Fixes: 0fadcdfdcf57 ("dt-bindings: clock: Add SC8180x GCC binding")
    Cc: stable@vger.kernel.org
    Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Satya Priya Kakitapalli <quic_skakitap@quicinc.com>
    Link: https://lore.kernel.org/r/20240812-gcc-sc8180x-fixes-v2-2-8b3eaa5fb856@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dt-bindings: clock: qcom: Add missing UFS QREF clocks [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Date:   Wed Jan 31 12:37:26 2024 +0530

    dt-bindings: clock: qcom: Add missing UFS QREF clocks
    
    [ Upstream commit 26447dad8119fd084d7c6f167c3026700b701666 ]
    
    Add missing QREF clocks for UFS MEM and UFS CARD controllers.
    
    Fixes: 0fadcdfdcf57 ("dt-bindings: clock: Add SC8180x GCC binding")
    Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Link: https://lore.kernel.org/r/20240131-ufs-phy-clock-v3-3-58a49d2f4605@linaro.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Stable-dep-of: 648b4bde0aca ("dt-bindings: clock: qcom: Add GPLL9 support on gcc-sc8180x")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
EDAC/igen6: Fix conversion of system address to physical memory address [+ + +]
Author: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Date:   Wed Aug 14 14:10:11 2024 +0800

    EDAC/igen6: Fix conversion of system address to physical memory address
    
    commit 0ad875f442e95d69a1145a38aabac2fd29984fe3 upstream.
    
    The conversion of system address to physical memory address (as viewed by
    the memory controller) by igen6_edac is incorrect when the system address
    is above the TOM (Total amount Of populated physical Memory) for Elkhart
    Lake and Ice Lake (Neural Network Processor). Fix this conversion.
    
    Fixes: 10590a9d4f23 ("EDAC/igen6: Add EDAC driver for Intel client SoCs using IBECC")
    Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/stable/20240814061011.43545-1-qiuxu.zhuo%40intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
EDAC/synopsys: Add support for version 3 of the Synopsys EDAC DDR [+ + +]
Author: Dinh Nguyen <dinguyen@kernel.org>
Date:   Tue Oct 12 14:07:07 2021 -0500

    EDAC/synopsys: Add support for version 3 of the Synopsys EDAC DDR
    
    [ Upstream commit f7824ded41491d7ebc156a3a2f6fa05cd89da7c2 ]
    
    Add support for version 3.80a of the Synopsys DDR controller. This
    version of the controller has the following differences:
    
    - UE/CE are auto cleared
    - Interrupts are supported by default
    
    Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Michal Simek <michal.simek@xilinx.com>
    Link: https://lkml.kernel.org/r/20211012190709.1504152-2-dinguyen@kernel.org
    Stable-dep-of: 35e6dbfe1846 ("EDAC/synopsys: Fix error injection on Zynq UltraScale+")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

EDAC/synopsys: Fix ECC status and IRQ control race condition [+ + +]
Author: Serge Semin <fancer.lancer@gmail.com>
Date:   Thu Feb 22 21:12:46 2024 +0300

    EDAC/synopsys: Fix ECC status and IRQ control race condition
    
    [ Upstream commit 591c946675d88dcc0ae9ff54be9d5caaee8ce1e3 ]
    
    The race condition around the ECCCLR register access happens in the IRQ
    disable method called in the device remove() procedure and in the ECC IRQ
    handler:
    
      1. Enable IRQ:
         a. ECCCLR = EN_CE | EN_UE
      2. Disable IRQ:
         a. ECCCLR = 0
      3. IRQ handler:
         a. ECCCLR = CLR_CE | CLR_CE_CNT | CLR_CE | CLR_CE_CNT
         b. ECCCLR = 0
         c. ECCCLR = EN_CE | EN_UE
    
    So if the IRQ disabling procedure is called concurrently with the IRQ
    handler method the IRQ might be actually left enabled due to the
    statement 3c.
    
    The root cause of the problem is that ECCCLR register (which since
    v3.10a has been called as ECCCTL) has intermixed ECC status data clear
    flags and the IRQ enable/disable flags. Thus the IRQ disabling (clear EN
    flags) and handling (write 1 to clear ECC status data) procedures must
    be serialised around the ECCCTL register modification to prevent the
    race.
    
    So fix the problem described above by adding the spin-lock around the
    ECCCLR modifications and preventing the IRQ-handler from modifying the
    IRQs enable flags (there is no point in disabling the IRQ and then
    re-enabling it again within a single IRQ handler call, see the
    statements 3a/3b and 3c above).
    
    Fixes: f7824ded4149 ("EDAC/synopsys: Add support for version 3 of the Synopsys EDAC DDR")
    Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20240222181324.28242-2-fancer.lancer@gmail.com
    Stable-dep-of: 35e6dbfe1846 ("EDAC/synopsys: Fix error injection on Zynq UltraScale+")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

EDAC/synopsys: Fix error injection on Zynq UltraScale+ [+ + +]
Author: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
Date:   Thu Jul 11 15:36:56 2024 +0530

    EDAC/synopsys: Fix error injection on Zynq UltraScale+
    
    [ Upstream commit 35e6dbfe1846caeafabb49b7575adb36b0aa2269 ]
    
    The Zynq UltraScale+ MPSoC DDR has a disjoint memory from 2GB to 32GB.
    The DDR host interface has a contiguous memory so while injecting
    errors, the driver should remove the hole else the injection fails as
    the address translation is incorrect.
    
    Introduce a get_mem_info() function pointer and set it for Zynq
    UltraScale+ platform to return host address.
    
    Fixes: 1a81361f75d8 ("EDAC, synopsys: Add Error Injection support for ZynqMP DDR controller")
    Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/20240711100656.31376-1-shubhrajyoti.datta@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

EDAC/synopsys: Re-enable the error interrupts on v3 hw [+ + +]
Author: Sherry Sun <sherry.sun@nxp.com>
Date:   Wed Apr 27 09:51:37 2022 +0800

    EDAC/synopsys: Re-enable the error interrupts on v3 hw
    
    [ Upstream commit 4bcffe941758ee17becb43af3b25487f848f6512 ]
    
    zynqmp_get_error_info() writes 0 to the ECC_CLR_OFST register after
    an interrupt for a {un-,}correctable error is raised, which disables
    the error interrupts. Then the interrupt handler will be called only
    once. Therefore, re-enable the error interrupt line at the end of
    intr_handler() for v3.x Synopsys EDAC DDR.
    
    Fixes: f7824ded4149 ("EDAC/synopsys: Add support for version 3 of the Synopsys EDAC DDR")
    Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Shubhrajyoti Datta <Shubhrajyoti.datta@xilinx.com>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220427015137.8406-3-sherry.sun@nxp.com
    Stable-dep-of: 35e6dbfe1846 ("EDAC/synopsys: Fix error injection on Zynq UltraScale+")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

EDAC/synopsys: Use the correct register to disable the error interrupt on v3 hw [+ + +]
Author: Sherry Sun <sherry.sun@nxp.com>
Date:   Wed Apr 27 09:51:36 2022 +0800

    EDAC/synopsys: Use the correct register to disable the error interrupt on v3 hw
    
    [ Upstream commit be76ceaf03bc04e74be5e28f608316b73c2b04ad ]
    
    v3.x Synopsys EDAC DDR doesn't have the QOS Interrupt register. Use the
    ECC Clear Register to disable the error interrupts instead.
    
    Fixes: f7824ded4149 ("EDAC/synopsys: Add support for version 3 of the Synopsys EDAC DDR")
    Signed-off-by: Sherry Sun <sherry.sun@nxp.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Shubhrajyoti Datta <Shubhrajyoti.datta@xilinx.com>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220427015137.8406-2-sherry.sun@nxp.com
    Stable-dep-of: 35e6dbfe1846 ("EDAC/synopsys: Fix error injection on Zynq UltraScale+")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
eeprom: digsy_mtc: Fix 93xx46 driver probe failure [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed May 8 21:46:55 2024 +0300

    eeprom: digsy_mtc: Fix 93xx46 driver probe failure
    
    [ Upstream commit 2b82641ad0620b2d71dc05024b20f82db7e1c0b6 ]
    
    The update to support other (bigger) types of EEPROMs broke
    the driver loading due to removal of the default size.
    
    Fix this by adding the respective (new) flag to the platform data.
    
    Fixes: 14374fbb3f06 ("misc: eeprom_93xx46: Add new 93c56 and 93c66 compatible strings")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20240508184905.2102633-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
efistub/tpm: Use ACPI reclaim memory for event log to avoid corruption [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Thu Sep 12 17:45:49 2024 +0200

    efistub/tpm: Use ACPI reclaim memory for event log to avoid corruption
    
    commit 77d48d39e99170b528e4f2e9fc5d1d64cdedd386 upstream.
    
    The TPM event log table is a Linux specific construct, where the data
    produced by the GetEventLog() boot service is cached in memory, and
    passed on to the OS using an EFI configuration table.
    
    The use of EFI_LOADER_DATA here results in the region being left
    unreserved in the E820 memory map constructed by the EFI stub, and this
    is the memory description that is passed on to the incoming kernel by
    kexec, which is therefore unaware that the region should be reserved.
    
    Even though the utility of the TPM2 event log after a kexec is
    questionable, any corruption might send the parsing code off into the
    weeds and crash the kernel. So let's use EFI_ACPI_RECLAIM_MEMORY
    instead, which is always treated as reserved by the E820 conversion
    logic.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: Breno Leitao <leitao@debian.org>
    Tested-by: Usama Arif <usamaarif642@gmail.com>
    Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
exfat: fix memory leak in exfat_load_bitmap() [+ + +]
Author: Yuezhang Mo <Yuezhang.Mo@sony.com>
Date:   Tue Sep 3 15:01:09 2024 +0800

    exfat: fix memory leak in exfat_load_bitmap()
    
    commit d2b537b3e533f28e0d97293fe9293161fe8cd137 upstream.
    
    If the first directory entry in the root directory is not a bitmap
    directory entry, 'bh' will not be released and reassigned, which
    will cause a memory leak.
    
    Fixes: 1e49a94cf707 ("exfat: add bitmap operations")
    Cc: stable@vger.kernel.org
    Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
    Reviewed-by: Aoyama Wataru <wataru.aoyama@sony.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ext4: aovid use-after-free in ext4_ext_insert_extent() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:26 2024 +0800

    ext4: aovid use-after-free in ext4_ext_insert_extent()
    
    commit a164f3a432aae62ca23d03e6d926b122ee5b860d upstream.
    
    As Ojaswin mentioned in Link, in ext4_ext_insert_extent(), if the path is
    reallocated in ext4_ext_create_new_leaf(), we'll use the stale path and
    cause UAF. Below is a sample trace with dummy values:
    
    ext4_ext_insert_extent
      path = *ppath = 2000
      ext4_ext_create_new_leaf(ppath)
        ext4_find_extent(ppath)
          path = *ppath = 2000
          if (depth > path[0].p_maxdepth)
                kfree(path = 2000);
                *ppath = path = NULL;
          path = kcalloc() = 3000
          *ppath = 3000;
          return path;
      /* here path is still 2000, UAF! */
      eh = path[depth].p_hdr
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in ext4_ext_insert_extent+0x26d4/0x3330
    Read of size 8 at addr ffff8881027bf7d0 by task kworker/u36:1/179
    CPU: 3 UID: 0 PID: 179 Comm: kworker/u6:1 Not tainted 6.11.0-rc2-dirty #866
    Call Trace:
     <TASK>
     ext4_ext_insert_extent+0x26d4/0x3330
     ext4_ext_map_blocks+0xe22/0x2d40
     ext4_map_blocks+0x71e/0x1700
     ext4_do_writepages+0x1290/0x2800
    [...]
    
    Allocated by task 179:
     ext4_find_extent+0x81c/0x1f70
     ext4_ext_map_blocks+0x146/0x2d40
     ext4_map_blocks+0x71e/0x1700
     ext4_do_writepages+0x1290/0x2800
     ext4_writepages+0x26d/0x4e0
     do_writepages+0x175/0x700
    [...]
    
    Freed by task 179:
     kfree+0xcb/0x240
     ext4_find_extent+0x7c0/0x1f70
     ext4_ext_insert_extent+0xa26/0x3330
     ext4_ext_map_blocks+0xe22/0x2d40
     ext4_map_blocks+0x71e/0x1700
     ext4_do_writepages+0x1290/0x2800
     ext4_writepages+0x26d/0x4e0
     do_writepages+0x175/0x700
    [...]
    ==================================================================
    
    So use *ppath to update the path to avoid the above problem.
    
    Reported-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Closes: https://lore.kernel.org/r/ZqyL6rmtwl6N4MWR@li-bb2b2a4c-3307-11b2-a85c-8fa5c3a69313.ibm.com
    Fixes: 10809df84a4d ("ext4: teach ext4_ext_find_extent() to realloc path if necessary")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240822023545.1994557-7-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: avoid buffer_head leak in ext4_mark_inode_used() [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Tue Aug 20 21:22:28 2024 +0800

    ext4: avoid buffer_head leak in ext4_mark_inode_used()
    
    [ Upstream commit 5e5b2a56c57def1b41efd49596621504d7bcc61c ]
    
    Release inode_bitmap_bh from ext4_read_inode_bitmap() in
    ext4_mark_inode_used() to avoid buffer_head leak.
    By the way, remove unneeded goto for invalid ino when inode_bitmap_bh
    is NULL.
    
    Fixes: 8016e29f4362 ("ext4: fast commit recovery path")
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Link: https://patch.msgid.link/20240820132234.2759926-2-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: avoid negative min_clusters in find_group_orlov() [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Tue Aug 20 21:22:30 2024 +0800

    ext4: avoid negative min_clusters in find_group_orlov()
    
    [ Upstream commit bb0a12c3439b10d88412fd3102df5b9a6e3cd6dc ]
    
    min_clusters is signed integer and will be converted to unsigned
    integer when compared with unsigned number stats.free_clusters.
    If min_clusters is negative, it will be converted to a huge unsigned
    value in which case all groups may not meet the actual desired free
    clusters.
    Set negative min_clusters to 0 to avoid unexpected behavior.
    
    Fixes: ac27a0ec112a ("[PATCH] ext4: initial copy of files from ext3")
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Link: https://patch.msgid.link/20240820132234.2759926-4-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: avoid OOB when system.data xattr changes underneath the filesystem [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Wed Aug 21 12:23:24 2024 -0300

    ext4: avoid OOB when system.data xattr changes underneath the filesystem
    
    [ Upstream commit c6b72f5d82b1017bad80f9ebf502832fc321d796 ]
    
    When looking up for an entry in an inlined directory, if e_value_offs is
    changed underneath the filesystem by some change in the block device, it
    will lead to an out-of-bounds access that KASAN detects as an UAF.
    
    EXT4-fs (loop0): mounted filesystem 00000000-0000-0000-0000-000000000000 r/w without journal. Quota mode: none.
    loop0: detected capacity change from 2048 to 2047
    ==================================================================
    BUG: KASAN: use-after-free in ext4_search_dir+0xf2/0x1c0 fs/ext4/namei.c:1500
    Read of size 1 at addr ffff88803e91130f by task syz-executor269/5103
    
    CPU: 0 UID: 0 PID: 5103 Comm: syz-executor269 Not tainted 6.11.0-rc4-syzkaller #0
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:93 [inline]
     dump_stack_lvl+0x241/0x360 lib/dump_stack.c:119
     print_address_description mm/kasan/report.c:377 [inline]
     print_report+0x169/0x550 mm/kasan/report.c:488
     kasan_report+0x143/0x180 mm/kasan/report.c:601
     ext4_search_dir+0xf2/0x1c0 fs/ext4/namei.c:1500
     ext4_find_inline_entry+0x4be/0x5e0 fs/ext4/inline.c:1697
     __ext4_find_entry+0x2b4/0x1b30 fs/ext4/namei.c:1573
     ext4_lookup_entry fs/ext4/namei.c:1727 [inline]
     ext4_lookup+0x15f/0x750 fs/ext4/namei.c:1795
     lookup_one_qstr_excl+0x11f/0x260 fs/namei.c:1633
     filename_create+0x297/0x540 fs/namei.c:3980
     do_symlinkat+0xf9/0x3a0 fs/namei.c:4587
     __do_sys_symlinkat fs/namei.c:4610 [inline]
     __se_sys_symlinkat fs/namei.c:4607 [inline]
     __x64_sys_symlinkat+0x95/0xb0 fs/namei.c:4607
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f3e73ced469
    Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 21 18 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007fff4d40c258 EFLAGS: 00000246 ORIG_RAX: 000000000000010a
    RAX: ffffffffffffffda RBX: 0032656c69662f2e RCX: 00007f3e73ced469
    RDX: 0000000020000200 RSI: 00000000ffffff9c RDI: 00000000200001c0
    RBP: 0000000000000000 R08: 00007fff4d40c290 R09: 00007fff4d40c290
    R10: 0023706f6f6c2f76 R11: 0000000000000246 R12: 00007fff4d40c27c
    R13: 0000000000000003 R14: 431bde82d7b634db R15: 00007fff4d40c2b0
     </TASK>
    
    Calling ext4_xattr_ibody_find right after reading the inode with
    ext4_get_inode_loc will lead to a check of the validity of the xattrs,
    avoiding this problem.
    
    Reported-by: syzbot+0c2508114d912a54ee79@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=0c2508114d912a54ee79
    Fixes: e8e948e7802a ("ext4: let ext4_find_entry handle inline data")
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Link: https://patch.msgid.link/20240821152324.3621860-5-cascardo@igalia.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: avoid potential buffer_head leak in __ext4_new_inode() [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Tue Aug 20 21:22:29 2024 +0800

    ext4: avoid potential buffer_head leak in __ext4_new_inode()
    
    [ Upstream commit 227d31b9214d1b9513383cf6c7180628d4b3b61f ]
    
    If a group is marked EXT4_GROUP_INFO_IBITMAP_CORRUPT after it's inode
    bitmap buffer_head was successfully verified, then __ext4_new_inode()
    will get a valid inode_bitmap_bh of a corrupted group from
    ext4_read_inode_bitmap() in which case inode_bitmap_bh misses a release.
    Hnadle "IS_ERR(inode_bitmap_bh)" and group corruption separately like
    how ext4_free_inode() does to avoid buffer_head leak.
    
    Fixes: 9008a58e5dce ("ext4: make the bitmap read routines return real error codes")
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Link: https://patch.msgid.link/20240820132234.2759926-3-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: avoid use-after-free in ext4_ext_show_leaf() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:24 2024 +0800

    ext4: avoid use-after-free in ext4_ext_show_leaf()
    
    [ Upstream commit 4e2524ba2ca5f54bdbb9e5153bea00421ef653f5 ]
    
    In ext4_find_extent(), path may be freed by error or be reallocated, so
    using a previously saved *ppath may have been freed and thus may trigger
    use-after-free, as follows:
    
    ext4_split_extent
      path = *ppath;
      ext4_split_extent_at(ppath)
      path = ext4_find_extent(ppath)
      ext4_split_extent_at(ppath)
        // ext4_find_extent fails to free path
        // but zeroout succeeds
      ext4_ext_show_leaf(inode, path)
        eh = path[depth].p_hdr
        // path use-after-free !!!
    
    Similar to ext4_split_extent_at(), we use *ppath directly as an input to
    ext4_ext_show_leaf(). Fix a spelling error by the way.
    
    Same problem in ext4_ext_handle_unwritten_extents(). Since 'path' is only
    used in ext4_ext_show_leaf(), remove 'path' and use *ppath directly.
    
    This issue is triggered only when EXT_DEBUG is defined and therefore does
    not affect functionality.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-5-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: clear EXT4_GROUP_INFO_WAS_TRIMMED_BIT even mount with discard [+ + +]
Author: yangerkun <yangerkun@huawei.com>
Date:   Sat Aug 17 16:55:10 2024 +0800

    ext4: clear EXT4_GROUP_INFO_WAS_TRIMMED_BIT even mount with discard
    
    [ Upstream commit 20cee68f5b44fdc2942d20f3172a262ec247b117 ]
    
    Commit 3d56b8d2c74c ("ext4: Speed up FITRIM by recording flags in
    ext4_group_info") speed up fstrim by skipping trim trimmed group. We
    also has the chance to clear trimmed once there exists some block free
    for this group(mount without discard), and the next trim for this group
    will work well too.
    
    For mount with discard, we will issue dicard when we free blocks, so
    leave trimmed flag keep alive to skip useless trim trigger from
    userspace seems reasonable. But for some case like ext4 build on
    dm-thinpool(ext4 blocksize 4K, pool blocksize 128K), discard from ext4
    maybe unaligned for dm thinpool, and thinpool will just finish this
    discard(see process_discard_bio when begein equals to end) without
    actually process discard. For this case, trim from userspace can really
    help us to free some thinpool block.
    
    So convert to clear trimmed flag for all case no matter mounted with
    discard or not.
    
    Fixes: 3d56b8d2c74c ("ext4: Speed up FITRIM by recording flags in ext4_group_info")
    Signed-off-by: yangerkun <yangerkun@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240817085510.2084444-1-yangerkun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: correct encrypted dentry name hash when not casefolded [+ + +]
Author: yao.ly <yao.ly@linux.alibaba.com>
Date:   Mon Jul 1 14:43:39 2024 +0800

    ext4: correct encrypted dentry name hash when not casefolded
    
    commit 70dd7b573afeba9b8f8a33f2ae1e4a9a2ec8c1ec upstream.
    
    EXT4_DIRENT_HASH and EXT4_DIRENT_MINOR_HASH will access struct
    ext4_dir_entry_hash followed ext4_dir_entry. But there is no ext4_dir_entry_hash
    followed when inode is encrypted and not casefolded
    
    Signed-off-by: yao.ly <yao.ly@linux.alibaba.com>
    Link: https://patch.msgid.link/1719816219-128287-1-git-send-email-yao.ly@linux.alibaba.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: dax: fix overflowing extents beyond inode size when partially writing [+ + +]
Author: Zhihao Cheng <chengzhihao1@huawei.com>
Date:   Fri Aug 9 20:15:32 2024 +0800

    ext4: dax: fix overflowing extents beyond inode size when partially writing
    
    [ Upstream commit dda898d7ffe85931f9cca6d702a51f33717c501e ]
    
    The dax_iomap_rw() does two things in each iteration: map written blocks
    and copy user data to blocks. If the process is killed by user(See signal
    handling in dax_iomap_iter()), the copied data will be returned and added
    on inode size, which means that the length of written extents may exceed
    the inode size, then fsck will fail. An example is given as:
    
    dd if=/dev/urandom of=file bs=4M count=1
     dax_iomap_rw
      iomap_iter // round 1
       ext4_iomap_begin
        ext4_iomap_alloc // allocate 0~2M extents(written flag)
      dax_iomap_iter // copy 2M data
      iomap_iter // round 2
       iomap_iter_advance
        iter->pos += iter->processed // iter->pos = 2M
       ext4_iomap_begin
        ext4_iomap_alloc // allocate 2~4M extents(written flag)
      dax_iomap_iter
       fatal_signal_pending
      done = iter->pos - iocb->ki_pos // done = 2M
     ext4_handle_inode_extension
      ext4_update_inode_size // inode size = 2M
    
    fsck reports: Inode 13, i_size is 2097152, should be 4194304.  Fix?
    
    Fix the problem by truncating extents if the written length is smaller
    than expected.
    
    Fixes: 776722e85d3b ("ext4: DAX iomap write support")
    CC: stable@vger.kernel.org
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219136
    Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
    Link: https://patch.msgid.link/20240809121532.2105494-1-chengzhihao@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: don't set SB_RDONLY after filesystem errors [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Mon Aug 5 22:12:41 2024 +0200

    ext4: don't set SB_RDONLY after filesystem errors
    
    [ Upstream commit d3476f3dad4ad68ae5f6b008ea6591d1520da5d8 ]
    
    When the filesystem is mounted with errors=remount-ro, we were setting
    SB_RDONLY flag to stop all filesystem modifications. We knew this misses
    proper locking (sb->s_umount) and does not go through proper filesystem
    remount procedure but it has been the way this worked since early ext2
    days and it was good enough for catastrophic situation damage
    mitigation. Recently, syzbot has found a way (see link) to trigger
    warnings in filesystem freezing because the code got confused by
    SB_RDONLY changing under its hands. Since these days we set
    EXT4_FLAGS_SHUTDOWN on the superblock which is enough to stop all
    filesystem modifications, modifying SB_RDONLY shouldn't be needed. So
    stop doing that.
    
    Link: https://lore.kernel.org/all/000000000000b90a8e061e21d12f@google.com
    Reported-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Christian Brauner <brauner@kernel.org>
    Link: https://patch.msgid.link/20240805201241.27286-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: drop ppath from ext4_ext_replay_update_ex() to avoid double-free [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:27 2024 +0800

    ext4: drop ppath from ext4_ext_replay_update_ex() to avoid double-free
    
    commit 5c0f4cc84d3a601c99bc5e6e6eb1cbda542cce95 upstream.
    
    When calling ext4_force_split_extent_at() in ext4_ext_replay_update_ex(),
    the 'ppath' is updated but it is the 'path' that is freed, thus potentially
    triggering a double-free in the following process:
    
    ext4_ext_replay_update_ex
      ppath = path
      ext4_force_split_extent_at(&ppath)
        ext4_split_extent_at
          ext4_ext_insert_extent
            ext4_ext_create_new_leaf
              ext4_ext_grow_indepth
                ext4_find_extent
                  if (depth > path[0].p_maxdepth)
                    kfree(path)                 ---> path First freed
                    *orig_path = path = NULL    ---> null ppath
      kfree(path)                               ---> path double-free !!!
    
    So drop the unnecessary ppath and use path directly to avoid this problem.
    And use ext4_find_extent() directly to update path, avoiding unnecessary
    memory allocation and freeing. Also, propagate the error returned by
    ext4_find_extent() instead of using strange error codes.
    
    Fixes: 8016e29f4362 ("ext4: fast commit recovery path")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-8-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: ext4_search_dir should return a proper error [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Wed Aug 21 12:23:21 2024 -0300

    ext4: ext4_search_dir should return a proper error
    
    [ Upstream commit cd69f8f9de280e331c9e6ff689ced0a688a9ce8f ]
    
    ext4_search_dir currently returns -1 in case of a failure, while it returns
    0 when the name is not found. In such failure cases, it should return an
    error code instead.
    
    This becomes even more important when ext4_find_inline_entry returns an
    error code as well in the next commit.
    
    -EFSCORRUPTED seems appropriate as such error code as these failures would
    be caused by unexpected record lengths and is in line with other instances
    of ext4_check_dir_entry failures.
    
    In the case of ext4_dx_find_entry, the current use of ERR_BAD_DX_DIR was
    left as is to reduce the risk of regressions.
    
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Link: https://patch.msgid.link/20240821152324.3621860-2-cascardo@igalia.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix double brelse() the buffer of the extents path [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:28 2024 +0800

    ext4: fix double brelse() the buffer of the extents path
    
    commit dcaa6c31134c0f515600111c38ed7750003e1b9c upstream.
    
    In ext4_ext_try_to_merge_up(), set path[1].p_bh to NULL after it has been
    released, otherwise it may be released twice. An example of what triggers
    this is as follows:
    
      split2    map    split1
    |--------|-------|--------|
    
    ext4_ext_map_blocks
     ext4_ext_handle_unwritten_extents
      ext4_split_convert_extents
       // path->p_depth == 0
       ext4_split_extent
         // 1. do split1
         ext4_split_extent_at
           |ext4_ext_insert_extent
           |  ext4_ext_create_new_leaf
           |    ext4_ext_grow_indepth
           |      le16_add_cpu(&neh->eh_depth, 1)
           |    ext4_find_extent
           |      // return -ENOMEM
           |// get error and try zeroout
           |path = ext4_find_extent
           |  path->p_depth = 1
           |ext4_ext_try_to_merge
           |  ext4_ext_try_to_merge_up
           |    path->p_depth = 0
           |    brelse(path[1].p_bh)  ---> not set to NULL here
           |// zeroout success
         // 2. update path
         ext4_find_extent
         // 3. do split2
         ext4_split_extent_at
           ext4_ext_insert_extent
             ext4_ext_create_new_leaf
               ext4_ext_grow_indepth
                 le16_add_cpu(&neh->eh_depth, 1)
               ext4_find_extent
                 path[0].p_bh = NULL;
                 path->p_depth = 1
                 read_extent_tree_block  ---> return err
                 // path[1].p_bh is still the old value
                 ext4_free_ext_path
                   ext4_ext_drop_refs
                     // path->p_depth == 1
                     brelse(path[1].p_bh)  ---> brelse a buffer twice
    
    Finally got the following WARRNING when removing the buffer from lru:
    
    ============================================
    VFS: brelse: Trying to free free buffer
    WARNING: CPU: 2 PID: 72 at fs/buffer.c:1241 __brelse+0x58/0x90
    CPU: 2 PID: 72 Comm: kworker/u19:1 Not tainted 6.9.0-dirty #716
    RIP: 0010:__brelse+0x58/0x90
    Call Trace:
     <TASK>
     __find_get_block+0x6e7/0x810
     bdev_getblk+0x2b/0x480
     __ext4_get_inode_loc+0x48a/0x1240
     ext4_get_inode_loc+0xb2/0x150
     ext4_reserve_inode_write+0xb7/0x230
     __ext4_mark_inode_dirty+0x144/0x6a0
     ext4_ext_insert_extent+0x9c8/0x3230
     ext4_ext_map_blocks+0xf45/0x2dc0
     ext4_map_blocks+0x724/0x1700
     ext4_do_writepages+0x12d6/0x2a70
    [...]
    ============================================
    
    Fixes: ecb94f5fdf4b ("ext4: collapse a single extent tree block into the inode if possible")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-9-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix fast commit inode enqueueing during a full journal commit [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Wed Jul 17 18:22:20 2024 +0100

    ext4: fix fast commit inode enqueueing during a full journal commit
    
    commit 6db3c1575a750fd417a70e0178bdf6efa0dd5037 upstream.
    
    When a full journal commit is on-going, any fast commit has to be enqueued
    into a different queue: FC_Q_STAGING instead of FC_Q_MAIN.  This enqueueing
    is done only once, i.e. if an inode is already queued in a previous fast
    commit entry it won't be enqueued again.  However, if a full commit starts
    _after_ the inode is enqueued into FC_Q_MAIN, the next fast commit needs to
    be done into FC_Q_STAGING.  And this is not being done in function
    ext4_fc_track_template().
    
    This patch fixes the issue by re-enqueuing an inode into the STAGING queue
    during the fast commit clean-up callback when doing a full commit.  However,
    to prevent a race with a fast-commit, the clean-up callback has to be called
    with the journal locked.
    
    This bug was found using fstest generic/047.  This test creates several 32k
    bytes files, sync'ing each of them after it's creation, and then shutting
    down the filesystem.  Some data may be loss in this operation; for example a
    file may have it's size truncated to zero.
    
    Suggested-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240717172220.14201-1-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix i_data_sem unlock order in ext4_ind_migrate() [+ + +]
Author: Artem Sadovnikov <ancowi69@gmail.com>
Date:   Thu Aug 29 15:22:09 2024 +0000

    ext4: fix i_data_sem unlock order in ext4_ind_migrate()
    
    [ Upstream commit cc749e61c011c255d81b192a822db650c68b313f ]
    
    Fuzzing reports a possible deadlock in jbd2_log_wait_commit.
    
    This issue is triggered when an EXT4_IOC_MIGRATE ioctl is set to require
    synchronous updates because the file descriptor is opened with O_SYNC.
    This can lead to the jbd2_journal_stop() function calling
    jbd2_might_wait_for_commit(), potentially causing a deadlock if the
    EXT4_IOC_MIGRATE call races with a write(2) system call.
    
    This problem only arises when CONFIG_PROVE_LOCKING is enabled. In this
    case, the jbd2_might_wait_for_commit macro locks jbd2_handle in the
    jbd2_journal_stop function while i_data_sem is locked. This triggers
    lockdep because the jbd2_journal_start function might also lock the same
    jbd2_handle simultaneously.
    
    Found by Linux Verification Center (linuxtesting.org) with syzkaller.
    
    Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Co-developed-by: Mikhail Ukhin <mish.uxin2012@yandex.ru>
    Signed-off-by: Mikhail Ukhin <mish.uxin2012@yandex.ru>
    Signed-off-by: Artem Sadovnikov <ancowi69@gmail.com>
    Rule: add
    Link: https://lore.kernel.org/stable/20240404095000.5872-1-mish.uxin2012%40yandex.ru
    Link: https://patch.msgid.link/20240829152210.2754-1-ancowi69@gmail.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix incorrect tid assumption in __jbd2_log_wait_for_space() [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Wed Jul 24 17:11:16 2024 +0100

    ext4: fix incorrect tid assumption in __jbd2_log_wait_for_space()
    
    commit 972090651ee15e51abfb2160e986fa050cfc7a40 upstream.
    
    Function __jbd2_log_wait_for_space() assumes that '0' is not a valid value
    for transaction IDs, which is incorrect.  Don't assume that and invoke
    jbd2_log_wait_commit() if the journal had a committing transaction instead.
    
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240724161119.13448-3-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix incorrect tid assumption in ext4_wait_for_tail_page_commit() [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Wed Jul 24 17:11:15 2024 +0100

    ext4: fix incorrect tid assumption in ext4_wait_for_tail_page_commit()
    
    commit dd589b0f1445e1ea1085b98edca6e4d5dedb98d0 upstream.
    
    Function ext4_wait_for_tail_page_commit() assumes that '0' is not a valid
    value for transaction IDs, which is incorrect.  Don't assume that and invoke
    jbd2_log_wait_commit() if the journal had a committing transaction instead.
    
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240724161119.13448-2-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix incorrect tid assumption in jbd2_journal_shrink_checkpoint_list() [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Wed Jul 24 17:11:17 2024 +0100

    ext4: fix incorrect tid assumption in jbd2_journal_shrink_checkpoint_list()
    
    commit 7a6443e1dad70281f99f0bd394d7fd342481a632 upstream.
    
    Function jbd2_journal_shrink_checkpoint_list() assumes that '0' is not a
    valid value for transaction IDs, which is incorrect.  Don't assume that and
    use two extra boolean variables to control the loop iterations and keep
    track of the first and last tid.
    
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240724161119.13448-4-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix inode tree inconsistency caused by ENOMEM [+ + +]
Author: zhanchengbin <zhanchengbin1@huawei.com>
Date:   Tue Jan 3 10:28:12 2023 +0800

    ext4: fix inode tree inconsistency caused by ENOMEM
    
    commit 3f5424790d4377839093b68c12b130077a4e4510 upstream.
    
    If ENOMEM fails when the extent is splitting, we need to restore the length
    of the split extent.
    In the ext4_split_extent_at function, only in ext4_ext_create_new_leaf will
    it alloc memory and change the shape of the extent tree,even if an ENOMEM
    is returned at this time, the extent tree is still self-consistent, Just
    restore the split extent lens in the function ext4_split_extent_at.
    
    ext4_split_extent_at
     ext4_ext_insert_extent
      ext4_ext_create_new_leaf
       1)ext4_ext_split
         ext4_find_extent
       2)ext4_ext_grow_indepth
         ext4_find_extent
    
    Signed-off-by: zhanchengbin <zhanchengbin1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20230103022812.130603-1-zhanchengbin1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: Baokun Li <libaokun1@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix slab-use-after-free in ext4_split_extent_at() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:23 2024 +0800

    ext4: fix slab-use-after-free in ext4_split_extent_at()
    
    commit c26ab35702f8cd0cdc78f96aa5856bfb77be798f upstream.
    
    We hit the following use-after-free:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in ext4_split_extent_at+0xba8/0xcc0
    Read of size 2 at addr ffff88810548ed08 by task kworker/u20:0/40
    CPU: 0 PID: 40 Comm: kworker/u20:0 Not tainted 6.9.0-dirty #724
    Call Trace:
     <TASK>
     kasan_report+0x93/0xc0
     ext4_split_extent_at+0xba8/0xcc0
     ext4_split_extent.isra.0+0x18f/0x500
     ext4_split_convert_extents+0x275/0x750
     ext4_ext_handle_unwritten_extents+0x73e/0x1580
     ext4_ext_map_blocks+0xe20/0x2dc0
     ext4_map_blocks+0x724/0x1700
     ext4_do_writepages+0x12d6/0x2a70
    [...]
    
    Allocated by task 40:
     __kmalloc_noprof+0x1ac/0x480
     ext4_find_extent+0xf3b/0x1e70
     ext4_ext_map_blocks+0x188/0x2dc0
     ext4_map_blocks+0x724/0x1700
     ext4_do_writepages+0x12d6/0x2a70
    [...]
    
    Freed by task 40:
     kfree+0xf1/0x2b0
     ext4_find_extent+0xa71/0x1e70
     ext4_ext_insert_extent+0xa22/0x3260
     ext4_split_extent_at+0x3ef/0xcc0
     ext4_split_extent.isra.0+0x18f/0x500
     ext4_split_convert_extents+0x275/0x750
     ext4_ext_handle_unwritten_extents+0x73e/0x1580
     ext4_ext_map_blocks+0xe20/0x2dc0
     ext4_map_blocks+0x724/0x1700
     ext4_do_writepages+0x12d6/0x2a70
    [...]
    ==================================================================
    
    The flow of issue triggering is as follows:
    
    ext4_split_extent_at
      path = *ppath
      ext4_ext_insert_extent(ppath)
        ext4_ext_create_new_leaf(ppath)
          ext4_find_extent(orig_path)
            path = *orig_path
            read_extent_tree_block
              // return -ENOMEM or -EIO
            ext4_free_ext_path(path)
              kfree(path)
            *orig_path = NULL
      a. If err is -ENOMEM:
      ext4_ext_dirty(path + path->p_depth)
      // path use-after-free !!!
      b. If err is -EIO and we have EXT_DEBUG defined:
      ext4_ext_show_leaf(path)
        eh = path[depth].p_hdr
        // path also use-after-free !!!
    
    So when trying to zeroout or fix the extent length, call ext4_find_extent()
    to update the path.
    
    In addition we use *ppath directly as an ext4_ext_show_leaf() input to
    avoid possible use-after-free when EXT_DEBUG is defined, and to avoid
    unnecessary path updates.
    
    Fixes: dfe5080939ea ("ext4: drop EXT4_EX_NOFREE_ON_ERR from rest of extents handling code")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-4-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix warning in ext4_dio_write_end_io() [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Nov 30 10:56:53 2023 +0100

    ext4: fix warning in ext4_dio_write_end_io()
    
    commit 619f75dae2cf117b1d07f27b046b9ffb071c4685 upstream.
    
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: mark fc as ineligible using an handle in ext4_xattr_set() [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Mon Sep 23 11:49:09 2024 +0100

    ext4: mark fc as ineligible using an handle in ext4_xattr_set()
    
    commit 04e6ce8f06d161399e5afde3df5dcfa9455b4952 upstream.
    
    Calling ext4_fc_mark_ineligible() with a NULL handle is racy and may result
    in a fast-commit being done before the filesystem is effectively marked as
    ineligible.  This patch moves the call to this function so that an handle
    can be used.  If a transaction fails to start, then there's not point in
    trying to mark the filesystem as ineligible, and an error will eventually be
    returned to user-space.
    
    Suggested-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240923104909.18342-3-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: nested locking for xattr inode [+ + +]
Author: Wojciech Gładysz <wojciech.gladysz@infogain.com>
Date:   Thu Aug 1 16:38:27 2024 +0200

    ext4: nested locking for xattr inode
    
    [ Upstream commit d1bc560e9a9c78d0b2314692847fc8661e0aeb99 ]
    
    Add nested locking with I_MUTEX_XATTR subclass to avoid lockdep warning
    while handling xattr inode on file open syscall at ext4_xattr_inode_iget.
    
    Backtrace
    EXT4-fs (loop0): Ignoring removed oldalloc option
    ======================================================
    WARNING: possible circular locking dependency detected
    5.10.0-syzkaller #0 Not tainted
    ------------------------------------------------------
    syz-executor543/2794 is trying to acquire lock:
    ffff8880215e1a48 (&ea_inode->i_rwsem#7/1){+.+.}-{3:3}, at: inode_lock include/linux/fs.h:782 [inline]
    ffff8880215e1a48 (&ea_inode->i_rwsem#7/1){+.+.}-{3:3}, at: ext4_xattr_inode_iget+0x42a/0x5c0 fs/ext4/xattr.c:425
    
    but task is already holding lock:
    ffff8880215e3278 (&ei->i_data_sem/3){++++}-{3:3}, at: ext4_setattr+0x136d/0x19c0 fs/ext4/inode.c:5559
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (&ei->i_data_sem/3){++++}-{3:3}:
           lock_acquire+0x197/0x480 kernel/locking/lockdep.c:5566
           down_write+0x93/0x180 kernel/locking/rwsem.c:1564
           ext4_update_i_disksize fs/ext4/ext4.h:3267 [inline]
           ext4_xattr_inode_write fs/ext4/xattr.c:1390 [inline]
           ext4_xattr_inode_lookup_create fs/ext4/xattr.c:1538 [inline]
           ext4_xattr_set_entry+0x331a/0x3d80 fs/ext4/xattr.c:1662
           ext4_xattr_ibody_set+0x124/0x390 fs/ext4/xattr.c:2228
           ext4_xattr_set_handle+0xc27/0x14e0 fs/ext4/xattr.c:2385
           ext4_xattr_set+0x219/0x390 fs/ext4/xattr.c:2498
           ext4_xattr_user_set+0xc9/0xf0 fs/ext4/xattr_user.c:40
           __vfs_setxattr+0x404/0x450 fs/xattr.c:177
           __vfs_setxattr_noperm+0x11d/0x4f0 fs/xattr.c:208
           __vfs_setxattr_locked+0x1f9/0x210 fs/xattr.c:266
           vfs_setxattr+0x112/0x2c0 fs/xattr.c:283
           setxattr+0x1db/0x3e0 fs/xattr.c:548
           path_setxattr+0x15a/0x240 fs/xattr.c:567
           __do_sys_setxattr fs/xattr.c:582 [inline]
           __se_sys_setxattr fs/xattr.c:578 [inline]
           __x64_sys_setxattr+0xc5/0xe0 fs/xattr.c:578
           do_syscall_64+0x6d/0xa0 arch/x86/entry/common.c:62
           entry_SYSCALL_64_after_hwframe+0x61/0xcb
    
    -> #0 (&ea_inode->i_rwsem#7/1){+.+.}-{3:3}:
           check_prev_add kernel/locking/lockdep.c:2988 [inline]
           check_prevs_add kernel/locking/lockdep.c:3113 [inline]
           validate_chain+0x1695/0x58f0 kernel/locking/lockdep.c:3729
           __lock_acquire+0x12fd/0x20d0 kernel/locking/lockdep.c:4955
           lock_acquire+0x197/0x480 kernel/locking/lockdep.c:5566
           down_write+0x93/0x180 kernel/locking/rwsem.c:1564
           inode_lock include/linux/fs.h:782 [inline]
           ext4_xattr_inode_iget+0x42a/0x5c0 fs/ext4/xattr.c:425
           ext4_xattr_inode_get+0x138/0x410 fs/ext4/xattr.c:485
           ext4_xattr_move_to_block fs/ext4/xattr.c:2580 [inline]
           ext4_xattr_make_inode_space fs/ext4/xattr.c:2682 [inline]
           ext4_expand_extra_isize_ea+0xe70/0x1bb0 fs/ext4/xattr.c:2774
           __ext4_expand_extra_isize+0x304/0x3f0 fs/ext4/inode.c:5898
           ext4_try_to_expand_extra_isize fs/ext4/inode.c:5941 [inline]
           __ext4_mark_inode_dirty+0x591/0x810 fs/ext4/inode.c:6018
           ext4_setattr+0x1400/0x19c0 fs/ext4/inode.c:5562
           notify_change+0xbb6/0xe60 fs/attr.c:435
           do_truncate+0x1de/0x2c0 fs/open.c:64
           handle_truncate fs/namei.c:2970 [inline]
           do_open fs/namei.c:3311 [inline]
           path_openat+0x29f3/0x3290 fs/namei.c:3425
           do_filp_open+0x20b/0x450 fs/namei.c:3452
           do_sys_openat2+0x124/0x460 fs/open.c:1207
           do_sys_open fs/open.c:1223 [inline]
           __do_sys_open fs/open.c:1231 [inline]
           __se_sys_open fs/open.c:1227 [inline]
           __x64_sys_open+0x221/0x270 fs/open.c:1227
           do_syscall_64+0x6d/0xa0 arch/x86/entry/common.c:62
           entry_SYSCALL_64_after_hwframe+0x61/0xcb
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&ei->i_data_sem/3);
                                   lock(&ea_inode->i_rwsem#7/1);
                                   lock(&ei->i_data_sem/3);
      lock(&ea_inode->i_rwsem#7/1);
    
     *** DEADLOCK ***
    
    5 locks held by syz-executor543/2794:
     #0: ffff888026fbc448 (sb_writers#4){.+.+}-{0:0}, at: mnt_want_write+0x4a/0x2a0 fs/namespace.c:365
     #1: ffff8880215e3488 (&sb->s_type->i_mutex_key#7){++++}-{3:3}, at: inode_lock include/linux/fs.h:782 [inline]
     #1: ffff8880215e3488 (&sb->s_type->i_mutex_key#7){++++}-{3:3}, at: do_truncate+0x1cf/0x2c0 fs/open.c:62
     #2: ffff8880215e3310 (&ei->i_mmap_sem){++++}-{3:3}, at: ext4_setattr+0xec4/0x19c0 fs/ext4/inode.c:5519
     #3: ffff8880215e3278 (&ei->i_data_sem/3){++++}-{3:3}, at: ext4_setattr+0x136d/0x19c0 fs/ext4/inode.c:5559
     #4: ffff8880215e30c8 (&ei->xattr_sem){++++}-{3:3}, at: ext4_write_trylock_xattr fs/ext4/xattr.h:162 [inline]
     #4: ffff8880215e30c8 (&ei->xattr_sem){++++}-{3:3}, at: ext4_try_to_expand_extra_isize fs/ext4/inode.c:5938 [inline]
     #4: ffff8880215e30c8 (&ei->xattr_sem){++++}-{3:3}, at: __ext4_mark_inode_dirty+0x4fb/0x810 fs/ext4/inode.c:6018
    
    stack backtrace:
    CPU: 1 PID: 2794 Comm: syz-executor543 Not tainted 5.10.0-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
    Call Trace:
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0x177/0x211 lib/dump_stack.c:118
     print_circular_bug+0x146/0x1b0 kernel/locking/lockdep.c:2002
     check_noncircular+0x2cc/0x390 kernel/locking/lockdep.c:2123
     check_prev_add kernel/locking/lockdep.c:2988 [inline]
     check_prevs_add kernel/locking/lockdep.c:3113 [inline]
     validate_chain+0x1695/0x58f0 kernel/locking/lockdep.c:3729
     __lock_acquire+0x12fd/0x20d0 kernel/locking/lockdep.c:4955
     lock_acquire+0x197/0x480 kernel/locking/lockdep.c:5566
     down_write+0x93/0x180 kernel/locking/rwsem.c:1564
     inode_lock include/linux/fs.h:782 [inline]
     ext4_xattr_inode_iget+0x42a/0x5c0 fs/ext4/xattr.c:425
     ext4_xattr_inode_get+0x138/0x410 fs/ext4/xattr.c:485
     ext4_xattr_move_to_block fs/ext4/xattr.c:2580 [inline]
     ext4_xattr_make_inode_space fs/ext4/xattr.c:2682 [inline]
     ext4_expand_extra_isize_ea+0xe70/0x1bb0 fs/ext4/xattr.c:2774
     __ext4_expand_extra_isize+0x304/0x3f0 fs/ext4/inode.c:5898
     ext4_try_to_expand_extra_isize fs/ext4/inode.c:5941 [inline]
     __ext4_mark_inode_dirty+0x591/0x810 fs/ext4/inode.c:6018
     ext4_setattr+0x1400/0x19c0 fs/ext4/inode.c:5562
     notify_change+0xbb6/0xe60 fs/attr.c:435
     do_truncate+0x1de/0x2c0 fs/open.c:64
     handle_truncate fs/namei.c:2970 [inline]
     do_open fs/namei.c:3311 [inline]
     path_openat+0x29f3/0x3290 fs/namei.c:3425
     do_filp_open+0x20b/0x450 fs/namei.c:3452
     do_sys_openat2+0x124/0x460 fs/open.c:1207
     do_sys_open fs/open.c:1223 [inline]
     __do_sys_open fs/open.c:1231 [inline]
     __se_sys_open fs/open.c:1227 [inline]
     __x64_sys_open+0x221/0x270 fs/open.c:1227
     do_syscall_64+0x6d/0xa0 arch/x86/entry/common.c:62
     entry_SYSCALL_64_after_hwframe+0x61/0xcb
    RIP: 0033:0x7f0cde4ea229
    Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 21 18 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffd81d1c978 EFLAGS: 00000246 ORIG_RAX: 0000000000000002
    RAX: ffffffffffffffda RBX: 0030656c69662f30 RCX: 00007f0cde4ea229
    RDX: 0000000000000089 RSI: 00000000000a0a00 RDI: 00000000200001c0
    RBP: 2f30656c69662f2e R08: 0000000000208000 R09: 0000000000208000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffd81d1c9c0
    R13: 00007ffd81d1ca00 R14: 0000000000080000 R15: 0000000000000003
    EXT4-fs error (device loop0): ext4_expand_extra_isize_ea:2730: inode #13: comm syz-executor543: corrupted in-inode xattr
    
    Signed-off-by: Wojciech Gładysz <wojciech.gladysz@infogain.com>
    Link: https://patch.msgid.link/20240801143827.19135-1-wojciech.gladysz@infogain.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: no need to continue when the number of entries is 1 [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Mon Jul 1 22:25:03 2024 +0800

    ext4: no need to continue when the number of entries is 1
    
    commit 1a00a393d6a7fb1e745a41edd09019bd6a0ad64c upstream.
    
    Fixes: ac27a0ec112a ("[PATCH] ext4: initial copy of files from ext3")
    Reported-by: syzbot+ae688d469e36fb5138d0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=ae688d469e36fb5138d0
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Reported-and-tested-by: syzbot+ae688d469e36fb5138d0@syzkaller.appspotmail.com
    Link: https://patch.msgid.link/tencent_BE7AEE6C7C2D216CB8949CE8E6EE7ECC2C0A@qq.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: propagate errors from ext4_find_extent() in ext4_insert_range() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:30 2024 +0800

    ext4: propagate errors from ext4_find_extent() in ext4_insert_range()
    
    commit 369c944ed1d7c3fb7b35f24e4735761153afe7b3 upstream.
    
    Even though ext4_find_extent() returns an error, ext4_insert_range() still
    returns 0. This may confuse the user as to why fallocate returns success,
    but the contents of the file are not as expected. So propagate the error
    returned by ext4_find_extent() to avoid inconsistencies.
    
    Fixes: 331573febb6a ("ext4: Add support FALLOC_FL_INSERT_RANGE for fallocate")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-11-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: properly sync file size update after O_SYNC direct IO [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Fri Oct 13 14:13:50 2023 +0200

    ext4: properly sync file size update after O_SYNC direct IO
    
    [ Upstream commit 91562895f8030cb9a0470b1db49de79346a69f91 ]
    
    Gao Xiang has reported that on ext4 O_SYNC direct IO does not properly
    sync file size update and thus if we crash at unfortunate moment, the
    file can have smaller size although O_SYNC IO has reported successful
    completion. The problem happens because update of on-disk inode size is
    handled in ext4_dio_write_iter() *after* iomap_dio_rw() (and thus
    dio_complete() in particular) has returned and generic_file_sync() gets
    called by dio_complete(). Fix the problem by handling on-disk inode size
    update directly in our ->end_io completion handler.
    
    References: https://lore.kernel.org/all/02d18236-26ef-09b0-90ad-030c4fe3ee20@linux.alibaba.com
    Reported-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    CC: stable@vger.kernel.org
    Fixes: 378f32bab371 ("ext4: introduce direct I/O write using iomap infrastructure")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Tested-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reviewed-by: "Ritesh Harjani (IBM)" <ritesh.list@gmail.com>
    Link: https://lore.kernel.org/r/20231013121350.26872-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: dda898d7ffe8 ("ext4: dax: fix overflowing extents beyond inode size when partially writing")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: return error on ext4_find_inline_entry [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Wed Aug 21 12:23:22 2024 -0300

    ext4: return error on ext4_find_inline_entry
    
    [ Upstream commit 4d231b91a944f3cab355fce65af5871fb5d7735b ]
    
    In case of errors when reading an inode from disk or traversing inline
    directory entries, return an error-encoded ERR_PTR instead of returning
    NULL. ext4_find_inline_entry only caller, __ext4_find_entry already returns
    such encoded errors.
    
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Link: https://patch.msgid.link/20240821152324.3621860-3-cascardo@igalia.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: c6b72f5d82b1 ("ext4: avoid OOB when system.data xattr changes underneath the filesystem")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: update orig_path in ext4_find_extent() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:25 2024 +0800

    ext4: update orig_path in ext4_find_extent()
    
    commit 5b4b2dcace35f618fe361a87bae6f0d13af31bc1 upstream.
    
    In ext4_find_extent(), if the path is not big enough, we free it and set
    *orig_path to NULL. But after reallocating and successfully initializing
    the path, we don't update *orig_path, in which case the caller gets a
    valid path but a NULL ppath, and this may cause a NULL pointer dereference
    or a path memory leak. For example:
    
    ext4_split_extent
      path = *ppath = 2000
      ext4_find_extent
        if (depth > path[0].p_maxdepth)
          kfree(path = 2000);
          *orig_path = path = NULL;
          path = kcalloc() = 3000
      ext4_split_extent_at(*ppath = NULL)
        path = *ppath;
        ex = path[depth].p_ext;
        // NULL pointer dereference!
    
    ==================================================================
    BUG: kernel NULL pointer dereference, address: 0000000000000010
    CPU: 6 UID: 0 PID: 576 Comm: fsstress Not tainted 6.11.0-rc2-dirty #847
    RIP: 0010:ext4_split_extent_at+0x6d/0x560
    Call Trace:
     <TASK>
     ext4_split_extent.isra.0+0xcb/0x1b0
     ext4_ext_convert_to_initialized+0x168/0x6c0
     ext4_ext_handle_unwritten_extents+0x325/0x4d0
     ext4_ext_map_blocks+0x520/0xdb0
     ext4_map_blocks+0x2b0/0x690
     ext4_iomap_begin+0x20e/0x2c0
    [...]
    ==================================================================
    
    Therefore, *orig_path is updated when the extent lookup succeeds, so that
    the caller can safely use path or *ppath.
    
    Fixes: 10809df84a4d ("ext4: teach ext4_ext_find_extent() to realloc path if necessary")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240822023545.1994557-6-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: use handle to mark fc as ineligible in __track_dentry_update() [+ + +]
Author: Luis Henriques (SUSE) <luis.henriques@linux.dev>
Date:   Mon Sep 23 11:49:08 2024 +0100

    ext4: use handle to mark fc as ineligible in __track_dentry_update()
    
    commit faab35a0370fd6e0821c7a8dd213492946fc776f upstream.
    
    Calling ext4_fc_mark_ineligible() with a NULL handle is racy and may result
    in a fast-commit being done before the filesystem is effectively marked as
    ineligible.  This patch fixes the calls to this function in
    __track_dentry_update() by adding an extra parameter to the callback used in
    ext4_fc_track_template().
    
    Suggested-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Luis Henriques (SUSE) <luis.henriques@linux.dev>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240923104909.18342-2-luis.henriques@linux.dev
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
f2fs: avoid potential int overflow in sanity_check_area_boundary() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Wed Jul 24 10:51:58 2024 -0700

    f2fs: avoid potential int overflow in sanity_check_area_boundary()
    
    commit 50438dbc483ca6a133d2bce9d5d6747bcee38371 upstream.
    
    While calculating the end addresses of main area and segment 0, u32
    may be not enough to hold the result without the danger of int
    overflow.
    
    Just in case, play it safe and cast one of the operands to a
    wider type (u64).
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: fd694733d523 ("f2fs: cover large section in sanity check of super")
    Cc: stable@vger.kernel.org
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: clean up w/ dotdot_name [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Thu Nov 16 14:25:54 2023 +0800

    f2fs: clean up w/ dotdot_name
    
    [ Upstream commit ff6584ac2c4b4ee8e1fca20bffaaa387d8fe2974 ]
    
    Just cleanup, no logic changes.
    
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Stable-dep-of: 884ee6dc85b9 ("f2fs: get rid of online repaire on corrupted directory")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: fix to update i_ctime in __f2fs_setxattr() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Wed Jul 19 21:50:45 2023 +0800

    f2fs: fix to update i_ctime in __f2fs_setxattr()
    
    [ Upstream commit 8874ad7dae8d91d24cc87c545c0073b3b2da5688 ]
    
    generic/728       - output mismatch (see /media/fstests/results//generic/728.out.bad)
        --- tests/generic/728.out   2023-07-19 07:10:48.362711407 +0000
        +++ /media/fstests/results//generic/728.out.bad     2023-07-19 08:39:57.000000000 +0000
         QA output created by 728
        +Expected ctime to change after setxattr.
        +Expected ctime to change after removexattr.
         Silence is golden
        ...
        (Run 'diff -u /media/fstests/tests/generic/728.out /media/fstests/results//generic/728.out.bad'  to see the entire diff)
    generic/729        1s
    
    It needs to update i_ctime after {set,remove}xattr, fix it.
    
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Stable-dep-of: aaf8c0b9ae04 ("f2fs: reduce expensive checkpoint trigger frequency")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: fix to wait page writeback before setting gcing flag [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Mon Aug 12 22:12:42 2024 +0800

    f2fs: fix to wait page writeback before setting gcing flag
    
    [ Upstream commit a4d7f2b3238fd5f76b9e6434a0bd5d2e29049cff ]
    
    Soft IRQ                                Thread
    - f2fs_write_end_io
                                            - f2fs_defragment_range
                                             - set_page_private_gcing
     - type = WB_DATA_TYPE(page, false);
     : assign type w/ F2FS_WB_CP_DATA
     due to page_private_gcing() is true
      - dec_page_count() w/ wrong type
      - end_page_writeback()
    
    Value of F2FS_WB_CP_DATA reference count may become negative under above
    race condition, the root cause is we missed to wait page writeback before
    setting gcing page private flag, let's fix it.
    
    Fixes: 2d1fe8a86bf5 ("f2fs: fix to tag gcing flag on page during file defragment")
    Fixes: 4961acdd65c9 ("f2fs: fix to tag gcing flag on page during block migration")
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: fix typo [+ + +]
Author: Yonggil Song <yonggil.song@samsung.com>
Date:   Fri Sep 2 11:07:49 2022 +0900

    f2fs: fix typo
    
    [ Upstream commit d382e36970ecf8242921400db2afde15fb6ed49e ]
    
    Fix typo in f2fs.h
    Detected by Jaeyoon Choi
    
    Signed-off-by: Yonggil Song <yonggil.song@samsung.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Stable-dep-of: aaf8c0b9ae04 ("f2fs: reduce expensive checkpoint trigger frequency")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: get rid of online repaire on corrupted directory [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Fri Sep 6 14:27:24 2024 +0800

    f2fs: get rid of online repaire on corrupted directory
    
    [ Upstream commit 884ee6dc85b959bc152f15bca80c30f06069e6c4 ]
    
    syzbot reports a f2fs bug as below:
    
    kernel BUG at fs/f2fs/inode.c:896!
    RIP: 0010:f2fs_evict_inode+0x1598/0x15c0 fs/f2fs/inode.c:896
    Call Trace:
     evict+0x532/0x950 fs/inode.c:704
     dispose_list fs/inode.c:747 [inline]
     evict_inodes+0x5f9/0x690 fs/inode.c:797
     generic_shutdown_super+0x9d/0x2d0 fs/super.c:627
     kill_block_super+0x44/0x90 fs/super.c:1696
     kill_f2fs_super+0x344/0x690 fs/f2fs/super.c:4898
     deactivate_locked_super+0xc4/0x130 fs/super.c:473
     cleanup_mnt+0x41f/0x4b0 fs/namespace.c:1373
     task_work_run+0x24f/0x310 kernel/task_work.c:228
     ptrace_notify+0x2d2/0x380 kernel/signal.c:2402
     ptrace_report_syscall include/linux/ptrace.h:415 [inline]
     ptrace_report_syscall_exit include/linux/ptrace.h:477 [inline]
     syscall_exit_work+0xc6/0x190 kernel/entry/common.c:173
     syscall_exit_to_user_mode_prepare kernel/entry/common.c:200 [inline]
     __syscall_exit_to_user_mode_work kernel/entry/common.c:205 [inline]
     syscall_exit_to_user_mode+0x279/0x370 kernel/entry/common.c:218
     do_syscall_64+0x100/0x230 arch/x86/entry/common.c:89
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0010:f2fs_evict_inode+0x1598/0x15c0 fs/f2fs/inode.c:896
    
    Online repaire on corrupted directory in f2fs_lookup() can generate
    dirty data/meta while racing w/ readonly remount, it may leave dirty
    inode after filesystem becomes readonly, however, checkpoint() will
    skips flushing dirty inode in a state of readonly mode, result in
    above panic.
    
    Let's get rid of online repaire in f2fs_lookup(), and leave the work
    to fsck.f2fs.
    
    Fixes: 510022a85839 ("f2fs: add F2FS_INLINE_DOTS to recover missing dot dentries")
    Reported-by: syzbot+ebea2790904673d7c618@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/000000000000a7b20f061ff2d56a@google.com
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: introduce F2FS_IPU_HONOR_OPU_WRITE ipu policy [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Fri Feb 4 15:19:46 2022 +0800

    f2fs: introduce F2FS_IPU_HONOR_OPU_WRITE ipu policy
    
    [ Upstream commit 1018a5463a063715365784704c4e8cdf2eec4b04 ]
    
    Once F2FS_IPU_FORCE policy is enabled in some cases:
    a) f2fs forces to use F2FS_IPU_FORCE in a small-sized volume
    b) user sets F2FS_IPU_FORCE policy via sysfs
    
    Then we may fail to defragment file due to IPU policy check, it doesn't
    make sense, let's introduce a new IPU policy to allow OPU during file
    defragmentation.
    
    In small-sized volume, let's enable F2FS_IPU_HONOR_OPU_WRITE policy
    by default.
    
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Stable-dep-of: 884ee6dc85b9 ("f2fs: get rid of online repaire on corrupted directory")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: optimize error handling in redirty_blocks [+ + +]
Author: Jack Qiu <jack.qiu@huawei.com>
Date:   Tue May 31 09:16:56 2022 +0800

    f2fs: optimize error handling in redirty_blocks
    
    [ Upstream commit a4a0e16dbf77582c4f58ab472229dd071b5c4260 ]
    
    Current error handling is at risk of page leaks. However, we dot't seek
    any failure scenarios, just use f2fs_bug_on.
    
    Signed-off-by: Jack Qiu <jack.qiu@huawei.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Stable-dep-of: a4d7f2b3238f ("f2fs: fix to wait page writeback before setting gcing flag")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: prevent possible int overflow in dir_block_index() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Wed Jul 24 10:05:44 2024 -0700

    f2fs: prevent possible int overflow in dir_block_index()
    
    commit 47f268f33dff4a5e31541a990dc09f116f80e61c upstream.
    
    The result of multiplication between values derived from functions
    dir_buckets() and bucket_blocks() *could* technically reach
    2^30 * 2^2 = 2^32.
    
    While unlikely to happen, it is prudent to ensure that it will not
    lead to integer overflow. Thus, use mul_u32_u32() as it's more
    appropriate to mitigate the issue.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: 3843154598a0 ("f2fs: introduce large directory support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: reduce expensive checkpoint trigger frequency [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Wed Jun 26 09:47:27 2024 +0800

    f2fs: reduce expensive checkpoint trigger frequency
    
    [ Upstream commit aaf8c0b9ae042494cb4585883b15c1332de77840 ]
    
    We may trigger high frequent checkpoint for below case:
    1. mkdir /mnt/dir1; set dir1 encrypted
    2. touch /mnt/file1; fsync /mnt/file1
    3. mkdir /mnt/dir2; set dir2 encrypted
    4. touch /mnt/file2; fsync /mnt/file2
    ...
    
    Although, newly created dir and file are not related, due to
    commit bbf156f7afa7 ("f2fs: fix lost xattrs of directories"), we will
    trigger checkpoint whenever fsync() comes after a new encrypted dir
    created.
    
    In order to avoid such performance regression issue, let's record an
    entry including directory's ino in global cache whenever we update
    directory's xattr data, and then triggerring checkpoint() only if
    xattr metadata of target file's parent was updated.
    
    This patch updates to cover below no encryption case as well:
    1) parent is checkpointed
    2) set_xattr(dir) w/ new xnid
    3) create(file)
    4) fsync(file)
    
    Fixes: bbf156f7afa7 ("f2fs: fix lost xattrs of directories")
    Reported-by: wangzijie <wangzijie1@honor.com>
    Reported-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
    Tested-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
    Reported-by: Yunlei He <heyunlei@hihonor.com>
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: remove unneeded check condition in __f2fs_setxattr() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Wed Jul 19 21:50:46 2023 +0800

    f2fs: remove unneeded check condition in __f2fs_setxattr()
    
    [ Upstream commit bc3994ffa4cf23f55171943c713366132c3ff45d ]
    
    It has checked return value of write_all_xattrs(), remove unneeded
    following check condition.
    
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Stable-dep-of: aaf8c0b9ae04 ("f2fs: reduce expensive checkpoint trigger frequency")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: Require FMODE_WRITE for atomic write ioctls [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Fri Oct 4 19:35:57 2024 +0000

    f2fs: Require FMODE_WRITE for atomic write ioctls
    
    commit 4f5a100f87f32cb65d4bb1ad282a08c92f6f591e upstream.
    
    The F2FS ioctls for starting and committing atomic writes check for
    inode_owner_or_capable(), but this does not give LSMs like SELinux or
    Landlock an opportunity to deny the write access - if the caller's FSUID
    matches the inode's UID, inode_owner_or_capable() immediately returns true.
    
    There are scenarios where LSMs want to deny a process the ability to write
    particular files, even files that the FSUID of the process owns; but this
    can currently partially be bypassed using atomic write ioctls in two ways:
    
     - F2FS_IOC_START_ATOMIC_REPLACE + F2FS_IOC_COMMIT_ATOMIC_WRITE can
       truncate an inode to size 0
     - F2FS_IOC_START_ATOMIC_WRITE + F2FS_IOC_ABORT_ATOMIC_WRITE can revert
       changes another process concurrently made to a file
    
    Fix it by requiring FMODE_WRITE for these operations, just like for
    F2FS_IOC_MOVE_RANGE. Since any legitimate caller should only be using these
    ioctls when intending to write into the file, that seems unlikely to break
    anything.
    
    Fixes: 88b88a667971 ("f2fs: support atomic writes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jann Horn <jannh@google.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Reviewed-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbdev: hpfb: Fix an error handling path in hpfb_dio_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Thu Aug 1 22:34:39 2024 +0200

    fbdev: hpfb: Fix an error handling path in hpfb_dio_probe()
    
    [ Upstream commit aa578e897520f32ae12bec487f2474357d01ca9c ]
    
    If an error occurs after request_mem_region(), a corresponding
    release_mem_region() should be called, as already done in the remove
    function.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: pxafb: Fix possible use after free in pxafb_task() [+ + +]
Author: Kaixin Wang <kxwang23@m.fudan.edu.cn>
Date:   Wed Sep 11 22:29:52 2024 +0800

    fbdev: pxafb: Fix possible use after free in pxafb_task()
    
    [ Upstream commit 4a6921095eb04a900e0000da83d9475eb958e61e ]
    
    In the pxafb_probe function, it calls the pxafb_init_fbinfo function,
    after which &fbi->task is associated with pxafb_task. Moreover,
    within this pxafb_init_fbinfo function, the pxafb_blank function
    within the &pxafb_ops struct is capable of scheduling work.
    
    If we remove the module which will call pxafb_remove to make cleanup,
    it will call unregister_framebuffer function which can call
    do_unregister_framebuffer to free fbi->fb through
    put_fb_info(fb_info), while the work mentioned above will be used.
    The sequence of operations that may lead to a UAF bug is as follows:
    
    CPU0                                                CPU1
    
                                       | pxafb_task
    pxafb_remove                       |
    unregister_framebuffer(info)       |
    do_unregister_framebuffer(fb_info) |
    put_fb_info(fb_info)               |
    // free fbi->fb                    | set_ctrlr_state(fbi, state)
                                       | __pxafb_lcd_power(fbi, 0)
                                       | fbi->lcd_power(on, &fbi->fb.var)
                                       | //use fbi->fb
    
    Fix it by ensuring that the work is canceled before proceeding
    with the cleanup in pxafb_remove.
    
    Note that only root user can remove the driver at runtime.
    
    Signed-off-by: Kaixin Wang <kxwang23@m.fudan.edu.cn>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: sisfb: Fix strbuf array overflow [+ + +]
Author: Andrey Shumilin <shum.sdl@nppct.ru>
Date:   Fri Sep 27 22:34:24 2024 +0300

    fbdev: sisfb: Fix strbuf array overflow
    
    [ Upstream commit 9cf14f5a2746c19455ce9cb44341b5527b5e19c3 ]
    
    The values of the variables xres and yres are placed in strbuf.
    These variables are obtained from strbuf1.
    The strbuf1 array contains digit characters
    and a space if the array contains non-digit characters.
    Then, when executing sprintf(strbuf, "%ux%ux8", xres, yres);
    more than 16 bytes will be written to strbuf.
    It is suggested to increase the size of the strbuf array to 24.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Signed-off-by: Andrey Shumilin <shum.sdl@nppct.ru>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: tegra: bpmp: Drop unused mbox_client_to_bpmp() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Fri Aug 16 15:57:21 2024 +0200

    firmware: tegra: bpmp: Drop unused mbox_client_to_bpmp()
    
    commit 9c3a62c20f7fb00294a4237e287254456ba8a48b upstream.
    
    mbox_client_to_bpmp() is not used, W=1 builds:
    
      drivers/firmware/tegra/bpmp.c:28:1: error: unused function 'mbox_client_to_bpmp' [-Werror,-Wunused-function]
    
    Fixes: cdfa358b248e ("firmware: tegra: Refactor BPMP driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware_loader: Block path traversal [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Aug 28 01:45:48 2024 +0200

    firmware_loader: Block path traversal
    
    commit f0e5311aa8022107d63c54e2f03684ec097d1394 upstream.
    
    Most firmware names are hardcoded strings, or are constructed from fairly
    constrained format strings where the dynamic parts are just some hex
    numbers or such.
    
    However, there are a couple codepaths in the kernel where firmware file
    names contain string components that are passed through from a device or
    semi-privileged userspace; the ones I could find (not counting interfaces
    that require root privileges) are:
    
     - lpfc_sli4_request_firmware_update() seems to construct the firmware
       filename from "ModelName", a string that was previously parsed out of
       some descriptor ("Vital Product Data") in lpfc_fill_vpd()
     - nfp_net_fw_find() seems to construct a firmware filename from a model
       name coming from nfp_hwinfo_lookup(pf->hwinfo, "nffw.partno"), which I
       think parses some descriptor that was read from the device.
       (But this case likely isn't exploitable because the format string looks
       like "netronome/nic_%s", and there shouldn't be any *folders* starting
       with "netronome/nic_". The previous case was different because there,
       the "%s" is *at the start* of the format string.)
     - module_flash_fw_schedule() is reachable from the
       ETHTOOL_MSG_MODULE_FW_FLASH_ACT netlink command, which is marked as
       GENL_UNS_ADMIN_PERM (meaning CAP_NET_ADMIN inside a user namespace is
       enough to pass the privilege check), and takes a userspace-provided
       firmware name.
       (But I think to reach this case, you need to have CAP_NET_ADMIN over a
       network namespace that a special kind of ethernet device is mapped into,
       so I think this is not a viable attack path in practice.)
    
    Fix it by rejecting any firmware names containing ".." path components.
    
    For what it's worth, I went looking and haven't found any USB device
    drivers that use the firmware loader dangerously.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Danilo Krummrich <dakr@kernel.org>
    Fixes: abb139e75c2c ("firmware: teach the kernel to load firmware files directly from the filesystem")
    Signed-off-by: Jann Horn <jannh@google.com>
    Acked-by: Luis Chamberlain <mcgrof@kernel.org>
    Link: https://lore.kernel.org/r/20240828-firmware-traversal-v3-1-c76529c63b5f@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fou: fix initialization of grc [+ + +]
Author: Muhammad Usama Anjum <usama.anjum@collabora.com>
Date:   Fri Sep 6 15:28:39 2024 +0500

    fou: fix initialization of grc
    
    [ Upstream commit 4c8002277167125078e6b9b90137bdf443ebaa08 ]
    
    The grc must be initialize first. There can be a condition where if
    fou is NULL, goto out will be executed and grc would be used
    uninitialized.
    
    Fixes: 7e4196935069 ("fou: Fix null-ptr-deref in GRO.")
    Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20240906102839.202798-1-usama.anjum@collabora.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/namespace: fnic: Switch to use %ptTd [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Mar 14 17:09:06 2023 +0200

    fs/namespace: fnic: Switch to use %ptTd
    
    [ Upstream commit 74e60b8b2f0fe3702710e648a31725ee8224dbdf ]
    
    Use %ptTd instead of open-coded variant to print contents
    of time64_t type in human readable form.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
    Stable-dep-of: 4bcda1eaf184 ("mount: handle OOM on mnt_warn_timestamp_expiry")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/ntfs3: Refactor enum_rstbl to suppress static checker [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Tue Jul 23 16:51:18 2024 +0300

    fs/ntfs3: Refactor enum_rstbl to suppress static checker
    
    [ Upstream commit 56c16d5459d5c050a97a138a00a82b105a8e0a66 ]
    
    Comments and brief description of function enum_rstbl added.
    
    Fixes: b46acd6a6a62 ("fs/ntfs3: Add NTFS journal")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Use kvfree to free memory allocated by kvmalloc [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Tue Jan 16 10:32:20 2024 +0300

    fs/ntfs3: Use kvfree to free memory allocated by kvmalloc
    
    commit ddb17dc880eeaac37b5a6e984de07b882de7d78d upstream.
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs: explicitly unregister per-superblock BDIs [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Fri Nov 5 13:36:58 2021 -0700

    fs: explicitly unregister per-superblock BDIs
    
    [ Upstream commit 0b3ea0926afb8dde70cfab00316ae0a70b93a7cc ]
    
    Add a new SB_I_ flag to mark superblocks that have an ephemeral bdi
    associated with them, and unregister it when the superblock is shut
    down.
    
    Link: https://lkml.kernel.org/r/20211021124441.668816-4-hch@lst.de
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: Miquel Raynal <miquel.raynal@bootlin.com>
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Vignesh Raghavendra <vigneshr@ti.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Stable-dep-of: 4bcda1eaf184 ("mount: handle OOM on mnt_warn_timestamp_expiry")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs: Fix file_set_fowner LSM hook inconsistencies [+ + +]
Author: Mickaël Salaün <mic@digikod.net>
Date:   Wed Aug 21 11:56:05 2024 +0200

    fs: Fix file_set_fowner LSM hook inconsistencies
    
    commit 26f204380a3c182e5adf1a798db0724d6111b597 upstream.
    
    The fcntl's F_SETOWN command sets the process that handle SIGIO/SIGURG
    for the related file descriptor.  Before this change, the
    file_set_fowner LSM hook was always called, ignoring the VFS logic which
    may not actually change the process that handles SIGIO (e.g. TUN, TTY,
    dnotify), nor update the related UID/EUID.
    
    Moreover, because security_file_set_fowner() was called without lock
    (e.g. f_owner.lock), concurrent F_SETOWN commands could result to a race
    condition and inconsistent LSM states (e.g. SELinux's fown_sid) compared
    to struct fown_struct's UID/EUID.
    
    This change makes sure the LSM states are always in sync with the VFS
    state by moving the security_file_set_fowner() call close to the
    UID/EUID updates and using the same f_owner.lock .
    
    Rename f_modown() to __f_setown() to simplify code.
    
    Cc: stable@vger.kernel.org
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Casey Schaufler <casey@schaufler-ca.com>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: James Morris <jmorris@namei.org>
    Cc: Jann Horn <jannh@google.com>
    Cc: Ondrej Mosnacek <omosnace@redhat.com>
    Cc: Paul Moore <paul@paul-moore.com>
    Cc: Serge E. Hallyn <serge@hallyn.com>
    Cc: Stephen Smalley <stephen.smalley.work@gmail.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Mickaël Salaün <mic@digikod.net>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
geneve: Fix incorrect inner network header offset when innerprotoinherit is set [+ + +]
Author: Gal Pressman <gal@nvidia.com>
Date:   Thu Jun 6 23:32:48 2024 +0300

    geneve: Fix incorrect inner network header offset when innerprotoinherit is set
    
    [ Upstream commit c6ae073f5903f6c6439d0ac855836a4da5c0a701 ]
    
    When innerprotoinherit is set, the tunneled packets do not have an inner
    Ethernet header.
    Change 'maclen' to not always assume the header length is ETH_HLEN, as
    there might not be a MAC header.
    
    This resolves issues with drivers (e.g. mlx5, in
    mlx5e_tx_tunnel_accel()) who rely on the skb inner network header offset
    to be correct, and use it for TX offloads.
    
    Fixes: d8a6213d70ac ("geneve: fix header validation in geneve[6]_xmit_skb")
    Signed-off-by: Gal Pressman <gal@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: c471236b2359 ("bareudp: Pull inner IP header on xmit.")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpio: aspeed: Add the flush write to ensure the write complete. [+ + +]
Author: Billy Tsai <billy_tsai@aspeedtech.com>
Date:   Tue Oct 8 16:14:44 2024 +0800

    gpio: aspeed: Add the flush write to ensure the write complete.
    
    [ Upstream commit 1bb5a99e1f3fd27accb804aa0443a789161f843c ]
    
    Performing a dummy read ensures that the register write operation is fully
    completed, mitigating any potential bus delays that could otherwise impact
    the frequency of bitbang usage. E.g., if the JTAG application uses GPIO to
    control the JTAG pins (TCK, TMS, TDI, TDO, and TRST), and the application
    sets the TCK clock to 1 MHz, the GPIO's high/low transitions will rely on
    a delay function to ensure the clock frequency does not exceed 1 MHz.
    However, this can lead to rapid toggling of the GPIO because the write
    operation is POSTed and does not wait for a bus acknowledgment.
    
    Fixes: 361b79119a4b ("gpio: Add Aspeed driver")
    Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au>
    Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com>
    Link: https://lore.kernel.org/r/20241008081450.1490955-2-billy_tsai@aspeedtech.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: aspeed: Use devm_clk api to manage clock source [+ + +]
Author: Billy Tsai <billy_tsai@aspeedtech.com>
Date:   Tue Oct 8 16:14:45 2024 +0800

    gpio: aspeed: Use devm_clk api to manage clock source
    
    [ Upstream commit a6191a3d18119184237f4ee600039081ad992320 ]
    
    Replace of_clk_get with devm_clk_get_enabled to manage the clock source.
    
    Fixes: 5ae4cb94b313 ("gpio: aspeed: Add debounce support")
    Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au>
    Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com>
    Link: https://lore.kernel.org/r/20241008081450.1490955-3-billy_tsai@aspeedtech.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: davinci: fix lazy disable [+ + +]
Author: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
Date:   Wed Aug 28 15:32:07 2024 +0200

    gpio: davinci: fix lazy disable
    
    commit 3360d41f4ac490282fddc3ccc0b58679aa5c065d upstream.
    
    On a few platforms such as TI's AM69 device, disable_irq() fails to keep
    track of the interrupts that happen between disable_irq() and
    enable_irq() and those interrupts are missed. Use the ->irq_unmask() and
    ->irq_mask() methods instead of ->irq_enable() and ->irq_disable() to
    correctly keep track of edges when disable_irq is called.
    
    This solves the issue of disable_irq() not working as expected on such
    platforms.
    
    Fixes: 23265442b02b ("ARM: davinci: irq_data conversion.")
    Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
    Signed-off-by: Parth Pancholi <parth.pancholi@toradex.com>
    Acked-by: Keerthy <j-keerthy@ti.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240828133207.493961-1-parth105105@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gpio: prevent potential speculation leaks in gpio_device_get_desc() [+ + +]
Author: Hagar Hemdan <hagarhem@amazon.com>
Date:   Thu May 23 08:53:32 2024 +0000

    gpio: prevent potential speculation leaks in gpio_device_get_desc()
    
    commit d795848ecce24a75dfd46481aee066ae6fe39775 upstream.
    
    Userspace may trigger a speculative read of an address outside the gpio
    descriptor array.
    Users can do that by calling gpio_ioctl() with an offset out of range.
    Offset is copied from user and then used as an array index to get
    the gpio descriptor without sanitization in gpio_device_get_desc().
    
    This change ensures that the offset is sanitized by using
    array_index_nospec() to mitigate any possibility of speculative
    information leaks.
    
    This bug was discovered and resolved using Coverity Static Analysis
    Security Testing (SAST) by Synopsys, Inc.
    
    Signed-off-by: Hagar Hemdan <hagarhem@amazon.com>
    Link: https://lore.kernel.org/r/20240523085332.1801-1-hagarhem@amazon.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Hugo SIMELIERE <hsimeliere.opensource@witekio.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpiolib: cdev: Ignore reconfiguration without direction [+ + +]
Author: Kent Gibson <warthog618@gmail.com>
Date:   Wed Jun 26 13:29:23 2024 +0800

    gpiolib: cdev: Ignore reconfiguration without direction
    
    commit b440396387418fe2feaacd41ca16080e7a8bc9ad upstream.
    
    linereq_set_config() behaves badly when direction is not set.
    The configuration validation is borrowed from linereq_create(), where,
    to verify the intent of the user, the direction must be set to in order to
    effect a change to the electrical configuration of a line. But, when
    applied to reconfiguration, that validation does not allow for the unset
    direction case, making it possible to clear flags set previously without
    specifying the line direction.
    
    Adding to the inconsistency, those changes are not immediately applied by
    linereq_set_config(), but will take effect when the line value is next get
    or set.
    
    For example, by requesting a configuration with no flags set, an output
    line with GPIO_V2_LINE_FLAG_ACTIVE_LOW and GPIO_V2_LINE_FLAG_OPEN_DRAIN
    set could have those flags cleared, inverting the sense of the line and
    changing the line drive to push-pull on the next line value set.
    
    Skip the reconfiguration of lines for which the direction is not set, and
    only reconfigure the lines for which direction is set.
    
    Fixes: a54756cb24ea ("gpiolib: cdev: support GPIO_V2_LINE_SET_CONFIG_IOCTL")
    Signed-off-by: Kent Gibson <warthog618@gmail.com>
    Link: https://lore.kernel.org/r/20240626052925.174272-3-warthog618@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HID: amd_sfh: Switch to device-managed dmam_alloc_coherent() [+ + +]
Author: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
Date:   Wed Oct 9 20:17:57 2024 +0530

    HID: amd_sfh: Switch to device-managed dmam_alloc_coherent()
    
    commit c56f9ecb7fb6a3a90079c19eb4c8daf3bbf514b3 upstream.
    
    Using the device-managed version allows to simplify clean-up in probe()
    error path.
    
    Additionally, this device-managed ensures proper cleanup, which helps to
    resolve memory errors, page faults, btrfs going read-only, and btrfs
    disk corruption.
    
    Fixes: 4b2c53d93a4b ("SFH:Transport Driver to add support of AMD Sensor Fusion Hub (SFH)")
    Tested-by: Chris Hixon <linux-kernel-bugs@hixontech.com>
    Tested-by: Richard <hobbes1069@gmail.com>
    Tested-by: Skyler <skpu@pm.me>
    Reported-by: Chris Hixon <linux-kernel-bugs@hixontech.com>
    Closes: https://lore.kernel.org/all/3b129b1f-8636-456a-80b4-0f6cce0eef63@hixontech.com/
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219331
    Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hid: intel-ish-hid: Fix uninitialized variable 'rv' in ish_fw_xfer_direct_dma [+ + +]
Author: SurajSonawane2415 <surajsonawane0215@gmail.com>
Date:   Fri Oct 4 13:29:44 2024 +0530

    hid: intel-ish-hid: Fix uninitialized variable 'rv' in ish_fw_xfer_direct_dma
    
    commit d41bff05a61fb539f21e9bf0d39fac77f457434e upstream.
    
    Fix the uninitialized symbol 'rv' in the function ish_fw_xfer_direct_dma
    to resolve the following warning from the smatch tool:
    drivers/hid/intel-ish-hid/ishtp-fw-loader.c:714 ish_fw_xfer_direct_dma()
    error: uninitialized symbol 'rv'.
    Initialize 'rv' to 0 to prevent undefined behavior from uninitialized
    access.
    
    Cc: stable@vger.kernel.org
    Fixes: 91b228107da3 ("HID: intel-ish-hid: ISH firmware loader client driver")
    Signed-off-by: SurajSonawane2415 <surajsonawane0215@gmail.com>
    Link: https://patch.msgid.link/20241004075944.44932-1-surajsonawane0215@gmail.com
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HID: multitouch: Add support for GT7868Q [+ + +]
Author: Dmitry Savin <envelsavinds@gmail.com>
Date:   Tue Jul 16 23:27:57 2024 +0100

    HID: multitouch: Add support for GT7868Q
    
    [ Upstream commit c8000deb68365b461b324d68c7ea89d730f0bb85 ]
    
    GT7868Q has incorrect data in the report and needs a fixup.
    The change enables haptic touchpad on Lenovo ThinkBook 13x Gen 4
    and has been tested on the device.
    
    Signed-off-by: Dmitry Savin <envelsavinds@gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: multitouch: Add support for Thinkpad X12 Gen 2 Kbd Portfolio [+ + +]
Author: Vishnu Sankar <vishnuocv@gmail.com>
Date:   Sun Aug 18 16:27:29 2024 +0900

    HID: multitouch: Add support for Thinkpad X12 Gen 2 Kbd Portfolio
    
    [ Upstream commit 65b72ea91a257a5f0cb5a26b01194d3dd4b85298 ]
    
    This applies similar quirks used by previous generation device, so that
    Trackpoint and buttons on the touchpad works.  New USB KBD PID 0x61AE for
    Thinkpad X12 Tab is added.
    
    Signed-off-by: Vishnu Sankar <vishnuocv@gmail.com>
    Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: plantronics: Workaround for an unexcepted opposite volume key [+ + +]
Author: Wade Wang <wade.wang@hp.com>
Date:   Mon Sep 16 16:56:00 2024 +0800

    HID: plantronics: Workaround for an unexcepted opposite volume key
    
    commit 87b696209007b7c4ef7bdfe39ea0253404a43770 upstream.
    
    Some Plantronics headset as the below send an unexcept opposite
    volume key's HID report for each volume key press after 200ms, like
    unecepted Volume Up Key following Volume Down key pressed by user.
    This patch adds a quirk to hid-plantronics for these devices, which
    will ignore the second unexcepted opposite volume key if it happens
    within 220ms from the last one that was handled.
        Plantronics EncorePro 500 Series  (047f:431e)
        Plantronics Blackwire_3325 Series (047f:430c)
    
    The patch was tested on the mentioned model, it shouldn't affect
    other models, however, this quirk might be needed for them too.
    Auto-repeat (when a key is held pressed) is not affected per test
    result.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Wade Wang <wade.wang@hp.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (adm9240) Add missing dependency on REGMAP_I2C [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Wed Oct 2 03:08:08 2024 +0200

    hwmon: (adm9240) Add missing dependency on REGMAP_I2C
    
    [ Upstream commit 14849a2ec175bb8a2280ce20efe002bb19f1e274 ]
    
    This driver requires REGMAP_I2C to be selected in order to get access to
    regmap_config and devm_regmap_init_i2c. Add the missing dependency.
    
    Fixes: df885d912f67 ("hwmon: (adm9240) Convert to regmap")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Message-ID: <20241002-hwmon-select-regmap-v1-1-548d03268934@gmail.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (adt7470) Add missing dependency on REGMAP_I2C [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Wed Oct 2 03:08:09 2024 +0200

    hwmon: (adt7470) Add missing dependency on REGMAP_I2C
    
    [ Upstream commit b6abcc19566509ab4812bd5ae5df46515d0c1d70 ]
    
    This driver requires REGMAP_I2C to be selected in order to get access to
    regmap_config and devm_regmap_init_i2c. Add the missing dependency.
    
    Fixes: ef67959c4253 ("hwmon: (adt7470) Convert to use regmap")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Message-ID: <20241002-hwmon-select-regmap-v1-2-548d03268934@gmail.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (max16065) Fix alarm attributes [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Sun Jul 21 06:41:17 2024 -0700

    hwmon: (max16065) Fix alarm attributes
    
    [ Upstream commit 119abf7d1815f098f7f91ae7abc84324a19943d7 ]
    
    Chips reporting overcurrent alarms report it in the second alarm register.
    That means the second alarm register has to be read, even if the chip only
    supports 8 or fewer ADC channels.
    
    MAX16067 and MAX16068 report undervoltage and overvoltage alarms in
    separate registers. Fold register contents together to report both with
    the existing alarm attribute. This requires actually storing the chip type
    in struct max16065_data. Rename the variable 'chip' to match the variable
    name used in the probe function.
    
    Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Fixes: f5bae2642e3d ("hwmon: Driver for MAX16065 System Manager and compatibles")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (max16065) Fix overflows seen when writing limits [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Thu Jul 18 09:52:01 2024 -0700

    hwmon: (max16065) Fix overflows seen when writing limits
    
    [ Upstream commit 744ec4477b11c42e2c8de9eb8364675ae7a0bd81 ]
    
    Writing large limits resulted in overflows as reported by module tests.
    
    in0_lcrit: Suspected overflow: [max=5538, read 0, written 2147483647]
    in0_crit: Suspected overflow: [max=5538, read 0, written 2147483647]
    in0_min: Suspected overflow: [max=5538, read 0, written 2147483647]
    
    Fix the problem by clamping prior to multiplications and the use of
    DIV_ROUND_CLOSEST, and by using consistent variable types.
    
    Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Fixes: f5bae2642e3d ("hwmon: Driver for MAX16065 System Manager and compatibles")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (max16065) Remove use of i2c_match_id() [+ + +]
Author: Andrew Davis <afd@ti.com>
Date:   Wed Apr 3 15:36:21 2024 -0500

    hwmon: (max16065) Remove use of i2c_match_id()
    
    [ Upstream commit 5a71654b398e3471f0169c266a3587cf09e1200c ]
    
    The function i2c_match_id() is used to fetch the matching ID from
    the i2c_device_id table. This is often used to then retrieve the
    matching driver_data. This can be done in one step with the helper
    i2c_get_match_data().
    
    This helper has a couple other benefits:
     * It doesn't need the i2c_device_id passed in so we do not need
       to have that forward declared, allowing us to remove those or
       move the i2c_device_id table down to its more natural spot
       with the other module info.
     * It also checks for device match data, which allows for OF and
       ACPI based probing. That means we do not have to manually check
       those first and can remove those checks.
    
    Signed-off-by: Andrew Davis <afd@ti.com>
    Link: https://lore.kernel.org/r/20240403203633.914389-20-afd@ti.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 119abf7d1815 ("hwmon: (max16065) Fix alarm attributes")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (ntc_thermistor) fix module autoloading [+ + +]
Author: Yuntao Liu <liuyuntao12@huawei.com>
Date:   Thu Aug 15 08:30:21 2024 +0000

    hwmon: (ntc_thermistor) fix module autoloading
    
    [ Upstream commit b6964d66a07a9003868e428a956949e17ab44d7e ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded
    based on the alias from of_device_id table.
    
    Fixes: 9e8269de100d ("hwmon: (ntc_thermistor) Add DT with IIO support to NTC thermistor driver")
    Signed-off-by: Yuntao Liu <liuyuntao12@huawei.com>
    Message-ID: <20240815083021.756134-1-liuyuntao12@huawei.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2 [+ + +]
Author: Patryk Biel <pbiel7@gmail.com>
Date:   Mon Sep 9 11:30:28 2024 +0200

    hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2
    
    [ Upstream commit 20471071f198c8626dbe3951ac9834055b387844 ]
    
    The current implementation of pmbus_show_boolean assumes that all devices
    support write-back operation of status register to clear pending warnings
    or faults. Since clearing individual bits in the status registers was only
    introduced in PMBus specification 1.2, this operation may not be supported
    by some older devices. This can result in an error while reading boolean
    attributes such as temp1_max_alarm.
    
    Fetch PMBus revision supported by the device and modify pmbus_show_boolean
    so that it only tries to clear individual status bits if the device is
    compliant with PMBus specs >= 1.2. Otherwise clear all fault indicators
    on the current page after a fault status was reported.
    
    Fixes: 35f165f08950a ("hwmon: (pmbus) Clear pmbus fault/warning bits after read")
    Signed-off-by: Patryk Biel <pbiel7@gmail.com>
    Message-ID: <20240909-pmbus-status-reg-clearing-v1-1-f1c0d68c6408@gmail.com>
    [groeck:
     Rewrote description
     Moved revision detection code ahead of clear faults command
     Assigned revision if return value from PMBUS_REVISION command is 0
     Improved return value check from calling _pmbus_write_byte_data()]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (pmbus) Introduce and use write_byte_data callback [+ + +]
Author: Mårten Lindahl <marten.lindahl@axis.com>
Date:   Thu Apr 28 16:40:36 2022 +0200

    hwmon: (pmbus) Introduce and use write_byte_data callback
    
    [ Upstream commit 5de3e13f7f6b496bd7bd9ff4d2b915b7d3e67cda ]
    
    Some of the pmbus core functions uses pmbus_write_byte_data, which does
    not support driver callbacks for chip specific write operations. This
    could potentially influence some specific regulator chips that for
    example need a time delay before each data access.
    
    Lets add support for driver callback with _pmbus_write_byte_data.
    
    Signed-off-by: Mårten Lindahl <marten.lindahl@axis.com>
    Link: https://lore.kernel.org/r/20220428144039.2464667-2-marten.lindahl@axis.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 20471071f198 ("hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Add missing dependency on REGMAP_I2C [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Tue Oct 1 11:37:15 2024 -0700

    hwmon: (tmp513) Add missing dependency on REGMAP_I2C
    
    [ Upstream commit 193bc02c664999581a1f38c152f379fce91afc0c ]
    
    0-day reports:
    
    drivers/hwmon/tmp513.c:162:21: error:
            variable 'tmp51x_regmap_config' has initializer but incomplete type
    162 | static const struct regmap_config tmp51x_regmap_config = {
        |                     ^
    
    struct regmap_config is only available if REGMAP is enabled.
    Add the missing Kconfig dependency to fix the problem.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202410020246.2cTDDx0X-lkp@intel.com/
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Cc: Eric Tremblay <etremblay@distech-controls.com>
    Reviewed-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwrng: bcm2835 - Add missing clk_disable_unprepare in bcm2835_rng_init [+ + +]
Author: Gaosheng Cui <cuigaosheng1@huawei.com>
Date:   Sat Aug 3 14:49:22 2024 +0800

    hwrng: bcm2835 - Add missing clk_disable_unprepare in bcm2835_rng_init
    
    commit d57e2f7cffd57fe2800332dec768ec1b67a4159f upstream.
    
    Add the missing clk_disable_unprepare() before return in
    bcm2835_rng_init().
    
    Fixes: e5f9f41d5e62 ("hwrng: bcm2835 - add reset support")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwrng: cctrng - Add missing clk_disable_unprepare in cctrng_resume [+ + +]
Author: Gaosheng Cui <cuigaosheng1@huawei.com>
Date:   Sat Aug 3 14:49:23 2024 +0800

    hwrng: cctrng - Add missing clk_disable_unprepare in cctrng_resume
    
    commit 4b7acc85de14ee8a2236f54445dc635d47eceac0 upstream.
    
    Add the missing clk_disable_unprepare() before return in
    cctrng_resume().
    
    Fixes: a583ed310bb6 ("hwrng: cctrng - introduce Arm CryptoCell driver")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwrng: mtk - Use devm_pm_runtime_enable [+ + +]
Author: Guoqing Jiang <guoqing.jiang@canonical.com>
Date:   Mon Aug 26 15:04:15 2024 +0800

    hwrng: mtk - Use devm_pm_runtime_enable
    
    commit 78cb66caa6ab5385ac2090f1aae5f3c19e08f522 upstream.
    
    Replace pm_runtime_enable with the devres-enabled version which
    can trigger pm_runtime_disable.
    
    Otherwise, the below appears during reload driver.
    
    mtk_rng 1020f000.rng: Unbalanced pm_runtime_enable!
    
    Fixes: 81d2b34508c6 ("hwrng: mtk - add runtime PM support")
    Cc: <stable@vger.kernel.org>
    Suggested-by: Chen-Yu Tsai <wenst@chromium.org>
    Signed-off-by: Guoqing Jiang <guoqing.jiang@canonical.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i2c: Add i2c_get_match_data() [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Wed Jun 7 17:57:38 2023 +0100

    i2c: Add i2c_get_match_data()
    
    [ Upstream commit 564d73c4d9201526bd976b9379d2aaf1a7133e84 ]
    
    Add i2c_get_match_data() to get match data for I2C, ACPI and
    DT-based matching, so that we can optimize the driver code.
    
    Suggested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    [wsa: simplified var initialization]
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 119abf7d1815 ("hwmon: (max16065) Fix alarm attributes")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: aspeed: Update the stop sw state when the bus recovery occurs [+ + +]
Author: Tommy Huang <tommy_huang@aspeedtech.com>
Date:   Wed Sep 11 17:39:51 2024 +0800

    i2c: aspeed: Update the stop sw state when the bus recovery occurs
    
    commit 93701d3b84ac5f3ea07259d4ced405c53d757985 upstream.
    
    When the i2c bus recovery occurs, driver will send i2c stop command
    in the scl low condition. In this case the sw state will still keep
    original situation. Under multi-master usage, i2c bus recovery will
    be called when i2c transfer timeout occurs. Update the stop command
    calling with aspeed_i2c_do_stop function to update master_state.
    
    Fixes: f327c686d3ba ("i2c: aspeed: added driver for Aspeed I2C")
    Cc: stable@vger.kernel.org # v4.13+
    Signed-off-by: Tommy Huang <tommy_huang@aspeedtech.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: core: Lock address during client device instantiation [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Thu Aug 15 21:44:50 2024 +0200

    i2c: core: Lock address during client device instantiation
    
    [ Upstream commit 8d3cefaf659265aa82b0373a563fdb9d16a2b947 ]
    
    Krzysztof reported an issue [0] which is caused by parallel attempts to
    instantiate the same I2C client device. This can happen if driver
    supports auto-detection, but certain devices are also instantiated
    explicitly.
    The original change isn't actually wrong, it just revealed that I2C core
    isn't prepared yet to handle this scenario.
    Calls to i2c_new_client_device() can be nested, therefore we can't use a
    simple mutex here. Parallel instantiation of devices at different addresses
    is ok, so we just have to prevent parallel instantiation at the same address.
    We can use a bitmap with one bit per 7-bit I2C client address, and atomic
    bit operations to set/check/clear bits.
    Now a parallel attempt to instantiate a device at the same address will
    result in -EBUSY being returned, avoiding the "sysfs: cannot create duplicate
    filename" splash.
    
    Note: This patch version includes small cosmetic changes to the Tested-by
          version, only functional change is that address locking is supported
          for slave addresses too.
    
    [0] https://lore.kernel.org/linux-i2c/9479fe4e-eb0c-407e-84c0-bd60c15baf74@ans.pl/T/#m12706546e8e2414d8f1a0dc61c53393f731685cc
    
    Fixes: caba40ec3531 ("eeprom: at24: Probe for DDR3 thermal sensor in the SPD case")
    Cc: stable@vger.kernel.org
    Tested-by: Krzysztof Piotr Oledzki <ole@ans.pl>
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: create debugfs entry per adapter [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Sun Nov 12 17:54:41 2023 -0500

    i2c: create debugfs entry per adapter
    
    [ Upstream commit 73febd775bdbdb98c81255ff85773ac410ded5c4 ]
    
    Two drivers already implement custom debugfs handling for their
    i2c_adapter and more will come. So, let the core create a debugfs
    directory per adapter and pass that to drivers for their debugfs files.
    
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 8d3cefaf6592 ("i2c: core: Lock address during client device instantiation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: i801: Use a different adapter-name for IDF adapters [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Aug 12 22:39:48 2024 +0200

    i2c: i801: Use a different adapter-name for IDF adapters
    
    [ Upstream commit 43457ada98c824f310adb7bd96bd5f2fcd9a3279 ]
    
    On chipsets with a second 'Integrated Device Function' SMBus controller use
    a different adapter-name for the second IDF adapter.
    
    This allows platform glue code which is looking for the primary i801
    adapter to manually instantiate i2c_clients on to differentiate
    between the 2.
    
    This allows such code to find the primary i801 adapter by name, without
    needing to duplicate the PCI-ids to feature-flags mapping from i2c-i801.c.
    
    Reviewed-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: isch: Add missed 'else' [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Sep 11 18:39:14 2024 +0300

    i2c: isch: Add missed 'else'
    
    commit 1db4da55070d6a2754efeb3743f5312fc32f5961 upstream.
    
    In accordance with the existing comment and code analysis
    it is quite likely that there is a missed 'else' when adapter
    times out. Add it.
    
    Fixes: 5bc1200852c3 ("i2c: Add Intel SCH SMBus support")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v2.6.27+
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Thu Sep 12 11:34:59 2024 +0800

    i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq()
    
    commit e2c85d85a05f16af2223fcc0195ff50a7938b372 upstream.
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: 37692de5d523 ("i2c: i2c-qcom-geni: Add bus driver for the Qualcomm GENI I2C controller")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Cc: <stable@vger.kernel.org> # v4.19+
    Acked-by: Mukesh Kumar Savaliya <quic_msavaliy@quicinc.com>
    Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: smbus: Check for parent device before dereference [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Feb 4 17:59:20 2022 +0200

    i2c: smbus: Check for parent device before dereference
    
    commit 8302532f47bb6c3aa1ed2043d30187ca307f176a upstream.
    
    An I²C adapter might be instantiated without parent. In such case
    there is no property can be retrieved. Skip SMBus alert setup when
    this happens.
    
    Fixes: a263a84088f6 ("i2c: smbus: Use device_*() functions instead of of_*()")
    Reported-by: syzbot+0591ccf54ee05344e4eb@syzkaller.appspotmail.com
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: smbus: Use device_*() functions instead of of_*() [+ + +]
Author: Akhil R <akhilrajeev@nvidia.com>
Date:   Fri Jan 28 17:14:27 2022 +0530

    i2c: smbus: Use device_*() functions instead of of_*()
    
    [ Upstream commit a263a84088f689bf0c1552a510b25d0bcc45fcae ]
    
    Change of_*() functions to device_*() for firmware agnostic usage.
    This allows to have the smbus_alert interrupt without any changes
    in the controller drivers using the ACPI table.
    
    Signed-off-by: Akhil R <akhilrajeev@nvidia.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 8d3cefaf6592 ("i2c: core: Lock address during client device instantiation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: stm32f7: Do not prepare/unprepare clock during runtime suspend/resume [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Mon Sep 30 21:27:41 2024 +0200

    i2c: stm32f7: Do not prepare/unprepare clock during runtime suspend/resume
    
    commit 048bbbdbf85e5e00258dfb12f5e368f908801d7b upstream.
    
    In case there is any sort of clock controller attached to this I2C bus
    controller, for example Versaclock or even an AIC32x4 I2C codec, then
    an I2C transfer triggered from the clock controller clk_ops .prepare
    callback may trigger a deadlock on drivers/clk/clk.c prepare_lock mutex.
    
    This is because the clock controller first grabs the prepare_lock mutex
    and then performs the prepare operation, including its I2C access. The
    I2C access resumes this I2C bus controller via .runtime_resume callback,
    which calls clk_prepare_enable(), which attempts to grab the prepare_lock
    mutex again and deadlocks.
    
    Since the clock are already prepared since probe() and unprepared in
    remove(), use simple clk_enable()/clk_disable() calls to enable and
    disable the clock on runtime suspend and resume, to avoid hitting the
    prepare_lock mutex.
    
    Acked-by: Alain Volmat <alain.volmat@foss.st.com>
    Signed-off-by: Marek Vasut <marex@denx.de>
    Fixes: 4e7bca6fc07b ("i2c: i2c-stm32f7: add PM Runtime support")
    Cc: <stable@vger.kernel.org> # v5.0+
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: xiic: Fix broken locking on tx_msg [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Mon Aug 23 23:41:40 2021 +0200

    i2c: xiic: Fix broken locking on tx_msg
    
    [ Upstream commit c119e7d00c916881913011e6f4c6ac349a41e4e2 ]
    
    The tx_msg is set from multiple places, sometimes without locking,
    which fall apart on any SMP system. Only ever access tx_msg inside
    the driver mutex.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 1d4a1adbed25 ("i2c: xiic: Try re-initialization on bus busy timeout")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Mon Sep 23 11:42:50 2024 +0800

    i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled
    
    [ Upstream commit 0c8d604dea437b69a861479b413d629bc9b3da70 ]
    
    It is not valid to call pm_runtime_set_suspended() for devices
    with runtime PM enabled because it returns -EAGAIN if it is enabled
    already and working. So, call pm_runtime_disable() before to fix it.
    
    Fixes: 36ecbcab84d0 ("i2c: xiic: Implement power management")
    Cc: <stable@vger.kernel.org> # v4.6+
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Fix RX IRQ busy check [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Mon Aug 23 23:41:45 2021 +0200

    i2c: xiic: Fix RX IRQ busy check
    
    [ Upstream commit 294b29f15469e90893c2b72a738a962ee02a12eb ]
    
    In case the XIIC does TX/RX transfer, make sure no other kernel thread
    can start another TX transfer at the same time. This could happen since
    the driver only checks tx_msg for being non-NULL and returns -EBUSY in
    that case, however it is necessary to check also rx_msg for the same.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 1d4a1adbed25 ("i2c: xiic: Try re-initialization on bus busy timeout")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: improve error message when transfer fails to start [+ + +]
Author: Marc Ferland <marc.ferland@sonatest.com>
Date:   Mon May 13 12:03:24 2024 -0400

    i2c: xiic: improve error message when transfer fails to start
    
    [ Upstream commit ee1691d0ae103ba7fd9439800ef454674fadad27 ]
    
    xiic_start_xfer can fail for different reasons:
    
    - EBUSY: bus is busy or i2c messages still in tx_msg or rx_msg
    - ETIMEDOUT: timed-out trying to clear the RX fifo
    - EINVAL: wrong clock settings
    
    Both EINVAL and ETIMEDOUT will currently print a specific error
    message followed by a generic one, for example:
    
        Failed to clear rx fifo
        Error xiic_start_xfer
    
    however EBUSY will simply output the generic message:
    
        Error xiic_start_xfer
    
    which is not really helpful.
    
    This commit adds a new error message when a busy condition is detected
    and also removes the generic message since it does not provide any
    relevant information to the user.
    
    Signed-off-by: Marc Ferland <marc.ferland@sonatest.com>
    Acked-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Stable-dep-of: 1d4a1adbed25 ("i2c: xiic: Try re-initialization on bus busy timeout")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Switch from waitqueue to completion [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Mon Aug 23 23:41:43 2021 +0200

    i2c: xiic: Switch from waitqueue to completion
    
    [ Upstream commit fdacc3c7405d1fc33c1f2771699a4fc24551e480 ]
    
    There will never be threads queueing up in the xiic_xmit(), use
    completion synchronization primitive to wait for the interrupt
    handler thread to complete instead as it is much better fit and
    there is no need to overload it for this purpose.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Acked-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 1d4a1adbed25 ("i2c: xiic: Try re-initialization on bus busy timeout")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Try re-initialization on bus busy timeout [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Wed Sep 11 22:16:53 2024 +0200

    i2c: xiic: Try re-initialization on bus busy timeout
    
    [ Upstream commit 1d4a1adbed2582444aaf97671858b7d12915bd05 ]
    
    In the event that the I2C bus was powered down when the I2C controller
    driver loads, or some spurious pulses occur on the I2C bus, it's
    possible that the controller detects a spurious I2C "start" condition.
    In this situation it may continue to report the bus is busy indefinitely
    and block the controller from working.
    
    The "single-master" DT flag can be specified to disable bus busy checks
    entirely, but this may not be safe to use in situations where other I2C
    masters may potentially exist.
    
    In the event that the controller reports "bus busy" for too long when
    starting a transaction, we can try reinitializing the controller to see
    if the busy condition clears. This allows recovering from this scenario.
    
    Fixes: e1d5b6598cdc ("i2c: Add support for Xilinx XPS IIC Bus Interface")
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Cc: <stable@vger.kernel.org> # v2.6.34+
    Reviewed-by: Manikanta Guntupalli <manikanta.guntupalli@amd.com>
    Acked-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Use devm_clk_get_enabled() [+ + +]
Author: Andi Shyti <andi.shyti@kernel.org>
Date:   Mon Jun 12 00:56:49 2023 +0200

    i2c: xiic: Use devm_clk_get_enabled()
    
    [ Upstream commit 8390dc7477e49e4acc9e553f385f4ff59d186efe ]
    
    Replace the pair of functions, devm_clk_get() and clk_prepare_enable(),
    with a single function devm_clk_get_enabled().
    
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Acked-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 0c8d604dea43 ("i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: xiic: Wait for TX empty to avoid missed TX NAKs [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Tue Nov 21 18:11:16 2023 +0000

    i2c: xiic: Wait for TX empty to avoid missed TX NAKs
    
    commit 521da1e9225450bd323db5fa5bca942b1dc485b7 upstream.
    
    Frequently an I2C write will be followed by a read, such as a register
    address write followed by a read of the register value. In this driver,
    when the TX FIFO half empty interrupt was raised and it was determined
    that there was enough space in the TX FIFO to send the following read
    command, it would do so without waiting for the TX FIFO to actually
    empty.
    
    Unfortunately it appears that in some cases this can result in a NAK
    that was raised by the target device on the write, such as due to an
    unsupported register address, being ignored and the subsequent read
    being done anyway. This can potentially put the I2C bus into an
    invalid state and/or result in invalid read data being processed.
    
    To avoid this, once a message has been fully written to the TX FIFO,
    wait for the TX FIFO empty interrupt before moving on to the next
    message, to ensure NAKs are handled properly.
    
    Fixes: e1d5b6598cdc ("i2c: Add support for Xilinx XPS IIC Bus Interface")
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Cc: <stable@vger.kernel.org> # v2.6.34+
    Reviewed-by: Manikanta Guntupalli <manikanta.guntupalli@amd.com>
    Acked-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: xiic: xiic_xfer(): Fix runtime PM leak on error path [+ + +]
Author: Lars-Peter Clausen <lars@metafoo.de>
Date:   Thu Apr 13 19:10:22 2023 -0700

    i2c: xiic: xiic_xfer(): Fix runtime PM leak on error path
    
    [ Upstream commit d663d93bb47e7ab45602b227701022d8aa16040a ]
    
    The xiic_xfer() function gets a runtime PM reference when the function is
    entered. This reference is released when the function is exited. There is
    currently one error path where the function exits directly, which leads to
    a leak of the runtime PM reference.
    
    Make sure that this error path also releases the runtime PM reference.
    
    Fixes: fdacc3c7405d ("i2c: xiic: Switch from waitqueue to completion")
    Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
    Reviewed-by: Michal Simek <michal.simek@amd.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 1d4a1adbed25 ("i2c: xiic: Try re-initialization on bus busy timeout")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i40e: Fix macvlan leak by synchronizing access to mac_filter_hash [+ + +]
Author: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Date:   Mon Sep 23 11:12:19 2024 +0200

    i40e: Fix macvlan leak by synchronizing access to mac_filter_hash
    
    [ Upstream commit dac6c7b3d33756d6ce09f00a96ea2ecd79fae9fb ]
    
    This patch addresses a macvlan leak issue in the i40e driver caused by
    concurrent access to vsi->mac_filter_hash. The leak occurs when multiple
    threads attempt to modify the mac_filter_hash simultaneously, leading to
    inconsistent state and potential memory leaks.
    
    To fix this, we now wrap the calls to i40e_del_mac_filter() and zeroing
    vf->default_lan_addr.addr with spin_lock/unlock_bh(&vsi->mac_filter_hash_lock),
    ensuring atomic operations and preventing concurrent access.
    
    Additionally, we add lockdep_assert_held(&vsi->mac_filter_hash_lock) in
    i40e_add_mac_filter() to help catch similar issues in the future.
    
    Reproduction steps:
    1. Spawn VFs and configure port vlan on them.
    2. Trigger concurrent macvlan operations (e.g., adding and deleting
            portvlan and/or mac filters).
    3. Observe the potential memory leak and inconsistent state in the
            mac_filter_hash.
    
    This synchronization ensures the integrity of the mac_filter_hash and prevents
    the described leak.
    
    Fixes: fed0d9f13266 ("i40e: Fix VF's MAC Address change on VM")
    Reviewed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
    Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    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>

 
IB/core: Fix ib_cache_setup_one error flow cleanup [+ + +]
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Mon Sep 2 13:36:33 2024 +0300

    IB/core: Fix ib_cache_setup_one error flow cleanup
    
    [ Upstream commit 1403c8b14765eab805377dd3b75e96ace8747aed ]
    
    When ib_cache_update return an error, we exit ib_cache_setup_one
    instantly with no proper cleanup, even though before this we had
    already successfully done gid_table_setup_one, that results in
    the kernel WARN below.
    
    Do proper cleanup using gid_table_cleanup_one before returning
    the err in order to fix the issue.
    
    WARNING: CPU: 4 PID: 922 at drivers/infiniband/core/cache.c:806 gid_table_release_one+0x181/0x1a0
    Modules linked in:
    CPU: 4 UID: 0 PID: 922 Comm: c_repro Not tainted 6.11.0-rc1+ #3
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    RIP: 0010:gid_table_release_one+0x181/0x1a0
    Code: 44 8b 38 75 0c e8 2f cb 34 ff 4d 8b b5 28 05 00 00 e8 23 cb 34 ff 44 89 f9 89 da 4c 89 f6 48 c7 c7 d0 58 14 83 e8 4f de 21 ff <0f> 0b 4c 8b 75 30 e9 54 ff ff ff 48 8    3 c4 10 5b 5d 41 5c 41 5d 41
    RSP: 0018:ffffc90002b835b0 EFLAGS: 00010286
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff811c8527
    RDX: 0000000000000000 RSI: ffffffff811c8534 RDI: 0000000000000001
    RBP: ffff8881011b3d00 R08: ffff88810b3abe00 R09: 205d303839303631
    R10: 666572207972746e R11: 72746e6520444947 R12: 0000000000000001
    R13: ffff888106390000 R14: ffff8881011f2110 R15: 0000000000000001
    FS:  00007fecc3b70800(0000) GS:ffff88813bd00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000020000340 CR3: 000000010435a001 CR4: 00000000003706b0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     ? show_regs+0x94/0xa0
     ? __warn+0x9e/0x1c0
     ? gid_table_release_one+0x181/0x1a0
     ? report_bug+0x1f9/0x340
     ? gid_table_release_one+0x181/0x1a0
     ? handle_bug+0xa2/0x110
     ? exc_invalid_op+0x31/0xa0
     ? asm_exc_invalid_op+0x16/0x20
     ? __warn_printk+0xc7/0x180
     ? __warn_printk+0xd4/0x180
     ? gid_table_release_one+0x181/0x1a0
     ib_device_release+0x71/0xe0
     ? __pfx_ib_device_release+0x10/0x10
     device_release+0x44/0xd0
     kobject_put+0x135/0x3d0
     put_device+0x20/0x30
     rxe_net_add+0x7d/0xa0
     rxe_newlink+0xd7/0x190
     nldev_newlink+0x1b0/0x2a0
     ? __pfx_nldev_newlink+0x10/0x10
     rdma_nl_rcv_msg+0x1ad/0x2e0
     rdma_nl_rcv_skb.constprop.0+0x176/0x210
     netlink_unicast+0x2de/0x400
     netlink_sendmsg+0x306/0x660
     __sock_sendmsg+0x110/0x120
     ____sys_sendmsg+0x30e/0x390
     ___sys_sendmsg+0x9b/0xf0
     ? kstrtouint+0x6e/0xa0
     ? kstrtouint_from_user+0x7c/0xb0
     ? get_pid_task+0xb0/0xd0
     ? proc_fail_nth_write+0x5b/0x140
     ? __fget_light+0x9a/0x200
     ? preempt_count_add+0x47/0xa0
     __sys_sendmsg+0x61/0xd0
     do_syscall_64+0x50/0x110
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: 1901b91f9982 ("IB/core: Fix potential NULL pointer dereference in pkey cache")
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Reviewed-by: Maher Sanalla <msanalla@nvidia.com>
    Link: https://patch.msgid.link/79137687d829899b0b1c9835fcb4b258004c439a.1725273354.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: Adjust over allocation of memory in ice_sched_add_root_node() and ice_sched_add_node() [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Wed Jul 10 15:39:49 2024 +0300

    ice: Adjust over allocation of memory in ice_sched_add_root_node() and ice_sched_add_node()
    
    [ Upstream commit 62fdaf9e8056e9a9e6fe63aa9c816ec2122d60c6 ]
    
    In ice_sched_add_root_node() and ice_sched_add_node() there are calls to
    devm_kcalloc() in order to allocate memory for array of pointers to
    'ice_sched_node' structure. But incorrect types are used as sizeof()
    arguments in these calls (structures instead of pointers) which leads to
    over allocation of memory.
    
    Adjust over allocation of memory by correcting types in devm_kcalloc()
    sizeof() arguments.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: fix accounting for filters shared by multiple VSIs [+ + +]
Author: Jacob Keller <jacob.e.keller@intel.com>
Date:   Wed Jul 31 09:55:55 2024 -0700

    ice: fix accounting for filters shared by multiple VSIs
    
    [ Upstream commit e843cf7b34fe2e0c1afc55e1f3057375c9b77a14 ]
    
    When adding a switch filter (such as a MAC or VLAN filter), it is expected
    that the driver will detect the case where the filter already exists, and
    return -EEXIST. This is used by calling code such as ice_vc_add_mac_addr,
    and ice_vsi_add_vlan to avoid incrementing the accounting fields such as
    vsi->num_vlan or vf->num_mac.
    
    This logic works correctly for the case where only a single VSI has added a
    given switch filter.
    
    When a second VSI adds the same switch filter, the driver converts the
    existing filter from an ICE_FWD_TO_VSI filter into an ICE_FWD_TO_VSI_LIST
    filter. This saves switch resources, by ensuring that multiple VSIs can
    re-use the same filter.
    
    The ice_add_update_vsi_list() function is responsible for doing this
    conversion. When first converting a filter from the FWD_TO_VSI into
    FWD_TO_VSI_LIST, it checks if the VSI being added is the same as the
    existing rule's VSI. In such a case it returns -EEXIST.
    
    However, when the switch rule has already been converted to a
    FWD_TO_VSI_LIST, the logic is different. Adding a new VSI in this case just
    requires extending the VSI list entry. The logic for checking if the rule
    already exists in this case returns 0 instead of -EEXIST.
    
    This breaks the accounting logic mentioned above, so the counters for how
    many MAC and VLAN filters exist for a given VF or VSI no longer accurately
    reflect the actual count. This breaks other code which relies on these
    counts.
    
    In typical usage this primarily affects such filters generally shared by
    multiple VSIs such as VLAN 0, or broadcast and multicast MAC addresses.
    
    Fix this by correctly reporting -EEXIST in the case of adding the same VSI
    to a switch rule already converted to ICE_FWD_TO_VSI_LIST.
    
    Fixes: 9daf8208dd4d ("ice: Add support for switch filter programming")
    Signed-off-by: Jacob Keller <jacob.e.keller@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>

ice: Fix netif_is_ice() in Safe Mode [+ + +]
Author: Marcin Szycik <marcin.szycik@linux.intel.com>
Date:   Tue Sep 24 12:04:24 2024 +0200

    ice: Fix netif_is_ice() in Safe Mode
    
    [ Upstream commit 8e60dbcbaaa177dacef55a61501790e201bf8c88 ]
    
    netif_is_ice() works by checking the pointer to netdev ops. However, it
    only checks for the default ice_netdev_ops, not ice_netdev_safe_mode_ops,
    so in Safe Mode it always returns false, which is unintuitive. While it
    doesn't look like netif_is_ice() is currently being called anywhere in Safe
    Mode, this could change and potentially lead to unexpected behaviour.
    
    Fixes: df006dd4b1dc ("ice: Add initial support framework for LAG")
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com>
    Reviewed-by: Brett Creeley <brett.creeley@amd.com>
    Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: fix VLAN replay after reset [+ + +]
Author: Dave Ertman <david.m.ertman@intel.com>
Date:   Wed Sep 18 14:02:56 2024 -0400

    ice: fix VLAN replay after reset
    
    [ Upstream commit 0eae2c136cb624e4050092feb59f18159b4f2512 ]
    
    There is a bug currently when there are more than one VLAN defined
    and any reset that affects the PF is initiated, after the reset rebuild
    no traffic will pass on any VLAN but the last one created.
    
    This is caused by the iteration though the VLANs during replay each
    clearing the vsi_map bitmap of the VSI that is being replayed.  The
    problem is that during rhe replay, the pointer to the vsi_map bitmap
    is used by each successive vlan to determine if it should be replayed
    on this VSI.
    
    The logic was that the replay of the VLAN would replace the bit in the map
    before the next VLAN would iterate through.  But, since the replay copies
    the old bitmap pointer to filt_replay_rules and creates a new one for the
    recreated VLANS, it does not do this, and leaves the old bitmap broken
    to be used to replay the remaining VLANs.
    
    Since the old bitmap will be cleaned up in post replay cleanup, there is
    no need to alter it and break following VLAN replay, so don't clear the
    bit.
    
    Fixes: 334cb0626de1 ("ice: Implement VSI replay framework")
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ieee802154: Fix build error [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Mon Sep 9 21:17:40 2024 +0800

    ieee802154: Fix build error
    
    [ Upstream commit addf89774e48c992316449ffab4f29c2309ebefb ]
    
    If REGMAP_SPI is m and IEEE802154_MCR20A is y,
    
            mcr20a.c:(.text+0x3ed6c5b): undefined reference to `__devm_regmap_init_spi'
            ld: mcr20a.c:(.text+0x3ed6cb5): undefined reference to `__devm_regmap_init_spi'
    
    Select REGMAP_SPI for IEEE802154_MCR20A to fix it.
    
    Fixes: 8c6ad9cc5157 ("ieee802154: Add NXP MCR20A IEEE 802.15.4 transceiver driver")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Link: https://lore.kernel.org/20240909131740.1296608-1-ruanjinjie@huawei.com
    Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igb: Always call igb_xdp_ring_update_tail() under Tx lock [+ + +]
Author: Sriram Yagnaraman <sriram.yagnaraman@ericsson.com>
Date:   Thu Aug 22 09:42:07 2024 +0200

    igb: Always call igb_xdp_ring_update_tail() under Tx lock
    
    [ Upstream commit 27717f8b17c098c4373ddb8fe89e1a1899c7779d ]
    
    Always call igb_xdp_ring_update_tail() under __netif_tx_lock, add a comment
    and lockdep assert to indicate that. This is needed to share the same TX
    ring between XDP, XSK and slow paths. Furthermore, the current XDP
    implementation is racy on tail updates.
    
    Fixes: 9cbc948b5a20 ("igb: add XDP support")
    Signed-off-by: Sriram Yagnaraman <sriram.yagnaraman@est.tech>
    [Kurt: Add lockdep assert and fixes tag]
    Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
    Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Tested-by: George Kuruvinakunnel <george.kuruvinakunnel@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igb: Do not bring the device up after non-fatal error [+ + +]
Author: Mohamed Khalfella <mkhalfella@purestorage.com>
Date:   Tue Sep 24 15:06:01 2024 -0600

    igb: Do not bring the device up after non-fatal error
    
    [ Upstream commit 330a699ecbfc9c26ec92c6310686da1230b4e7eb ]
    
    Commit 004d25060c78 ("igb: Fix igb_down hung on surprise removal")
    changed igb_io_error_detected() to ignore non-fatal pcie errors in order
    to avoid hung task that can happen when igb_down() is called multiple
    times. This caused an issue when processing transient non-fatal errors.
    igb_io_resume(), which is called after igb_io_error_detected(), assumes
    that device is brought down by igb_io_error_detected() if the interface
    is up. This resulted in panic with stacktrace below.
    
    [ T3256] igb 0000:09:00.0 haeth0: igb: haeth0 NIC Link is Down
    [  T292] pcieport 0000:00:1c.5: AER: Uncorrected (Non-Fatal) error received: 0000:09:00.0
    [  T292] igb 0000:09:00.0: PCIe Bus Error: severity=Uncorrected (Non-Fatal), type=Transaction Layer, (Requester ID)
    [  T292] igb 0000:09:00.0:   device [8086:1537] error status/mask=00004000/00000000
    [  T292] igb 0000:09:00.0:    [14] CmpltTO [  200.105524,009][  T292] igb 0000:09:00.0: AER:   TLP Header: 00000000 00000000 00000000 00000000
    [  T292] pcieport 0000:00:1c.5: AER: broadcast error_detected message
    [  T292] igb 0000:09:00.0: Non-correctable non-fatal error reported.
    [  T292] pcieport 0000:00:1c.5: AER: broadcast mmio_enabled message
    [  T292] pcieport 0000:00:1c.5: AER: broadcast resume message
    [  T292] ------------[ cut here ]------------
    [  T292] kernel BUG at net/core/dev.c:6539!
    [  T292] invalid opcode: 0000 [#1] PREEMPT SMP
    [  T292] RIP: 0010:napi_enable+0x37/0x40
    [  T292] Call Trace:
    [  T292]  <TASK>
    [  T292]  ? die+0x33/0x90
    [  T292]  ? do_trap+0xdc/0x110
    [  T292]  ? napi_enable+0x37/0x40
    [  T292]  ? do_error_trap+0x70/0xb0
    [  T292]  ? napi_enable+0x37/0x40
    [  T292]  ? napi_enable+0x37/0x40
    [  T292]  ? exc_invalid_op+0x4e/0x70
    [  T292]  ? napi_enable+0x37/0x40
    [  T292]  ? asm_exc_invalid_op+0x16/0x20
    [  T292]  ? napi_enable+0x37/0x40
    [  T292]  igb_up+0x41/0x150
    [  T292]  igb_io_resume+0x25/0x70
    [  T292]  report_resume+0x54/0x70
    [  T292]  ? report_frozen_detected+0x20/0x20
    [  T292]  pci_walk_bus+0x6c/0x90
    [  T292]  ? aer_print_port_info+0xa0/0xa0
    [  T292]  pcie_do_recovery+0x22f/0x380
    [  T292]  aer_process_err_devices+0x110/0x160
    [  T292]  aer_isr+0x1c1/0x1e0
    [  T292]  ? disable_irq_nosync+0x10/0x10
    [  T292]  irq_thread_fn+0x1a/0x60
    [  T292]  irq_thread+0xe3/0x1a0
    [  T292]  ? irq_set_affinity_notifier+0x120/0x120
    [  T292]  ? irq_affinity_notify+0x100/0x100
    [  T292]  kthread+0xe2/0x110
    [  T292]  ? kthread_complete_and_exit+0x20/0x20
    [  T292]  ret_from_fork+0x2d/0x50
    [  T292]  ? kthread_complete_and_exit+0x20/0x20
    [  T292]  ret_from_fork_asm+0x11/0x20
    [  T292]  </TASK>
    
    To fix this issue igb_io_resume() checks if the interface is running and
    the device is not down this means igb_io_error_detected() did not bring
    the device down and there is no need to bring it up.
    
    Signed-off-by: Mohamed Khalfella <mkhalfella@purestorage.com>
    Reviewed-by: Yuanyuan Zhong <yzhong@purestorage.com>
    Fixes: 004d25060c78 ("igb: Fix igb_down hung on surprise removal")
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iio: adc: ad7606: fix oversampling gpio array [+ + +]
Author: Guillaume Stols <gstols@baylibre.com>
Date:   Tue Jul 2 17:34:10 2024 +0000

    iio: adc: ad7606: fix oversampling gpio array
    
    [ Upstream commit 8dc4594b54dbaaba40dc8884ad3d42083de39434 ]
    
    gpiod_set_array_value was misused here: the implementation relied on the
    assumption that an unsigned long was required for each gpio, while the
    function expects a bit array stored in "as much unsigned long as needed
    for storing one bit per GPIO", i.e it is using a bit field.
    
    This leaded to incorrect parameter passed to gpiod_set_array_value, that
    would set 1 value instead of 3.
    It also prevents to select the software mode correctly for the AD7606B.
    
    Fixes: d2a415c86c6b ("iio: adc: ad7606: Add support for AD7606B ADC")
    Fixes: 41f71e5e7daf ("staging: iio: adc: ad7606: Use find_closest() macro")
    Signed-off-by: Guillaume Stols <gstols@baylibre.com>
    Reviewed-by: Nuno Sa <nuno.sa@analog.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: adc: ad7606: fix standby gpio state to match the documentation [+ + +]
Author: Guillaume Stols <gstols@baylibre.com>
Date:   Tue Jul 2 17:34:11 2024 +0000

    iio: adc: ad7606: fix standby gpio state to match the documentation
    
    [ Upstream commit 059fe4f8bbdf5cad212e1aeeb3e8968c80b9ff3b ]
    
    The binding's documentation specifies that "As the line is active low, it
    should be marked GPIO_ACTIVE_LOW". However, in the driver, it was handled
    the opposite way. This commit sets the driver's behaviour in sync with the
    documentation
    
    Fixes: 722407a4e8c0 ("staging:iio:ad7606: Use GPIO descriptor API")
    Signed-off-by: Guillaume Stols <gstols@baylibre.com>
    Reviewed-by: Nuno Sa <nuno.sa@analog.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: magnetometer: ak8975: Fix reading for ak099xx sensors [+ + +]
Author: Barnabás Czémán <barnabas.czeman@mainlining.org>
Date:   Mon Aug 19 00:29:40 2024 +0200

    iio: magnetometer: ak8975: Fix reading for ak099xx sensors
    
    commit 129464e86c7445a858b790ac2d28d35f58256bbe upstream.
    
    Move ST2 reading with overflow handling after measurement data
    reading.
    ST2 register read have to be read after read measurment data,
    because it means end of the reading and realease the lock on the data.
    Remove ST2 read skip on interrupt based waiting because ST2 required to
    be read out at and of the axis read.
    
    Fixes: 57e73a423b1e ("iio: ak8975: add ak09911 and ak09912 support")
    Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org>
    Link: https://patch.msgid.link/20240819-ak09918-v4-2-f0734d14cfb9@mainlining.org
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
inet: inet_defrag: prevent sk release while still in use [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Mar 26 11:18:41 2024 +0100

    inet: inet_defrag: prevent sk release while still in use
    
    commit 18685451fc4e546fc0e718580d32df3c0e5c8272 upstream.
    
    ip_local_out() and other functions can pass skb->sk as function argument.
    
    If the skb is a fragment and reassembly happens before such function call
    returns, the sk must not be released.
    
    This affects skb fragments reassembled via netfilter or similar
    modules, e.g. openvswitch or ct_act.c, when run as part of tx pipeline.
    
    Eric Dumazet made an initial analysis of this bug.  Quoting Eric:
      Calling ip_defrag() in output path is also implying skb_orphan(),
      which is buggy because output path relies on sk not disappearing.
    
      A relevant old patch about the issue was :
      8282f27449bf ("inet: frag: Always orphan skbs inside ip_defrag()")
    
      [..]
    
      net/ipv4/ip_output.c depends on skb->sk being set, and probably to an
      inet socket, not an arbitrary one.
    
      If we orphan the packet in ipvlan, then downstream things like FQ
      packet scheduler will not work properly.
    
      We need to change ip_defrag() to only use skb_orphan() when really
      needed, ie whenever frag_list is going to be used.
    
    Eric suggested to stash sk in fragment queue and made an initial patch.
    However there is a problem with this:
    
    If skb is refragmented again right after, ip_do_fragment() will copy
    head->sk to the new fragments, and sets up destructor to sock_wfree.
    IOW, we have no choice but to fix up sk_wmem accouting to reflect the
    fully reassembled skb, else wmem will underflow.
    
    This change moves the orphan down into the core, to last possible moment.
    As ip_defrag_offset is aliased with sk_buff->sk member, we must move the
    offset into the FRAG_CB, else skb->sk gets clobbered.
    
    This allows to delay the orphaning long enough to learn if the skb has
    to be queued or if the skb is completing the reasm queue.
    
    In the former case, things work as before, skb is orphaned.  This is
    safe because skb gets queued/stolen and won't continue past reasm engine.
    
    In the latter case, we will steal the skb->sk reference, reattach it to
    the head skb, and fix up wmem accouting when inet_frag inflates truesize.
    
    Fixes: 7026b1ddb6b8 ("netfilter: Pass socket pointer down through okfn().")
    Diagnosed-by: Eric Dumazet <edumazet@google.com>
    Reported-by: xingwei lee <xrivendell7@gmail.com>
    Reported-by: yue sun <samsun1006219@gmail.com>
    Reported-by: syzbot+e5167d7144a62715044c@syzkaller.appspotmail.com
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240326101845.30836-1-fw@strlen.de
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Saeed Mirzamohammadi <saeed.mirzamohammadi@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Input: adp5589-keys - fix adp5589_gpio_get_value() [+ + +]
Author: Nuno Sa <nuno.sa@analog.com>
Date:   Tue Oct 1 07:47:23 2024 -0700

    Input: adp5589-keys - fix adp5589_gpio_get_value()
    
    commit c684771630e64bc39bddffeb65dd8a6612a6b249 upstream.
    
    The adp5589 seems to have the same behavior as similar devices as
    explained in commit 910a9f5636f5 ("Input: adp5588-keys - get value from
    data out when dir is out").
    
    Basically, when the gpio is set as output we need to get the value from
    ADP5589_GPO_DATA_OUT_A register instead of ADP5589_GPI_STATUS_A.
    
    Fixes: 9d2e173644bb ("Input: ADP5589 - new driver for I2C Keypad Decoder and I/O Expander")
    Signed-off-by: Nuno Sa <nuno.sa@analog.com>
    Link: https://lore.kernel.org/r/20241001-b4-dev-adp5589-fw-conversion-v1-2-fca0149dfc47@analog.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: adp5589-keys - fix NULL pointer dereference [+ + +]
Author: Nuno Sa <nuno.sa@analog.com>
Date:   Tue Oct 1 07:46:44 2024 -0700

    Input: adp5589-keys - fix NULL pointer dereference
    
    commit fb5cc65f973661241e4a2b7390b429aa7b330c69 upstream.
    
    We register a devm action to call adp5589_clear_config() and then pass
    the i2c client as argument so that we can call i2c_get_clientdata() in
    order to get our device object. However, i2c_set_clientdata() is only
    being set at the end of the probe function which means that we'll get a
    NULL pointer dereference in case the probe function fails early.
    
    Fixes: 30df385e35a4 ("Input: adp5589-keys - use devm_add_action_or_reset() for register clear")
    Signed-off-by: Nuno Sa <nuno.sa@analog.com>
    Link: https://lore.kernel.org/r/20241001-b4-dev-adp5589-fw-conversion-v1-1-fca0149dfc47@analog.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: ads7846 - ratelimit the spi_sync error message [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Mon Jul 8 23:18:57 2024 +0200

    Input: ads7846 - ratelimit the spi_sync error message
    
    [ Upstream commit ccbfea78adf75d3d9e87aa739dab83254f5333fa ]
    
    In case the touch controller is not connected, this message keeps scrolling
    on the console indefinitelly. Ratelimit it to avoid filling kernel logs.
    
    "
    ads7846 spi2.1: spi_sync --> -22
    "
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Link: https://lore.kernel.org/r/20240708211913.171243-1-marex@denx.de
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: goodix - use the new soc_intel_is_byt() helper [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Feb 28 22:52:31 2022 -0800

    Input: goodix - use the new soc_intel_is_byt() helper
    
    commit d176708ffc20332d1c730098d2b111e0b77ece82 upstream.
    
    Use the new soc_intel_is_byt() helper from linux/platform_data/x86/soc.h.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20220131143539.109142-5-hdegoede@redhat.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: i8042 - add another board name for TUXEDO Stellaris Gen5 AMD line [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Tue Sep 10 11:40:07 2024 +0200

    Input: i8042 - add another board name for TUXEDO Stellaris Gen5 AMD line
    
    commit 01eed86d50af9fab27d876fd677b86259ebe9de3 upstream.
    
    There might be devices out in the wild where the board name is GMxXGxx
    instead of GMxXGxX.
    
    Adding both to be on the safe side.
    
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240910094008.1601230-2-wse@tuxedocomputers.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: i8042 - add Fujitsu Lifebook E756 to i8042 quirk table [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Aug 14 12:06:19 2024 +0200

    Input: i8042 - add Fujitsu Lifebook E756 to i8042 quirk table
    
    [ Upstream commit 7ce7c2283fa6843ab3c2adfeb83dcc504a107858 ]
    
    Yet another quirk entry for Fujitsu laptop.  Lifebook E756 requires
    i8041.nomux for keeping the touchpad working after suspend/resume.
    
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1229056
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://lore.kernel.org/r/20240814100630.2048-1-tiwai@suse.de
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: i8042 - add TUXEDO Stellaris 15 Slim Gen6 AMD to i8042 quirk table [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Tue Sep 10 11:40:08 2024 +0200

    Input: i8042 - add TUXEDO Stellaris 15 Slim Gen6 AMD to i8042 quirk table
    
    commit 3870e2850b56306d1d1e435c5a1ccbccd7c59291 upstream.
    
    The Gen6 devices have the same problem and the same Solution as the Gen5
    ones.
    
    Some TongFang barebones have touchpad and/or keyboard issues after
    suspend, fixable with nomux + reset + noloop + nopnp. Luckily, none of
    them have an external PS/2 port so this can safely be set for all of
    them.
    
    I'm not entirely sure if every device listed really needs all four quirks,
    but after testing and production use, no negative effects could be
    observed when setting all four.
    
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240910094008.1601230-3-wse@tuxedocomputers.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: i8042 - add TUXEDO Stellaris 16 Gen5 AMD to i8042 quirk table [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Thu Sep 5 18:48:51 2024 +0200

    Input: i8042 - add TUXEDO Stellaris 16 Gen5 AMD to i8042 quirk table
    
    commit e06edf96dea065dd1d9df695bf8b92784992333e upstream.
    
    Some TongFang barebones have touchpad and/or keyboard issues after
    suspend, fixable with nomux + reset + noloop + nopnp. Luckily, none of
    them have an external PS/2 port so this can safely be set for all of
    them.
    
    I'm not entirely sure if every device listed really needs all four quirks,
    but after testing and production use, no negative effects could be
    observed when setting all four.
    
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240905164851.771578-1-wse@tuxedocomputers.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: ilitek_ts_i2c - add report id message validation [+ + +]
Author: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
Date:   Mon Aug 5 10:55:11 2024 +0200

    Input: ilitek_ts_i2c - add report id message validation
    
    [ Upstream commit 208989744a6f01bed86968473312d4e650e600b3 ]
    
    Ensure that the touchscreen response has correct "report id" byte
    before processing the touch data and discard other messages.
    
    Fixes: 42370681bd46 ("Input: Add support for ILITEK Lego Series")
    Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Link: https://lore.kernel.org/r/20240805085511.43955-3-francesco@dolcini.it
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: ilitek_ts_i2c - avoid wrong input subsystem sync [+ + +]
Author: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
Date:   Mon Aug 5 10:55:10 2024 +0200

    Input: ilitek_ts_i2c - avoid wrong input subsystem sync
    
    [ Upstream commit 7d0b18cd5dc7429917812963611d961fd93cb44d ]
    
    For different reasons i2c transaction may fail or report id in the
    message may be wrong. Avoid closing the frame in this case as it will
    result in all contacts being dropped, indicating that nothing is
    touching the screen anymore, while usually it is not the case.
    
    Fixes: 42370681bd46 ("Input: Add support for ILITEK Lego Series")
    Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Link: https://lore.kernel.org/r/20240805085511.43955-2-francesco@dolcini.it
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: synaptics - enable SMBus for HP Elitebook 840 G2 [+ + +]
Author: Jonathan Denose <jdenose@google.com>
Date:   Tue Jul 23 21:33:30 2024 -0700

    Input: synaptics - enable SMBus for HP Elitebook 840 G2
    
    [ Upstream commit da897484557b34a54fabb81f6c223c19a69e546d ]
    
    The kernel reports that the touchpad for this device can support a
    different bus.
    
    With SMBus enabled the touchpad movement is smoother and three-finger
    gestures are recognized.
    
    Signed-off-by: Jonathan Denose <jdenose@google.com>
    Link: https://lore.kernel.org/r/20240719180612.1.Ib652dd808c274076f32cd7fc6c1160d2cf71753b@changeid
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: synaptics-rmi4 - fix UAF of IRQ domain on driver removal [+ + +]
Author: Mathias Krause <minipli@grsecurity.net>
Date:   Wed Oct 9 05:41:48 2024 +0000

    Input: synaptics-rmi4 - fix UAF of IRQ domain on driver removal
    
    commit fbf8d71742557abaf558d8efb96742d442720cc2 upstream.
    
    Calling irq_domain_remove() will lead to freeing the IRQ domain
    prematurely. The domain is still referenced and will be attempted to get
    used via rmi_free_function_list() -> rmi_unregister_function() ->
    irq_dispose_mapping() -> irq_get_irq_data()'s ->domain pointer.
    
    With PaX's MEMORY_SANITIZE this will lead to an access fault when
    attempting to dereference embedded pointers, as in Torsten's report that
    was faulting on the 'domain->ops->unmap' test.
    
    Fix this by releasing the IRQ domain only after all related IRQs have
    been deactivated.
    
    Fixes: 24d28e4f1271 ("Input: synaptics-rmi4 - convert irq distribution to irq_domain")
    Reported-by: Torsten Hilbrich <torsten.hilbrich@secunet.com>
    Signed-off-by: Mathias Krause <minipli@grsecurity.net>
    Link: https://lore.kernel.org/r/20240222142654.856566-1-minipli@grsecurity.net
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
interconnect: qcom: sm8250: Enable sync_state [+ + +]
Author: Konrad Dybcio <konradybcio@kernel.org>
Date:   Thu Nov 30 15:04:45 2023 +0100

    interconnect: qcom: sm8250: Enable sync_state
    
    [ Upstream commit bfc7db1cb94ad664546d70212699f8cc6c539e8c ]
    
    Add the generic icc sync_state callback to ensure interconnect votes
    are taken into account, instead of being pegged at maximum values.
    
    Fixes: b95b668eaaa2 ("interconnect: qcom: icc-rpmh: Add BCMs to commit list in pre_aggregate")
    Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Link: https://lore.kernel.org/r/20231130-topic-8250icc_syncstate-v1-1-7ce78ba6e04c@linaro.org
    Signed-off-by: Georgi Djakov <djakov@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux [+ + +]
Author: Marc Gonzalez <mgonzalez@freebox.fr>
Date:   Tue Aug 20 15:27:19 2024 +0200

    iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux
    
    [ Upstream commit 3a8990b8a778219327c5f8ecf10b5d81377b925a ]
    
    On qcom msm8998, writing to the last context bank of lpass_q6_smmu
    (base address 0x05100000) produces a system freeze & reboot.
    
    The hardware/hypervisor reports 13 context banks for the LPASS SMMU
    on msm8998, but only the first 12 are accessible...
    Override the number of context banks
    
    [    2.546101] arm-smmu 5100000.iommu: probing hardware configuration...
    [    2.552439] arm-smmu 5100000.iommu: SMMUv2 with:
    [    2.558945] arm-smmu 5100000.iommu:  stage 1 translation
    [    2.563627] arm-smmu 5100000.iommu:  address translation ops
    [    2.568923] arm-smmu 5100000.iommu:  non-coherent table walk
    [    2.574566] arm-smmu 5100000.iommu:  (IDR0.CTTW overridden by FW configuration)
    [    2.580220] arm-smmu 5100000.iommu:  stream matching with 12 register groups
    [    2.587263] arm-smmu 5100000.iommu:  13 context banks (0 stage-2 only)
    [    2.614447] arm-smmu 5100000.iommu:  Supported page sizes: 0x63315000
    [    2.621358] arm-smmu 5100000.iommu:  Stage-1: 36-bit VA -> 36-bit IPA
    [    2.627772] arm-smmu 5100000.iommu:  preserved 0 boot mappings
    
    Specifically, the crashes occur here:
    
            qsmmu->bypass_cbndx = smmu->num_context_banks - 1;
            arm_smmu_cb_write(smmu, qsmmu->bypass_cbndx, ARM_SMMU_CB_SCTLR, 0);
    
    and here:
    
            arm_smmu_write_context_bank(smmu, i);
            arm_smmu_cb_write(smmu, i, ARM_SMMU_CB_FSR, ARM_SMMU_CB_FSR_FAULT);
    
    It is likely that FW reserves the last context bank for its own use,
    thus a simple work-around is: DON'T USE IT in Linux.
    
    If we decrease the number of context banks, last one will be "hidden".
    
    Signed-off-by: Marc Gonzalez <mgonzalez@freebox.fr>
    Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/20240820-smmu-v3-1-2f71483b00ec@freebox.fr
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu/vt-d: Always reserve a domain ID for identity setup [+ + +]
Author: Lu Baolu <baolu.lu@linux.intel.com>
Date:   Mon Sep 2 10:27:13 2024 +0800

    iommu/vt-d: Always reserve a domain ID for identity setup
    
    [ Upstream commit 2c13012e09190174614fd6901857a1b8c199e17d ]
    
    We will use a global static identity domain. Reserve a static domain ID
    for it.
    
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com>
    Link: https://lore.kernel.org/r/20240809055431.36513-4-baolu.lu@linux.intel.com
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iommu/vt-d: Fix potential lockup if qi_submit_sync called with 0 count [+ + +]
Author: Sanjay K Kumar <sanjay.k.kumar@intel.com>
Date:   Mon Sep 2 10:27:18 2024 +0800

    iommu/vt-d: Fix potential lockup if qi_submit_sync called with 0 count
    
    [ Upstream commit 3cf74230c139f208b7fb313ae0054386eee31a81 ]
    
    If qi_submit_sync() is invoked with 0 invalidation descriptors (for
    instance, for DMA draining purposes), we can run into a bug where a
    submitting thread fails to detect the completion of invalidation_wait.
    Subsequently, this led to a soft lockup. Currently, there is no impact
    by this bug on the existing users because no callers are submitting
    invalidations with 0 descriptors. This fix will enable future users
    (such as DMA drain) calling qi_submit_sync() with 0 count.
    
    Suppose thread T1 invokes qi_submit_sync() with non-zero descriptors, while
    concurrently, thread T2 calls qi_submit_sync() with zero descriptors. Both
    threads then enter a while loop, waiting for their respective descriptors
    to complete. T1 detects its completion (i.e., T1's invalidation_wait status
    changes to QI_DONE by HW) and proceeds to call reclaim_free_desc() to
    reclaim all descriptors, potentially including adjacent ones of other
    threads that are also marked as QI_DONE.
    
    During this time, while T2 is waiting to acquire the qi->q_lock, the IOMMU
    hardware may complete the invalidation for T2, setting its status to
    QI_DONE. However, if T1's execution of reclaim_free_desc() frees T2's
    invalidation_wait descriptor and changes its status to QI_FREE, T2 will
    not observe the QI_DONE status for its invalidation_wait and will
    indefinitely remain stuck.
    
    This soft lockup does not occur when only non-zero descriptors are
    submitted.In such cases, invalidation descriptors are interspersed among
    wait descriptors with the status QI_IN_USE, acting as barriers. These
    barriers prevent the reclaim code from mistakenly freeing descriptors
    belonging to other submitters.
    
    Considered the following example timeline:
            T1                      T2
    ========================================
            ID1
            WD1
            while(WD1!=QI_DONE)
            unlock
                                    lock
            WD1=QI_DONE*            WD2
                                    while(WD2!=QI_DONE)
                                    unlock
            lock
            WD1==QI_DONE?
            ID1=QI_DONE             WD2=DONE*
            reclaim()
            ID1=FREE
            WD1=FREE
            WD2=FREE
            unlock
                                    soft lockup! T2 never sees QI_DONE in WD2
    
    Where:
    ID = invalidation descriptor
    WD = wait descriptor
    * Written by hardware
    
    The root of the problem is that the descriptor status QI_DONE flag is used
    for two conflicting purposes:
    1. signal a descriptor is ready for reclaim (to be freed)
    2. signal by the hardware that a wait descriptor is complete
    
    The solution (in this patch) is state separation by using QI_FREE flag
    for #1.
    
    Once a thread's invalidation descriptors are complete, their status would
    be set to QI_FREE. The reclaim_free_desc() function would then only
    free descriptors marked as QI_FREE instead of those marked as
    QI_DONE. This change ensures that T2 (from the previous example) will
    correctly observe the completion of its invalidation_wait (marked as
    QI_DONE).
    
    Signed-off-by: Sanjay K Kumar <sanjay.k.kumar@intel.com>
    Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Link: https://lore.kernel.org/r/20240728210059.1964602-1-jacob.jun.pan@linux.intel.com
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipmi: docs: don't advertise deprecated sysfs entries [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Sun Sep 1 11:02:11 2024 +0200

    ipmi: docs: don't advertise deprecated sysfs entries
    
    [ Upstream commit 64dce81f8c373c681e62d5ffe0397c45a35d48a2 ]
    
    "i2c-adapter" class entries are deprecated since 2009. Switch to the
    proper location.
    
    Reported-by: Heiner Kallweit <hkallweit1@gmail.com>
    Closes: https://lore.kernel.org/r/80c4a898-5867-4162-ac85-bdf7c7c68746@gmail.com
    Fixes: 259307074bfc ("ipmi: Add SMBus interface driver (SSIF)")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Message-Id: <20240901090211.3797-2-wsa+renesas@sang-engineering.com>
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv4: Check !in_dev earlier for ioctl(SIOCSIFADDR). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Aug 9 16:54:02 2024 -0700

    ipv4: Check !in_dev earlier for ioctl(SIOCSIFADDR).
    
    [ Upstream commit e3af3d3c5b26c33a7950e34e137584f6056c4319 ]
    
    dev->ip_ptr could be NULL if we set an invalid MTU.
    
    Even then, if we issue ioctl(SIOCSIFADDR) for a new IPv4 address,
    devinet_ioctl() allocates struct in_ifaddr and fails later in
    inet_set_ifa() because in_dev is NULL.
    
    Let's move the check earlier.
    
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20240809235406.50187-2-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: ip_gre: Fix drops of small packets in ipgre_xmit [+ + +]
Author: Anton Danilov <littlesmilingcloud@gmail.com>
Date:   Wed Sep 25 02:51:59 2024 +0300

    ipv4: ip_gre: Fix drops of small packets in ipgre_xmit
    
    [ Upstream commit c4a14f6d9d17ad1e41a36182dd3b8a5fd91efbd7 ]
    
    Regression Description:
    
    Depending on the options specified for the GRE tunnel device, small
    packets may be dropped. This occurs because the pskb_network_may_pull
    function fails due to the packet's insufficient length.
    
    For example, if only the okey option is specified for the tunnel device,
    original (before encapsulation) packets smaller than 28 bytes (including
    the IPv4 header) will be dropped. This happens because the required
    length is calculated relative to the network header, not the skb->head.
    
    Here is how the required length is computed and checked:
    
    * The pull_len variable is set to 28 bytes, consisting of:
      * IPv4 header: 20 bytes
      * GRE header with Key field: 8 bytes
    
    * The pskb_network_may_pull function adds the network offset, shifting
    the checkable space further to the beginning of the network header and
    extending it to the beginning of the packet. As a result, the end of
    the checkable space occurs beyond the actual end of the packet.
    
    Instead of ensuring that 28 bytes are present in skb->head, the function
    is requesting these 28 bytes starting from the network header. For small
    packets, this requested length exceeds the actual packet size, causing
    the check to fail and the packets to be dropped.
    
    This issue affects both locally originated and forwarded packets in
    DMVPN-like setups.
    
    How to reproduce (for local originated packets):
    
      ip link add dev gre1 type gre ikey 1.9.8.4 okey 1.9.8.4 \
              local <your-ip> remote 0.0.0.0
    
      ip link set mtu 1400 dev gre1
      ip link set up dev gre1
      ip address add 192.168.13.1/24 dev gre1
      ip neighbor add 192.168.13.2 lladdr <remote-ip> dev gre1
      ping -s 1374 -c 10 192.168.13.2
      tcpdump -vni gre1
      tcpdump -vni <your-ext-iface> 'ip proto 47'
      ip -s -s -d link show dev gre1
    
    Solution:
    
    Use the pskb_may_pull function instead the pskb_network_may_pull.
    
    Fixes: 80d875cfc9d3 ("ipv4: ip_gre: Avoid skb_pull() failure in ipgre_xmit()")
    Signed-off-by: Anton Danilov <littlesmilingcloud@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240924235158.106062-1-littlesmilingcloud@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: Mask upper DSCP bits and ECN bits in NETLINK_FIB_LOOKUP family [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Wed Aug 14 15:52:22 2024 +0300

    ipv4: Mask upper DSCP bits and ECN bits in NETLINK_FIB_LOOKUP family
    
    [ Upstream commit 8fed54758cd248cd311a2b5c1e180abef1866237 ]
    
    The NETLINK_FIB_LOOKUP netlink family can be used to perform a FIB
    lookup according to user provided parameters and communicate the result
    back to user space.
    
    However, unlike other users of the FIB lookup API, the upper DSCP bits
    and the ECN bits of the DS field are not masked, which can result in the
    wrong result being returned.
    
    Solve this by masking the upper DSCP bits and the ECN bits using
    IPTOS_RT_MASK.
    
    The structure that communicates the request and the response is not
    exported to user space, so it is unlikely that this netlink family is
    actually in use [1].
    
    [1] https://lore.kernel.org/netdev/ZpqpB8vJU%2FQ6LSqa@debian/
    
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Guillaume Nault <gnault@redhat.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jbd2: correctly compare tids with tid_geq function in jbd2_fc_begin_commit [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Thu Aug 1 09:38:08 2024 +0800

    jbd2: correctly compare tids with tid_geq function in jbd2_fc_begin_commit
    
    commit f0e3c14802515f60a47e6ef347ea59c2733402aa upstream.
    
    Use tid_geq to compare tids to work over sequence number wraps.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Cc: stable@kernel.org
    Link: https://patch.msgid.link/20240801013815.2393869-2-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

jbd2: stop waiting for space when jbd2_cleanup_journal_tail() returns error [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Jul 18 19:53:36 2024 +0800

    jbd2: stop waiting for space when jbd2_cleanup_journal_tail() returns error
    
    commit f5cacdc6f2bb2a9bf214469dd7112b43dd2dd68a upstream.
    
    In __jbd2_log_wait_for_space(), we might call jbd2_cleanup_journal_tail()
    to recover some journal space. But if an error occurs while executing
    jbd2_cleanup_journal_tail() (e.g., an EIO), we don't stop waiting for free
    space right away, we try other branches, and if j_committing_transaction
    is NULL (i.e., the tid is 0), we will get the following complain:
    
    ============================================
    JBD2: I/O error when updating journal superblock for sdd-8.
    __jbd2_log_wait_for_space: needed 256 blocks and only had 217 space available
    __jbd2_log_wait_for_space: no way to get more journal space in sdd-8
    ------------[ cut here ]------------
    WARNING: CPU: 2 PID: 139804 at fs/jbd2/checkpoint.c:109 __jbd2_log_wait_for_space+0x251/0x2e0
    Modules linked in:
    CPU: 2 PID: 139804 Comm: kworker/u8:3 Not tainted 6.6.0+ #1
    RIP: 0010:__jbd2_log_wait_for_space+0x251/0x2e0
    Call Trace:
     <TASK>
     add_transaction_credits+0x5d1/0x5e0
     start_this_handle+0x1ef/0x6a0
     jbd2__journal_start+0x18b/0x340
     ext4_dirty_inode+0x5d/0xb0
     __mark_inode_dirty+0xe4/0x5d0
     generic_update_time+0x60/0x70
    [...]
    ============================================
    
    So only if jbd2_cleanup_journal_tail() returns 1, i.e., there is nothing to
    clean up at the moment, continue to try to reclaim free space in other ways.
    
    Note that this fix relies on commit 6f6a6fda2945 ("jbd2: fix ocfs2 corrupt
    when updating journal superblock fails") to make jbd2_cleanup_journal_tail
    return the correct error code.
    
    Fixes: 8c3f25d8950c ("jbd2: don't give up looking for space so easily in __jbd2_log_wait_for_space")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20240718115336.2554501-1-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
jfs: check if leafidx greater than num leaves per dmap tree [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Sat Aug 24 09:25:23 2024 +0800

    jfs: check if leafidx greater than num leaves per dmap tree
    
    [ Upstream commit d64ff0d2306713ff084d4b09f84ed1a8c75ecc32 ]
    
    syzbot report a out of bounds in dbSplit, it because dmt_leafidx greater
    than num leaves per dmap tree, add a checking for dmt_leafidx in dbFindLeaf.
    
    Shaggy:
    Modified sanity check to apply to control pages as well as leaf pages.
    
    Reported-and-tested-by: syzbot+dca05492eff41f604890@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=dca05492eff41f604890
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: fix out-of-bounds in dbNextAG() and diAlloc() [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Mon Aug 19 13:05:46 2024 +0900

    jfs: fix out-of-bounds in dbNextAG() and diAlloc()
    
    [ Upstream commit e63866a475562810500ea7f784099bfe341e761a ]
    
    In dbNextAG() , there is no check for the case where bmp->db_numag is
    greater or same than MAXAG due to a polluted image, which causes an
    out-of-bounds. Therefore, a bounds check should be added in dbMount().
    
    And in dbNextAG(), a check for the case where agpref is greater than
    bmp->db_numag should be added, so an out-of-bounds exception should be
    prevented.
    
    Additionally, a check for the case where agno is greater or same than
    MAXAG should be added in diAlloc() to prevent out-of-bounds.
    
    Reported-by: Jeongjun Park <aha310510@gmail.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: Fix uaf in dbFreeBits [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Sat Aug 24 10:50:48 2024 +0800

    jfs: Fix uaf in dbFreeBits
    
    [ Upstream commit d6c1b3599b2feb5c7291f5ac3a36e5fa7cedb234 ]
    
    [syzbot reported]
    ==================================================================
    BUG: KASAN: slab-use-after-free in __mutex_lock_common kernel/locking/mutex.c:587 [inline]
    BUG: KASAN: slab-use-after-free in __mutex_lock+0xfe/0xd70 kernel/locking/mutex.c:752
    Read of size 8 at addr ffff8880229254b0 by task syz-executor357/5216
    
    CPU: 0 UID: 0 PID: 5216 Comm: syz-executor357 Not tainted 6.11.0-rc3-syzkaller-00156-gd7a5aa4b3c00 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/27/2024
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:93 [inline]
     dump_stack_lvl+0x241/0x360 lib/dump_stack.c:119
     print_address_description mm/kasan/report.c:377 [inline]
     print_report+0x169/0x550 mm/kasan/report.c:488
     kasan_report+0x143/0x180 mm/kasan/report.c:601
     __mutex_lock_common kernel/locking/mutex.c:587 [inline]
     __mutex_lock+0xfe/0xd70 kernel/locking/mutex.c:752
     dbFreeBits+0x7ea/0xd90 fs/jfs/jfs_dmap.c:2390
     dbFreeDmap fs/jfs/jfs_dmap.c:2089 [inline]
     dbFree+0x35b/0x680 fs/jfs/jfs_dmap.c:409
     dbDiscardAG+0x8a9/0xa20 fs/jfs/jfs_dmap.c:1650
     jfs_ioc_trim+0x433/0x670 fs/jfs/jfs_discard.c:100
     jfs_ioctl+0x2d0/0x3e0 fs/jfs/ioctl.c:131
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:907 [inline]
     __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:893
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
    
    Freed by task 5218:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
     kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:579
     poison_slab_object+0xe0/0x150 mm/kasan/common.c:240
     __kasan_slab_free+0x37/0x60 mm/kasan/common.c:256
     kasan_slab_free include/linux/kasan.h:184 [inline]
     slab_free_hook mm/slub.c:2252 [inline]
     slab_free mm/slub.c:4473 [inline]
     kfree+0x149/0x360 mm/slub.c:4594
     dbUnmount+0x11d/0x190 fs/jfs/jfs_dmap.c:278
     jfs_mount_rw+0x4ac/0x6a0 fs/jfs/jfs_mount.c:247
     jfs_remount+0x3d1/0x6b0 fs/jfs/super.c:454
     reconfigure_super+0x445/0x880 fs/super.c:1083
     vfs_cmd_reconfigure fs/fsopen.c:263 [inline]
     vfs_fsconfig_locked fs/fsopen.c:292 [inline]
     __do_sys_fsconfig fs/fsopen.c:473 [inline]
     __se_sys_fsconfig+0xb6e/0xf80 fs/fsopen.c:345
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    [Analysis]
    There are two paths (dbUnmount and jfs_ioc_trim) that generate race
    condition when accessing bmap, which leads to the occurrence of uaf.
    
    Use the lock s_umount to synchronize them, in order to avoid uaf caused
    by race condition.
    
    Reported-and-tested-by: syzbot+3c010e21296f33a5dc16@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: Fix uninit-value access of new_ea in ea_buffer [+ + +]
Author: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
Date:   Wed Sep 4 09:07:58 2024 +0800

    jfs: Fix uninit-value access of new_ea in ea_buffer
    
    [ Upstream commit 2b59ffad47db1c46af25ccad157bb3b25147c35c ]
    
    syzbot reports that lzo1x_1_do_compress is using uninit-value:
    
    =====================================================
    BUG: KMSAN: uninit-value in lzo1x_1_do_compress+0x19f9/0x2510 lib/lzo/lzo1x_compress.c:178
    
    ...
    
    Uninit was stored to memory at:
     ea_put fs/jfs/xattr.c:639 [inline]
    
    ...
    
    Local variable ea_buf created at:
     __jfs_setxattr+0x5d/0x1ae0 fs/jfs/xattr.c:662
     __jfs_xattr_set+0xe6/0x1f0 fs/jfs/xattr.c:934
    
    =====================================================
    
    The reason is ea_buf->new_ea is not initialized properly.
    
    Fix this by using memset to empty its content at the beginning
    in ea_get().
    
    Reported-by: syzbot+02341e0daa42a15ce130@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=02341e0daa42a15ce130
    Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: UBSAN: shift-out-of-bounds in dbFindBits [+ + +]
Author: Remington Brasga <rbrasga@uci.edu>
Date:   Wed Jul 10 00:12:44 2024 +0000

    jfs: UBSAN: shift-out-of-bounds in dbFindBits
    
    [ Upstream commit b0b2fc815e514221f01384f39fbfbff65d897e1c ]
    
    Fix issue with UBSAN throwing shift-out-of-bounds warning.
    
    Reported-by: syzbot+e38d703eeb410b17b473@syzkaller.appspotmail.com
    Signed-off-by: Remington Brasga <rbrasga@uci.edu>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kconfig: qconf: fix buffer overflow in debug links [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Tue Oct 1 18:02:22 2024 +0900

    kconfig: qconf: fix buffer overflow in debug links
    
    [ Upstream commit 984ed20ece1c6c20789ece040cbff3eb1a388fa9 ]
    
    If you enable "Option -> Show Debug Info" and click a link, the program
    terminates with the following error:
    
        *** buffer overflow detected ***: terminated
    
    The buffer overflow is caused by the following line:
    
        strcat(data, "$");
    
    The buffer needs one more byte to accommodate the additional character.
    
    Fixes: c4f7398bee9c ("kconfig: qconf: make debug links work again")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ktest.pl: Avoid false positives with grub2 skip regex [+ + +]
Author: Daniel Jordan <daniel.m.jordan@oracle.com>
Date:   Wed Sep 4 13:55:30 2024 -0400

    ktest.pl: Avoid false positives with grub2 skip regex
    
    [ Upstream commit 2351e8c65404aabc433300b6bf90c7a37e8bbc4d ]
    
    Some distros have grub2 config files with the lines
    
        if [ x"${feature_menuentry_id}" = xy ]; then
          menuentry_id_option="--id"
        else
          menuentry_id_option=""
        fi
    
    which match the skip regex defined for grub2 in get_grub_index():
    
        $skip = '^\s*menuentry';
    
    These false positives cause the grub number to be higher than it
    should be, and the wrong kernel can end up booting.
    
    Grub documents the menuentry command with whitespace between it and the
    title, so make the skip regex reflect this.
    
    Link: https://lore.kernel.org/20240904175530.84175-1-daniel.m.jordan@oracle.com
    Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Acked-by: John 'Warthog9' Hawley (Tenstorrent) <warthog9@eaglescrag.net>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kthread: fix task state in kthread worker if being frozen [+ + +]
Author: Chen Yu <yu.c.chen@intel.com>
Date:   Tue Aug 27 19:23:08 2024 +0800

    kthread: fix task state in kthread worker if being frozen
    
    [ Upstream commit e16c7b07784f3fb03025939c4590b9a7c64970a7 ]
    
    When analyzing a kernel waring message, Peter pointed out that there is a
    race condition when the kworker is being frozen and falls into
    try_to_freeze() with TASK_INTERRUPTIBLE, which could trigger a
    might_sleep() warning in try_to_freeze().  Although the root cause is not
    related to freeze()[1], it is still worthy to fix this issue ahead.
    
    One possible race scenario:
    
            CPU 0                                           CPU 1
            -----                                           -----
    
            // kthread_worker_fn
            set_current_state(TASK_INTERRUPTIBLE);
                                                           suspend_freeze_processes()
                                                             freeze_processes
                                                               static_branch_inc(&freezer_active);
                                                             freeze_kernel_threads
                                                               pm_nosig_freezing = true;
            if (work) { //false
              __set_current_state(TASK_RUNNING);
    
            } else if (!freezing(current)) //false, been frozen
    
                          freezing():
                          if (static_branch_unlikely(&freezer_active))
                            if (pm_nosig_freezing)
                              return true;
              schedule()
            }
    
            // state is still TASK_INTERRUPTIBLE
            try_to_freeze()
              might_sleep() <--- warning
    
    Fix this by explicitly set the TASK_RUNNING before entering
    try_to_freeze().
    
    Link: https://lore.kernel.org/lkml/Zs2ZoAcUsZMX2B%2FI@chenyu5-mobl2/ [1]
    Link: https://lkml.kernel.org/r/20240827112308.181081-1-yu.c.chen@intel.com
    Fixes: b56c0d8937e6 ("kthread: implement kthread_worker")
    Signed-off-by: Chen Yu <yu.c.chen@intel.com>
    Suggested-by: Peter Zijlstra <peterz@infradead.org>
    Suggested-by: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andreas Gruenbacher <agruenba@redhat.com>
    Cc: David Gow <davidgow@google.com>
    Cc: Mateusz Guzik <mjguzik@gmail.com>
    Cc: Mickaël Salaün <mic@digikod.net>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kthread: unpark only parked kthread [+ + +]
Author: Frederic Weisbecker <frederic@kernel.org>
Date:   Fri Sep 13 23:46:34 2024 +0200

    kthread: unpark only parked kthread
    
    commit 214e01ad4ed7158cab66498810094fac5d09b218 upstream.
    
    Calling into kthread unparking unconditionally is mostly harmless when
    the kthread is already unparked. The wake up is then simply ignored
    because the target is not in TASK_PARKED state.
    
    However if the kthread is per CPU, the wake up is preceded by a call
    to kthread_bind() which expects the task to be inactive and in
    TASK_PARKED state, which obviously isn't the case if it is unparked.
    
    As a result, calling kthread_stop() on an unparked per-cpu kthread
    triggers such a warning:
    
            WARNING: CPU: 0 PID: 11 at kernel/kthread.c:525 __kthread_bind_mask kernel/kthread.c:525
             <TASK>
             kthread_stop+0x17a/0x630 kernel/kthread.c:707
             destroy_workqueue+0x136/0xc40 kernel/workqueue.c:5810
             wg_destruct+0x1e2/0x2e0 drivers/net/wireguard/device.c:257
             netdev_run_todo+0xe1a/0x1000 net/core/dev.c:10693
             default_device_exit_batch+0xa14/0xa90 net/core/dev.c:11769
             ops_exit_list net/core/net_namespace.c:178 [inline]
             cleanup_net+0x89d/0xcc0 net/core/net_namespace.c:640
             process_one_work kernel/workqueue.c:3231 [inline]
             process_scheduled_works+0xa2c/0x1830 kernel/workqueue.c:3312
             worker_thread+0x86d/0xd70 kernel/workqueue.c:3393
             kthread+0x2f0/0x390 kernel/kthread.c:389
             ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
             ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
             </TASK>
    
    Fix this with skipping unecessary unparking while stopping a kthread.
    
    Link: https://lkml.kernel.org/r/20240913214634.12557-1-frederic@kernel.org
    Fixes: 5c25b5ff89f0 ("workqueue: Tag bound workers with KTHREAD_IS_PER_CPU")
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Reported-by: syzbot+943d34fa3cf2191e3068@syzkaller.appspotmail.com
    Tested-by: syzbot+943d34fa3cf2191e3068@syzkaller.appspotmail.com
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: Hillf Danton <hdanton@sina.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/buildid: harden build ID parsing logic [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu Aug 29 10:42:23 2024 -0700

    lib/buildid: harden build ID parsing logic
    
    [ Upstream commit 905415ff3ffb1d7e5afa62bacabd79776bd24606 ]
    
    Harden build ID parsing logic, adding explicit READ_ONCE() where it's
    important to have a consistent value read and validated just once.
    
    Also, as pointed out by Andi Kleen, we need to make sure that entire ELF
    note is within a page bounds, so move the overflow check up and add an
    extra note_size boundaries validation.
    
    Fixes tag below points to the code that moved this code into
    lib/buildid.c, and then subsequently was used in perf subsystem, making
    this code exposed to perf_event_open() users in v5.12+.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Eduard Zingerman <eddyz87@gmail.com>
    Reviewed-by: Jann Horn <jannh@google.com>
    Suggested-by: Andi Kleen <ak@linux.intel.com>
    Fixes: bd7525dacd7e ("bpf: Move stack_map_get_build_id into lib")
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20240829174232.3133883-2-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 5.15.168 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Oct 17 15:12:02 2024 +0200

    Linux 5.15.168
    
    Link: https://lore.kernel.org/r/20241015112440.309539031@linuxfoundation.org
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lockdep: fix deadlock issue between lockdep and rcu [+ + +]
Author: Zhiguo Niu <zhiguo.niu@unisoc.com>
Date:   Thu Jun 20 22:54:34 2024 +0000

    lockdep: fix deadlock issue between lockdep and rcu
    
    commit a6f88ac32c6e63e69c595bfae220d8641704c9b7 upstream.
    
    There is a deadlock scenario between lockdep and rcu when
    rcu nocb feature is enabled, just as following call stack:
    
         rcuop/x
    -000|queued_spin_lock_slowpath(lock = 0xFFFFFF817F2A8A80, val = ?)
    -001|queued_spin_lock(inline) // try to hold nocb_gp_lock
    -001|do_raw_spin_lock(lock = 0xFFFFFF817F2A8A80)
    -002|__raw_spin_lock_irqsave(inline)
    -002|_raw_spin_lock_irqsave(lock = 0xFFFFFF817F2A8A80)
    -003|wake_nocb_gp_defer(inline)
    -003|__call_rcu_nocb_wake(rdp = 0xFFFFFF817F30B680)
    -004|__call_rcu_common(inline)
    -004|call_rcu(head = 0xFFFFFFC082EECC28, func = ?)
    -005|call_rcu_zapped(inline)
    -005|free_zapped_rcu(ch = ?)// hold graph lock
    -006|rcu_do_batch(rdp = 0xFFFFFF817F245680)
    -007|nocb_cb_wait(inline)
    -007|rcu_nocb_cb_kthread(arg = 0xFFFFFF817F245680)
    -008|kthread(_create = 0xFFFFFF80803122C0)
    -009|ret_from_fork(asm)
    
         rcuop/y
    -000|queued_spin_lock_slowpath(lock = 0xFFFFFFC08291BBC8, val = 0)
    -001|queued_spin_lock()
    -001|lockdep_lock()
    -001|graph_lock() // try to hold graph lock
    -002|lookup_chain_cache_add()
    -002|validate_chain()
    -003|lock_acquire
    -004|_raw_spin_lock_irqsave(lock = 0xFFFFFF817F211D80)
    -005|lock_timer_base(inline)
    -006|mod_timer(inline)
    -006|wake_nocb_gp_defer(inline)// hold nocb_gp_lock
    -006|__call_rcu_nocb_wake(rdp = 0xFFFFFF817F2A8680)
    -007|__call_rcu_common(inline)
    -007|call_rcu(head = 0xFFFFFFC0822E0B58, func = ?)
    -008|call_rcu_hurry(inline)
    -008|rcu_sync_call(inline)
    -008|rcu_sync_func(rhp = 0xFFFFFFC0822E0B58)
    -009|rcu_do_batch(rdp = 0xFFFFFF817F266680)
    -010|nocb_cb_wait(inline)
    -010|rcu_nocb_cb_kthread(arg = 0xFFFFFF817F266680)
    -011|kthread(_create = 0xFFFFFF8080363740)
    -012|ret_from_fork(asm)
    
    rcuop/x and rcuop/y are rcu nocb threads with the same nocb gp thread.
    This patch release the graph lock before lockdep call_rcu.
    
    Fixes: a0b0fd53e1e6 ("locking/lockdep: Free lock classes that are no longer in use")
    Cc: stable@vger.kernel.org
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Waiman Long <longman@redhat.com>
    Cc: Carlos Llamas <cmllamas@google.com>
    Cc: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
    Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com>
    Reviewed-by: Waiman Long <longman@redhat.com>
    Reviewed-by: Carlos Llamas <cmllamas@google.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Acked-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
    Link: https://lore.kernel.org/r/20240620225436.3127927-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
m68k: Fix kernel_clone_args.flags in m68k_clone() [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Sun Aug 11 10:12:29 2024 +1000

    m68k: Fix kernel_clone_args.flags in m68k_clone()
    
    [ Upstream commit 09b3d870faa7bc3e96c0978ab3cf4e96e4b15571 ]
    
    Stan Johnson recently reported a failure from the 'dump' command:
    
      DUMP: Date of this level 0 dump: Fri Aug  9 23:37:15 2024
      DUMP: Dumping /dev/sda (an unlisted file system) to /dev/null
      DUMP: Label: none
      DUMP: Writing 10 Kilobyte records
      DUMP: mapping (Pass I) [regular files]
      DUMP: mapping (Pass II) [directories]
      DUMP: estimated 3595695 blocks.
      DUMP: Context save fork fails in parent 671
    
    The dump program uses the clone syscall with the CLONE_IO flag, that is,
    flags == 0x80000000. When that value is promoted from long int to u64 by
    m68k_clone(), it undergoes sign-extension. The new value includes
    CLONE_INTO_CGROUP so the validation in cgroup_css_set_fork() fails and
    the syscall returns -EBADF. Avoid sign-extension by casting to u32.
    
    Reported-by: Stan Johnson <userm57@yahoo.com>
    Closes: https://lists.debian.org/debian-68k/2024/08/msg00000.html
    Fixes: 6aabc1facdb2 ("m68k: Implement copy_thread_tls()")
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/3463f1e5d4e95468dc9f3368f2b78ffa7b72199b.1723335149.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mailbox: bcm2835: Fix timeout during suspend mode [+ + +]
Author: Stefan Wahren <wahrenst@gmx.net>
Date:   Wed Aug 21 23:40:44 2024 +0200

    mailbox: bcm2835: Fix timeout during suspend mode
    
    [ Upstream commit dc09f007caed3b2f6a3b6bd7e13777557ae22bfd ]
    
    During noirq suspend phase the Raspberry Pi power driver suffer of
    firmware property timeouts. The reason is that the IRQ of the underlying
    BCM2835 mailbox is disabled and rpi_firmware_property_list() will always
    run into a timeout [1].
    
    Since the VideoCore side isn't consider as a wakeup source, set the
    IRQF_NO_SUSPEND flag for the mailbox IRQ in order to keep it enabled
    during suspend-resume cycle.
    
    [1]
    PM: late suspend of devices complete after 1.754 msecs
    WARNING: CPU: 0 PID: 438 at drivers/firmware/raspberrypi.c:128
     rpi_firmware_property_list+0x204/0x22c
    Firmware transaction 0x00028001 timeout
    Modules linked in:
    CPU: 0 PID: 438 Comm: bash Tainted: G         C         6.9.3-dirty #17
    Hardware name: BCM2835
    Call trace:
    unwind_backtrace from show_stack+0x18/0x1c
    show_stack from dump_stack_lvl+0x34/0x44
    dump_stack_lvl from __warn+0x88/0xec
    __warn from warn_slowpath_fmt+0x7c/0xb0
    warn_slowpath_fmt from rpi_firmware_property_list+0x204/0x22c
    rpi_firmware_property_list from rpi_firmware_property+0x68/0x8c
    rpi_firmware_property from rpi_firmware_set_power+0x54/0xc0
    rpi_firmware_set_power from _genpd_power_off+0xe4/0x148
    _genpd_power_off from genpd_sync_power_off+0x7c/0x11c
    genpd_sync_power_off from genpd_finish_suspend+0xcc/0xe0
    genpd_finish_suspend from dpm_run_callback+0x78/0xd0
    dpm_run_callback from device_suspend_noirq+0xc0/0x238
    device_suspend_noirq from dpm_suspend_noirq+0xb0/0x168
    dpm_suspend_noirq from suspend_devices_and_enter+0x1b8/0x5ac
    suspend_devices_and_enter from pm_suspend+0x254/0x2e4
    pm_suspend from state_store+0xa8/0xd4
    state_store from kernfs_fop_write_iter+0x154/0x1a0
    kernfs_fop_write_iter from vfs_write+0x12c/0x184
    vfs_write from ksys_write+0x78/0xc0
    ksys_write from ret_fast_syscall+0x0/0x54
    Exception stack(0xcc93dfa8 to 0xcc93dff0)
    [...]
    PM: noirq suspend of devices complete after 3095.584 msecs
    
    Link: https://github.com/raspberrypi/firmware/issues/1894
    Fixes: 0bae6af6d704 ("mailbox: Enable BCM2835 mailbox support")
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: rockchip: fix a typo in module autoloading [+ + +]
Author: Liao Chen <liaochen4@huawei.com>
Date:   Wed Aug 14 02:51:47 2024 +0000

    mailbox: rockchip: fix a typo in module autoloading
    
    [ Upstream commit e92d87c9c5d769e4cb1dd7c90faa38dddd7e52e3 ]
    
    MODULE_DEVICE_TABLE(of, rockchip_mbox_of_match) could let the module
    properly autoloaded based on the alias from of_device_id table. It
    should be 'rockchip_mbox_of_match' instead of 'rockchp_mbox_of_match',
    just fix it.
    
    Fixes: f70ed3b5dc8b ("mailbox: rockchip: Add Rockchip mailbox driver")
    Signed-off-by: Liao Chen <liaochen4@huawei.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mctp: Handle error of rtnl_register_module(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Oct 8 11:47:35 2024 -0700

    mctp: Handle error of rtnl_register_module().
    
    [ Upstream commit d51705614f668254cc5def7490df76f9680b4659 ]
    
    Since introduced, mctp has been ignoring the returned value of
    rtnl_register_module(), which could fail silently.
    
    Handling the error allows users to view a module as an all-or-nothing
    thing in terms of the rtnetlink functionality.  This prevents syzkaller
    from reporting spurious errors from its tests, where OOM often occurs
    and module is automatically loaded.
    
    Let's handle the errors by rtnl_register_many().
    
    Fixes: 583be982d934 ("mctp: Add device handling and netlink interface")
    Fixes: 831119f88781 ("mctp: Add neighbour netlink interface")
    Fixes: 06d2f4c583a7 ("mctp: Add netlink route management")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Jeremy Kerr <jk@codeconstruct.com.au>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: i2c: imx335: Enable regulator supplies [+ + +]
Author: Kieran Bingham <kieran.bingham@ideasonboard.com>
Date:   Mon Dec 11 18:29:46 2023 +0530

    media: i2c: imx335: Enable regulator supplies
    
    [ Upstream commit fea91ee73b7cd19f08017221923d789f984abc54 ]
    
    Provide support for enabling and disabling regulator supplies to control
    power to the camera sensor.
    
    While updating the power on function, document that a sleep is
    represented as 'T4' in the datasheet power on sequence.
    
    Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Stable-dep-of: 99d30e2fdea4 ("media: imx335: Fix reset-gpio handling")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: imx335: Fix reset-gpio handling [+ + +]
Author: Umang Jain <umang.jain@ideasonboard.com>
Date:   Fri Aug 30 11:41:52 2024 +0530

    media: imx335: Fix reset-gpio handling
    
    [ Upstream commit 99d30e2fdea4086be4e66e2deb10de854b547ab8 ]
    
    Rectify the logical value of reset-gpio so that it is set to
    0 (disabled) during power-on and to 1 (enabled) during power-off.
    
    Set the reset-gpio to GPIO_OUT_HIGH at initialization time to make
    sure it starts off in reset. Also drop the "Set XCLR" comment which
    is not-so-informative.
    
    The existing usage of imx335 had reset-gpios polarity inverted
    (GPIO_ACTIVE_HIGH) in their device-tree sources. With this patch
    included, those DTS will not be able to stream imx335 anymore. The
    reset-gpio polarity will need to be rectified in the device-tree
    sources as shown in [1] example, in order to get imx335 functional
    again (as it remains in reset prior to this fix).
    
    Cc: stable@vger.kernel.org
    Fixes: 45d19b5fb9ae ("media: i2c: Add imx335 camera sensor driver")
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Link: https://lore.kernel.org/linux-media/20240729110437.199428-1-umang.jain@ideasonboard.com/
    Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: sun4i_csi: Implement link validate for sun4i_csi subdev [+ + +]
Author: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Date:   Wed Jun 19 02:46:16 2024 +0300

    media: sun4i_csi: Implement link validate for sun4i_csi subdev
    
    commit 2dc5d5d401f5c6cecd97800ffef82e8d17d228f0 upstream.
    
    The sun4i_csi driver doesn't implement link validation for the subdev it
    registers, leaving the link between the subdev and its source
    unvalidated. Fix it, using the v4l2_subdev_link_validate() helper.
    
    Fixes: 577bbf23b758 ("media: sunxi: Add A10 CSI driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Acked-by: Chen-Yu Tsai <wens@csie.org>
    Reviewed-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
    Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: uapi/linux/cec.h: cec_msg_set_reply_to: zero flags [+ + +]
Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Date:   Wed Aug 7 09:22:10 2024 +0200

    media: uapi/linux/cec.h: cec_msg_set_reply_to: zero flags
    
    commit 599f6899051cb70c4e0aa9fd591b9ee220cb6f14 upstream.
    
    The cec_msg_set_reply_to() helper function never zeroed the
    struct cec_msg flags field, this can cause unexpected behavior
    if flags was uninitialized to begin with.
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Fixes: 0dbacebede1e ("[media] cec: move the CEC framework out of staging and to media")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: usbtv: Remove useless locks in usbtv_video_free() [+ + +]
Author: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Date:   Sat Mar 2 11:37:08 2024 +0100

    media: usbtv: Remove useless locks in usbtv_video_free()
    
    [ Upstream commit 65e6a2773d655172143cc0b927cdc89549842895 ]
    
    Remove locks calls in usbtv_video_free() because
    are useless and may led to a deadlock as reported here:
    https://syzkaller.appspot.com/x/bisect.txt?x=166dc872180000
    Also remove usbtv_stop() call since it will be called when
    unregistering the device.
    
    Before 'c838530d230b' this issue would only be noticed if you
    disconnect while streaming and now it is noticeable even when
    disconnecting while not streaming.
    
    Fixes: c838530d230b ("media: media videobuf2: Be more flexible on the number of queue stored buffers")
    Fixes: f3d27f34fdd7 ("[media] usbtv: Add driver for Fushicai USBTV007 video frame grabber")
    
    Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
    Reviewed-by: Tomasz Figa <tfiga@chromium.org>
    Tested-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    [hverkuil: fix minor spelling mistake in log message]
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: venus: fix use after free bug in venus_remove due to race condition [+ + +]
Author: Zheng Wang <zyytlz.wz@163.com>
Date:   Tue Jun 18 14:55:59 2024 +0530

    media: venus: fix use after free bug in venus_remove due to race condition
    
    commit c5a85ed88e043474161bbfe54002c89c1cb50ee2 upstream.
    
    in venus_probe, core->work is bound with venus_sys_error_handler, which is
    used to handle error. The code use core->sys_err_done to make sync work.
    The core->work is started in venus_event_notify.
    
    If we call venus_remove, there might be an unfished work. The possible
    sequence is as follows:
    
    CPU0                  CPU1
    
                         |venus_sys_error_handler
    venus_remove         |
    hfi_destroy                      |
    venus_hfi_destroy        |
    kfree(hdev);         |
                         |hfi_reinit
                                             |venus_hfi_queues_reinit
                         |//use hdev
    
    Fix it by canceling the work in venus_remove.
    
    Cc: stable@vger.kernel.org
    Fixes: af2c3834c8ca ("[media] media: venus: adding core part and helper functions")
    Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
    Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
    Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: videobuf2-core: clear memory related fields in __vb2_plane_dmabuf_put() [+ + +]
Author: Yunke Cao <yunkec@chromium.org>
Date:   Wed Aug 14 11:06:40 2024 +0900

    media: videobuf2-core: clear memory related fields in __vb2_plane_dmabuf_put()
    
    [ Upstream commit 6a9c97ab6b7e85697e0b74e86062192a5ffffd99 ]
    
    Clear vb2_plane's memory related fields in __vb2_plane_dmabuf_put(),
    including bytesused, length, fd and data_offset.
    
    Remove the duplicated code in __prepare_dmabuf().
    
    Signed-off-by: Yunke Cao <yunkec@chromium.org>
    Acked-by: Tomasz Figa <tfiga@chromium.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
microblaze: don't treat zero reserved memory regions as error [+ + +]
Author: Mike Rapoport <rppt@kernel.org>
Date:   Mon Jul 29 08:33:27 2024 +0300

    microblaze: don't treat zero reserved memory regions as error
    
    [ Upstream commit 0075df288dd8a7abfe03b3766176c393063591dd ]
    
    Before commit 721f4a6526da ("mm/memblock: remove empty dummy entry") the
    check for non-zero of memblock.reserved.cnt in mmu_init() would always
    be true either because  memblock.reserved.cnt is initialized to 1 or
    because there were memory reservations earlier.
    
    The removal of dummy empty entry in memblock caused this check to fail
    because now memblock.reserved.cnt is initialized to 0.
    
    Remove the check for non-zero of memblock.reserved.cnt because it's
    perfectly fine to have an empty memblock.reserved array that early in
    boot.
    
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Mike Rapoport <rppt@kernel.org>
    Reviewed-by: Wei Yang <richard.weiyang@gmail.com>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20240729053327.4091459-1-rppt@kernel.org
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
minmax: reduce min/max macro expansion in atomisp driver [+ + +]
Author: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Date:   Wed Sep 11 18:51:11 2024 +0100

    minmax: reduce min/max macro expansion in atomisp driver
    
    commit 7c6a3a65ace70f12b27b1a27c9a69cb791dc6e91 upstream.
    
    Avoid unnecessary nested min()/max() which results in egregious macro
    expansion.
    
    Use clamp_t() as this introduces the least possible expansion, and turn
    the {s,u}DIGIT_FITTING() macros into inline functions to avoid the
    nested expansion.
    
    This resolves an issue with slackware 15.0 32-bit compilation as
    reported by Richard Narron.
    
    Presumably the min/max fixups would be difficult to backport, this patch
    should be easier and fix's Richard's problem in 5.15.
    
    Reported-by: Richard Narron <richard@aaazen.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Closes: https://lore.kernel.org/all/4a5321bd-b1f-1832-f0c-cea8694dc5aa@aaazen.com/
    Fixes: 867046cc7027 ("minmax: relax check to allow comparison between unsigned arguments and signed constants")
    Cc: stable@vger.kernel.org
    Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: avoid leaving partial pfn mappings around in error case [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Wed Sep 11 17:11:23 2024 -0700

    mm: avoid leaving partial pfn mappings around in error case
    
    commit 79a61cc3fc0466ad2b7b89618a6157785f0293b3 upstream.
    
    As Jann points out, PFN mappings are special, because unlike normal
    memory mappings, there is no lifetime information associated with the
    mapping - it is just a raw mapping of PFNs with no reference counting of
    a 'struct page'.
    
    That's all very much intentional, but it does mean that it's easy to
    mess up the cleanup in case of errors.  Yes, a failed mmap() will always
    eventually clean up any partial mappings, but without any explicit
    lifetime in the page table mapping itself, it's very easy to do the
    error handling in the wrong order.
    
    In particular, it's easy to mistakenly free the physical backing store
    before the page tables are actually cleaned up and (temporarily) have
    stale dangling PTE entries.
    
    To make this situation less error-prone, just make sure that any partial
    pfn mapping is torn down early, before any other error handling.
    
    Reported-and-tested-by: Jann Horn <jannh@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Simona Vetter <simona.vetter@ffwll.ch>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: krealloc: consider spare memory for __GFP_ZERO [+ + +]
Author: Danilo Krummrich <dakr@kernel.org>
Date:   Tue Aug 13 00:34:34 2024 +0200

    mm: krealloc: consider spare memory for __GFP_ZERO
    
    commit 1a83a716ec233990e1fd5b6fbb1200ade63bf450 upstream.
    
    As long as krealloc() is called with __GFP_ZERO consistently, starting
    with the initial memory allocation, __GFP_ZERO should be fully honored.
    
    However, if for an existing allocation krealloc() is called with a
    decreased size, it is not ensured that the spare portion the allocation is
    zeroed.  Thus, if krealloc() is subsequently called with a larger size
    again, __GFP_ZERO can't be fully honored, since we don't know the previous
    size, but only the bucket size.
    
    Example:
    
            buf = kzalloc(64, GFP_KERNEL);
            memset(buf, 0xff, 64);
    
            buf = krealloc(buf, 48, GFP_KERNEL | __GFP_ZERO);
    
            /* After this call the last 16 bytes are still 0xff. */
            buf = krealloc(buf, 64, GFP_KERNEL | __GFP_ZERO);
    
    Fix this, by explicitly setting spare memory to zero, when shrinking an
    allocation with __GFP_ZERO flag set or init_on_alloc enabled.
    
    Link: https://lkml.kernel.org/r/20240812223707.32049-1-dakr@kernel.org
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Acked-by: Vlastimil Babka <vbabka@suse.cz>
    Acked-by: David Rientjes <rientjes@google.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: only enforce minimum stack gap size if it's sensible [+ + +]
Author: David Gow <davidgow@google.com>
Date:   Sat Aug 3 15:46:41 2024 +0800

    mm: only enforce minimum stack gap size if it's sensible
    
    commit 69b50d4351ed924f29e3d46b159e28f70dfc707f upstream.
    
    The generic mmap_base code tries to leave a gap between the top of the
    stack and the mmap base address, but enforces a minimum gap size (MIN_GAP)
    of 128MB, which is too large on some setups.  In particular, on arm tasks
    without ADDR_LIMIT_32BIT, the STACK_TOP value is less than 128MB, so it's
    impossible to fit such a gap in.
    
    Only enforce this minimum if MIN_GAP < MAX_GAP, as we'd prefer to honour
    MAX_GAP, which is defined proportionally, so scales better and always
    leaves us with both _some_ stack space and some room for mmap.
    
    This fixes the usercopy KUnit test suite on 32-bit arm, as it doesn't set
    any personality flags so gets the default (in this case 26-bit) task size.
    This test can be run with: ./tools/testing/kunit/kunit.py run --arch arm
    usercopy --make_options LLVM=1
    
    Link: https://lkml.kernel.org/r/20240803074642.1849623-2-davidgow@google.com
    Fixes: dba79c3df4a2 ("arm: use generic mmap top-down layout and brk randomization")
    Signed-off-by: David Gow <davidgow@google.com>
    Reviewed-by: Kees Cook <kees@kernel.org>
    Cc: Alexandre Ghiti <alex@ghiti.fr>
    Cc: Linus Walleij <linus.walleij@linaro.org>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mount: handle OOM on mnt_warn_timestamp_expiry [+ + +]
Author: Olaf Hering <olaf@aepfle.de>
Date:   Tue Jul 30 10:58:13 2024 +0200

    mount: handle OOM on mnt_warn_timestamp_expiry
    
    [ Upstream commit 4bcda1eaf184e308f07f9c61d3a535f9ce477ce8 ]
    
    If no page could be allocated, an error pointer was used as format
    string in pr_warn.
    
    Rearrange the code to return early in case of OOM. Also add a check
    for the return value of d_path.
    
    Fixes: f8b92ba67c5d ("mount: Add mount warning for impending timestamp expiry")
    Signed-off-by: Olaf Hering <olaf@aepfle.de>
    Link: https://lore.kernel.org/r/20240730085856.32385-1-olaf@aepfle.de
    [brauner: rewrite commit and commit message]
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mount: warn only once about timestamp range expiration [+ + +]
Author: Anthony Iliopoulos <ailiop@suse.com>
Date:   Tue Mar 22 14:39:22 2022 -0700

    mount: warn only once about timestamp range expiration
    
    [ Upstream commit a128b054ce029554a4a52fc3abb8c1df8bafcaef ]
    
    Commit f8b92ba67c5d ("mount: Add mount warning for impending timestamp
    expiry") introduced a mount warning regarding filesystem timestamp
    limits, that is printed upon each writable mount or remount.
    
    This can result in a lot of unnecessary messages in the kernel log in
    setups where filesystems are being frequently remounted (or mounted
    multiple times).
    
    Avoid this by setting a superblock flag which indicates that the warning
    has been emitted at least once for any particular mount, as suggested in
    [1].
    
    Link: https://lore.kernel.org/CAHk-=wim6VGnxQmjfK_tDg6fbHYKL4EFkmnTjVr9QnRqjDBAeA@mail.gmail.com/ [1]
    Link: https://lkml.kernel.org/r/20220119202934.26495-1-ailiop@suse.com
    Signed-off-by: Anthony Iliopoulos <ailiop@suse.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Deepa Dinamani <deepa.kernel@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Stable-dep-of: 4bcda1eaf184 ("mount: handle OOM on mnt_warn_timestamp_expiry")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mptcp: pm: do not remove closing subflows [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue Oct 8 13:04:55 2024 +0200

    mptcp: pm: do not remove closing subflows
    
    commit db0a37b7ac27d8ca27d3dc676a16d081c16ec7b9 upstream.
    
    In a previous fix, the in-kernel path-manager has been modified not to
    retrigger the removal of a subflow if it was already closed, e.g. when
    the initial subflow is removed, but kept in the subflows list.
    
    To be complete, this fix should also skip the subflows that are in any
    closing state: mptcp_close_ssk() will initiate the closure, but the
    switch to the TCP_CLOSE state depends on the other peer.
    
    Fixes: 58e1b66b4e4b ("mptcp: pm: do not remove already closed subflows")
    Cc: stable@vger.kernel.org
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20241008-net-mptcp-fallback-fixes-v1-4-c6fb8e93e551@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: Fix uaf in __timer_delete_sync [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Tue Sep 10 17:58:56 2024 +0800

    mptcp: pm: Fix uaf in __timer_delete_sync
    
    commit b4cd80b0338945a94972ac3ed54f8338d2da2076 upstream.
    
    There are two paths to access mptcp_pm_del_add_timer, result in a race
    condition:
    
         CPU1                               CPU2
         ====                               ====
         net_rx_action
         napi_poll                          netlink_sendmsg
         __napi_poll                        netlink_unicast
         process_backlog                    netlink_unicast_kernel
         __netif_receive_skb                genl_rcv
         __netif_receive_skb_one_core       netlink_rcv_skb
         NF_HOOK                            genl_rcv_msg
         ip_local_deliver_finish            genl_family_rcv_msg
         ip_protocol_deliver_rcu            genl_family_rcv_msg_doit
         tcp_v4_rcv                         mptcp_pm_nl_flush_addrs_doit
         tcp_v4_do_rcv                      mptcp_nl_remove_addrs_list
         tcp_rcv_established                mptcp_pm_remove_addrs_and_subflows
         tcp_data_queue                     remove_anno_list_by_saddr
         mptcp_incoming_options             mptcp_pm_del_add_timer
         mptcp_pm_del_add_timer             kfree(entry)
    
    In remove_anno_list_by_saddr(running on CPU2), after leaving the critical
    zone protected by "pm.lock", the entry will be released, which leads to the
    occurrence of uaf in the mptcp_pm_del_add_timer(running on CPU1).
    
    Keeping a reference to add_timer inside the lock, and calling
    sk_stop_timer_sync() with this reference, instead of "entry->add_timer".
    
    Move list_del(&entry->list) to mptcp_pm_del_add_timer and inside the pm lock,
    do not directly access any members of the entry outside the pm lock, which
    can avoid similar "entry->x" uaf.
    
    Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout")
    Cc: stable@vger.kernel.org
    Reported-and-tested-by: syzbot+f3a31fb909db9b2a5c4d@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=f3a31fb909db9b2a5c4d
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Link: https://patch.msgid.link/tencent_7142963A37944B4A74EF76CD66EA3C253609@qq.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mtd: powernv: Add check devm_kasprintf() returned value [+ + +]
Author: Charles Han <hanchunchao@inspur.com>
Date:   Wed Aug 28 17:24:27 2024 +0800

    mtd: powernv: Add check devm_kasprintf() returned value
    
    [ Upstream commit 395999829880a106bb95f0ce34e6e4c2b43c6a5d ]
    
    devm_kasprintf() can return a NULL pointer on failure but this
    returned value is not checked.
    
    Fixes: acfe63ec1c59 ("mtd: Convert to using %pOFn instead of device_node.name")
    Signed-off-by: Charles Han <hanchunchao@inspur.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/linux-mtd/20240828092427.128177-1-hanchunchao@inspur.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mtd: slram: insert break after errors in parsing the map [+ + +]
Author: Mirsad Todorovac <mtodorovac69@gmail.com>
Date:   Fri Jul 12 01:43:20 2024 +0200

    mtd: slram: insert break after errors in parsing the map
    
    [ Upstream commit 336c218dd7f0588ed8a7345f367975a00a4f003f ]
    
    GCC 12.3.0 compiler on linux-next next-20240709 tree found the execution
    path in which, due to lazy evaluation, devlength isn't initialised with the
    parsed string:
    
       289          while (map) {
       290                  devname = devstart = devlength = NULL;
       291
       292                  if (!(devname = strsep(&map, ","))) {
       293                          E("slram: No devicename specified.\n");
       294                          break;
       295                  }
       296                  T("slram: devname = %s\n", devname);
       297                  if ((!map) || (!(devstart = strsep(&map, ",")))) {
       298                          E("slram: No devicestart specified.\n");
       299                  }
       300                  T("slram: devstart = %s\n", devstart);
     → 301                  if ((!map) || (!(devlength = strsep(&map, ",")))) {
       302                          E("slram: No devicelength / -end specified.\n");
       303                  }
     → 304                  T("slram: devlength = %s\n", devlength);
       305                  if (parse_cmdline(devname, devstart, devlength) != 0) {
       306                          return(-EINVAL);
       307                  }
    
    Parsing should be finished after map == NULL, so a break is best inserted after
    each E("slram: ... \n") error message.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: Miquel Raynal <miquel.raynal@bootlin.com>
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Vignesh Raghavendra <vigneshr@ti.com>
    Cc: linux-mtd@lists.infradead.org
    Signed-off-by: Mirsad Todorovac <mtodorovac69@gmail.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/linux-mtd/20240711234319.637824-1-mtodorovac69@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5: Add IFC bits and enums for flow meter [+ + +]
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Wed Jun 8 13:04:47 2022 -0700

    net/mlx5: Add IFC bits and enums for flow meter
    
    [ Upstream commit f5d23ee137e51b4e5cd5d263b144d5e6719f6e52 ]
    
    Add/extend structure layouts and defines for flow meter.
    
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Reviewed-by: Ariel Levkovich <lariel@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Stable-dep-of: 452ef7f86036 ("net/mlx5: Add missing masks and QoS bit masks for scheduling elements")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Add missing masks and QoS bit masks for scheduling elements [+ + +]
Author: Carolina Jubran <cjubran@nvidia.com>
Date:   Mon Aug 5 10:03:20 2024 +0300

    net/mlx5: Add missing masks and QoS bit masks for scheduling elements
    
    [ Upstream commit 452ef7f86036392005940de54228d42ca0044192 ]
    
    Add the missing masks for supported element types and Transmit
    Scheduling Arbiter (TSAR) types in scheduling elements.
    
    Also, add the corresponding bit masks for these types in the QoS
    capabilities of a NIC scheduler.
    
    Fixes: 214baf22870c ("net/mlx5e: Support HTB offload")
    Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
    Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Add support to create match definer [+ + +]
Author: Maor Gottlieb <maorg@nvidia.com>
Date:   Tue Jul 6 17:48:26 2021 +0300

    net/mlx5: Add support to create match definer
    
    [ Upstream commit e7e2519e3632396a25031b7e828ed35332e5dd07 ]
    
    Introduce new APIs to create and destroy flow matcher
    for given format id.
    
    Flow match definer object is used for defining the fields and
    mask used for the hash calculation. User should mask the desired
    fields like done in the match criteria.
    
    This object is assigned to flow group of type hash. In this flow
    group type, packets lookup is done based on the hash result.
    
    This patch also adds the required bits to create such flow group.
    
    Signed-off-by: Maor Gottlieb <maorg@nvidia.com>
    Reviewed-by: Mark Bloch <mbloch@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Stable-dep-of: 452ef7f86036 ("net/mlx5: Add missing masks and QoS bit masks for scheduling elements")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Added cond_resched() to crdump collection [+ + +]
Author: Mohamed Khalfella <mkhalfella@purestorage.com>
Date:   Wed Sep 4 22:02:48 2024 -0600

    net/mlx5: Added cond_resched() to crdump collection
    
    [ Upstream commit ec793155894140df7421d25903de2e6bc12c695b ]
    
    Collecting crdump involves reading vsc registers from pci config space
    of mlx device, which can take long time to complete. This might result
    in starving other threads waiting to run on the cpu.
    
    Numbers I got from testing ConnectX-5 Ex MCX516A-CDAT in the lab:
    
    - mlx5_vsc_gw_read_block_fast() was called with length = 1310716.
    - mlx5_vsc_gw_read_fast() reads 4 bytes at a time. It was not used to
      read the entire 1310716 bytes. It was called 53813 times because
      there are jumps in read_addr.
    - On average mlx5_vsc_gw_read_fast() took 35284.4ns.
    - In total mlx5_vsc_wait_on_flag() called vsc_read() 54707 times.
      The average time for each call was 17548.3ns. In some instances
      vsc_read() was called more than one time when the flag was not set.
      As expected the thread released the cpu after 16 iterations in
      mlx5_vsc_wait_on_flag().
    - Total time to read crdump was 35284.4ns * 53813 ~= 1.898s.
    
    It was seen in the field that crdump can take more than 5 seconds to
    complete. During that time mlx5_vsc_wait_on_flag() did not release the
    cpu because it did not complete 16 iterations. It is believed that pci
    config reads were slow. Adding cond_resched() every 128 register read
    improves the situation. In the common case the, crdump takes ~1.8989s,
    the thread yields the cpu every ~4.51ms. If crdump takes ~5s, the thread
    yields the cpu every ~18.0ms.
    
    Fixes: 8b9d8baae1de ("net/mlx5: Add Crdump support")
    Reviewed-by: Yuanyuan Zhong <yzhong@purestorage.com>
    Signed-off-by: Mohamed Khalfella <mkhalfella@purestorage.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Explicitly set scheduling element and TSAR type [+ + +]
Author: Carolina Jubran <cjubran@nvidia.com>
Date:   Mon Sep 2 11:46:14 2024 +0300

    net/mlx5: Explicitly set scheduling element and TSAR type
    
    [ Upstream commit c88146abe4d0f8cf659b2b8883fdc33936d2e3b8 ]
    
    Ensure the scheduling element type and TSAR type are explicitly
    initialized in the QoS rate group creation.
    
    This prevents potential issues due to default values.
    
    Fixes: 1ae258f8b343 ("net/mlx5: E-switch, Introduce rate limiting groups API")
    Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
    Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix error path in multi-packet WQE transmit [+ + +]
Author: Gerd Bayer <gbayer@linux.ibm.com>
Date:   Tue Sep 10 10:53:51 2024 +0200

    net/mlx5: Fix error path in multi-packet WQE transmit
    
    [ Upstream commit 2bcae12c795f32ddfbf8c80d1b5f1d3286341c32 ]
    
    Remove the erroneous unmap in case no DMA mapping was established
    
    The multi-packet WQE transmit code attempts to obtain a DMA mapping for
    the skb. This could fail, e.g. under memory pressure, when the IOMMU
    driver just can't allocate more memory for page tables. While the code
    tries to handle this in the path below the err_unmap label it erroneously
    unmaps one entry from the sq's FIFO list of active mappings. Since the
    current map attempt failed this unmap is removing some random DMA mapping
    that might still be required. If the PCI function now presents that IOVA,
    the IOMMU may assumes a rogue DMA access and e.g. on s390 puts the PCI
    function in error state.
    
    The erroneous behavior was seen in a stress-test environment that created
    memory pressure.
    
    Fixes: 5af75c747e2a ("net/mlx5e: Enhanced TX MPWQE for SKBs")
    Signed-off-by: Gerd Bayer <gbayer@linux.ibm.com>
    Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Acked-by: Maxim Mikityanskiy <maxtram95@gmail.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Add missing link modes to ptys2ethtool_map [+ + +]
Author: Shahar Shitrit <shshitrit@nvidia.com>
Date:   Sun Aug 11 13:56:13 2024 +0300

    net/mlx5e: Add missing link modes to ptys2ethtool_map
    
    [ Upstream commit 7617d62cba4a8a3ff3ed3fda0171c43f135c142e ]
    
    Add MLX5E_1000BASE_T and MLX5E_100BASE_TX to the legacy
    modes in ptys2legacy_ethtool_table, since they were missing.
    
    Fixes: 665bc53969d7 ("net/mlx5e: Use new ethtool get/set link ksettings API")
    Signed-off-by: Shahar Shitrit <shshitrit@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Fix NULL deref in mlx5e_tir_builder_alloc() [+ + +]
Author: Elena Salomatkina <esalomatkina@ispras.ru>
Date:   Tue Sep 24 19:00:18 2024 +0300

    net/mlx5e: Fix NULL deref in mlx5e_tir_builder_alloc()
    
    [ Upstream commit f25389e779500cf4a59ef9804534237841bce536 ]
    
    In mlx5e_tir_builder_alloc() kvzalloc() may return NULL
    which is dereferenced on the next line in a reference
    to the modify field.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: a6696735d694 ("net/mlx5e: Convert TIR to a dedicated object")
    Signed-off-by: Elena Salomatkina <esalomatkina@ispras.ru>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Gal Pressman <gal@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: accept TCA_STAB only for root qdisc [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Oct 7 18:41:30 2024 +0000

    net/sched: accept TCA_STAB only for root qdisc
    
    [ Upstream commit 3cb7cf1540ddff5473d6baeb530228d19bc97b8a ]
    
    Most qdiscs maintain their backlog using qdisc_pkt_len(skb)
    on the assumption it is invariant between the enqueue()
    and dequeue() handlers.
    
    Unfortunately syzbot can crash a host rather easily using
    a TBF + SFQ combination, with an STAB on SFQ [1]
    
    We can't support TCA_STAB on arbitrary level, this would
    require to maintain per-qdisc storage.
    
    [1]
    [   88.796496] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [   88.798611] #PF: supervisor read access in kernel mode
    [   88.799014] #PF: error_code(0x0000) - not-present page
    [   88.799506] PGD 0 P4D 0
    [   88.799829] Oops: Oops: 0000 [#1] SMP NOPTI
    [   88.800569] CPU: 14 UID: 0 PID: 2053 Comm: b371744477 Not tainted 6.12.0-rc1-virtme #1117
    [   88.801107] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   88.801779] RIP: 0010:sfq_dequeue (net/sched/sch_sfq.c:272 net/sched/sch_sfq.c:499) sch_sfq
    [ 88.802544] Code: 0f b7 50 12 48 8d 04 d5 00 00 00 00 48 89 d6 48 29 d0 48 8b 91 c0 01 00 00 48 c1 e0 03 48 01 c2 66 83 7a 1a 00 7e c0 48 8b 3a <4c> 8b 07 4c 89 02 49 89 50 08 48 c7 47 08 00 00 00 00 48 c7 07 00
    All code
    ========
       0:   0f b7 50 12             movzwl 0x12(%rax),%edx
       4:   48 8d 04 d5 00 00 00    lea    0x0(,%rdx,8),%rax
       b:   00
       c:   48 89 d6                mov    %rdx,%rsi
       f:   48 29 d0                sub    %rdx,%rax
      12:   48 8b 91 c0 01 00 00    mov    0x1c0(%rcx),%rdx
      19:   48 c1 e0 03             shl    $0x3,%rax
      1d:   48 01 c2                add    %rax,%rdx
      20:   66 83 7a 1a 00          cmpw   $0x0,0x1a(%rdx)
      25:   7e c0                   jle    0xffffffffffffffe7
      27:   48 8b 3a                mov    (%rdx),%rdi
      2a:*  4c 8b 07                mov    (%rdi),%r8               <-- trapping instruction
      2d:   4c 89 02                mov    %r8,(%rdx)
      30:   49 89 50 08             mov    %rdx,0x8(%r8)
      34:   48 c7 47 08 00 00 00    movq   $0x0,0x8(%rdi)
      3b:   00
      3c:   48                      rex.W
      3d:   c7                      .byte 0xc7
      3e:   07                      (bad)
            ...
    
    Code starting with the faulting instruction
    ===========================================
       0:   4c 8b 07                mov    (%rdi),%r8
       3:   4c 89 02                mov    %r8,(%rdx)
       6:   49 89 50 08             mov    %rdx,0x8(%r8)
       a:   48 c7 47 08 00 00 00    movq   $0x0,0x8(%rdi)
      11:   00
      12:   48                      rex.W
      13:   c7                      .byte 0xc7
      14:   07                      (bad)
            ...
    [   88.803721] RSP: 0018:ffff9a1f892b7d58 EFLAGS: 00000206
    [   88.804032] RAX: 0000000000000000 RBX: ffff9a1f8420c800 RCX: ffff9a1f8420c800
    [   88.804560] RDX: ffff9a1f81bc1440 RSI: 0000000000000000 RDI: 0000000000000000
    [   88.805056] RBP: ffffffffc04bb0e0 R08: 0000000000000001 R09: 00000000ff7f9a1f
    [   88.805473] R10: 000000000001001b R11: 0000000000009a1f R12: 0000000000000140
    [   88.806194] R13: 0000000000000001 R14: ffff9a1f886df400 R15: ffff9a1f886df4ac
    [   88.806734] FS:  00007f445601a740(0000) GS:ffff9a2e7fd80000(0000) knlGS:0000000000000000
    [   88.807225] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   88.807672] CR2: 0000000000000000 CR3: 000000050cc46000 CR4: 00000000000006f0
    [   88.808165] Call Trace:
    [   88.808459]  <TASK>
    [   88.808710] ? __die (arch/x86/kernel/dumpstack.c:421 arch/x86/kernel/dumpstack.c:434)
    [   88.809261] ? page_fault_oops (arch/x86/mm/fault.c:715)
    [   88.809561] ? exc_page_fault (./arch/x86/include/asm/irqflags.h:26 ./arch/x86/include/asm/irqflags.h:87 ./arch/x86/include/asm/irqflags.h:147 arch/x86/mm/fault.c:1489 arch/x86/mm/fault.c:1539)
    [   88.809806] ? asm_exc_page_fault (./arch/x86/include/asm/idtentry.h:623)
    [   88.810074] ? sfq_dequeue (net/sched/sch_sfq.c:272 net/sched/sch_sfq.c:499) sch_sfq
    [   88.810411] sfq_reset (net/sched/sch_sfq.c:525) sch_sfq
    [   88.810671] qdisc_reset (./include/linux/skbuff.h:2135 ./include/linux/skbuff.h:2441 ./include/linux/skbuff.h:3304 ./include/linux/skbuff.h:3310 net/sched/sch_generic.c:1036)
    [   88.810950] tbf_reset (./include/linux/timekeeping.h:169 net/sched/sch_tbf.c:334) sch_tbf
    [   88.811208] qdisc_reset (./include/linux/skbuff.h:2135 ./include/linux/skbuff.h:2441 ./include/linux/skbuff.h:3304 ./include/linux/skbuff.h:3310 net/sched/sch_generic.c:1036)
    [   88.811484] netif_set_real_num_tx_queues (./include/linux/spinlock.h:396 ./include/net/sch_generic.h:768 net/core/dev.c:2958)
    [   88.811870] __tun_detach (drivers/net/tun.c:590 drivers/net/tun.c:673)
    [   88.812271] tun_chr_close (drivers/net/tun.c:702 drivers/net/tun.c:3517)
    [   88.812505] __fput (fs/file_table.c:432 (discriminator 1))
    [   88.812735] task_work_run (kernel/task_work.c:230)
    [   88.813016] do_exit (kernel/exit.c:940)
    [   88.813372] ? trace_hardirqs_on (kernel/trace/trace_preemptirq.c:58 (discriminator 4))
    [   88.813639] ? handle_mm_fault (./arch/x86/include/asm/irqflags.h:42 ./arch/x86/include/asm/irqflags.h:97 ./arch/x86/include/asm/irqflags.h:155 ./include/linux/memcontrol.h:1022 ./include/linux/memcontrol.h:1045 ./include/linux/memcontrol.h:1052 mm/memory.c:5928 mm/memory.c:6088)
    [   88.813867] do_group_exit (kernel/exit.c:1070)
    [   88.814138] __x64_sys_exit_group (kernel/exit.c:1099)
    [   88.814490] x64_sys_call (??:?)
    [   88.814791] do_syscall_64 (arch/x86/entry/common.c:52 (discriminator 1) arch/x86/entry/common.c:83 (discriminator 1))
    [   88.815012] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    [   88.815495] RIP: 0033:0x7f44560f1975
    
    Fixes: 175f9c1bba9b ("net_sched: Add size table for qdiscs")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://patch.msgid.link/20241007184130.3960565-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/xen-netback: prevent UAF in xenvif_flush_hash() [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Fri Aug 23 03:11:09 2024 +0900

    net/xen-netback: prevent UAF in xenvif_flush_hash()
    
    [ Upstream commit 0fa5e94a1811d68fbffa0725efe6d4ca62c03d12 ]
    
    During the list_for_each_entry_rcu iteration call of xenvif_flush_hash,
    kfree_rcu does not exist inside the rcu read critical section, so if
    kfree_rcu is called when the rcu grace period ends during the iteration,
    UAF occurs when accessing head->next after the entry becomes free.
    
    Therefore, to solve this, you need to change it to list_for_each_entry_safe.
    
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Link: https://patch.msgid.link/20240822181109.2577354-1-aha310510@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: Add l3mdev index to flow struct and avoid oif reset for port devices [+ + +]
Author: David Ahern <dsahern@kernel.org>
Date:   Mon Mar 14 14:45:51 2022 -0600

    net: Add l3mdev index to flow struct and avoid oif reset for port devices
    
    [ Upstream commit 40867d74c374b235e14d839f3a77f26684feefe5 ]
    
    The fundamental premise of VRF and l3mdev core code is binding a socket
    to a device (l3mdev or netdev with an L3 domain) to indicate L3 scope.
    Legacy code resets flowi_oif to the l3mdev losing any original port
    device binding. Ben (among others) has demonstrated use cases where the
    original port device binding is important and needs to be retained.
    This patch handles that by adding a new entry to the common flow struct
    that can indicate the l3mdev index for later rule and table matching
    avoiding the need to reset flowi_oif.
    
    In addition to allowing more use cases that require port device binds,
    this patch brings a few datapath simplications:
    
    1. l3mdev_fib_rule_match is only called when walking fib rules and
       always after l3mdev_update_flow. That allows an optimization to bail
       early for non-VRF type uses cases when flowi_l3mdev is not set. Also,
       only that index needs to be checked for the FIB table id.
    
    2. l3mdev_update_flow can be called with flowi_oif set to a l3mdev
       (e.g., VRF) device. By resetting flowi_oif only for this case the
       FLOWI_FLAG_SKIP_NH_OIF flag is not longer needed and can be removed,
       removing several checks in the datapath. The flowi_iif path can be
       simplified to only be called if the it is not loopback (loopback can
       not be assigned to an L3 domain) and the l3mdev index is not already
       set.
    
    3. Avoid another device lookup in the output path when the fib lookup
       returns a reject failure.
    
    Note: 2 functional tests for local traffic with reject fib rules are
    updated to reflect the new direct failure at FIB lookup time for ping
    rather than the failure on packet path. The current code fails like this:
    
        HINT: Fails since address on vrf device is out of device scope
        COMMAND: ip netns exec ns-A ping -c1 -w1 -I eth1 172.16.3.1
        ping: Warning: source address might be selected on device other than: eth1
        PING 172.16.3.1 (172.16.3.1) from 172.16.3.1 eth1: 56(84) bytes of data.
    
        --- 172.16.3.1 ping statistics ---
        1 packets transmitted, 0 received, 100% packet loss, time 0ms
    
    where the test now directly fails:
    
        HINT: Fails since address on vrf device is out of device scope
        COMMAND: ip netns exec ns-A ping -c1 -w1 -I eth1 172.16.3.1
        ping: connect: No route to host
    
    Signed-off-by: David Ahern <dsahern@kernel.org>
    Tested-by: Ben Greear <greearb@candelatech.com>
    Link: https://lore.kernel.org/r/20220314204551.16369-1-dsahern@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 05ef7055debc ("netfilter: fib: check correct rtable in vrf setups")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: add more sanity checks to qdisc_pkt_len_init() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Sep 24 15:02:57 2024 +0000

    net: add more sanity checks to qdisc_pkt_len_init()
    
    [ Upstream commit ab9a9a9e9647392a19e7a885b08000e89c86b535 ]
    
    One path takes care of SKB_GSO_DODGY, assuming
    skb->len is bigger than hdr_len.
    
    virtio_net_hdr_to_skb() does not fully dissect TCP headers,
    it only make sure it is at least 20 bytes.
    
    It is possible for an user to provide a malicious 'GSO' packet,
    total length of 80 bytes.
    
    - 20 bytes of IPv4 header
    - 60 bytes TCP header
    - a small gso_size like 8
    
    virtio_net_hdr_to_skb() would declare this packet as a normal
    GSO packet, because it would see 40 bytes of payload,
    bigger than gso_size.
    
    We need to make detect this case to not underflow
    qdisc_skb_cb(skb)->pkt_len.
    
    Fixes: 1def9238d4aa ("net_sched: more precise pkt_len computation")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: atlantic: Avoid warning about potential string truncation [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Wed Aug 21 16:58:57 2024 +0100

    net: atlantic: Avoid warning about potential string truncation
    
    [ Upstream commit 5874e0c9f25661c2faefe4809907166defae3d7f ]
    
    W=1 builds with GCC 14.2.0 warn that:
    
    .../aq_ethtool.c:278:59: warning: ‘%d’ directive output may be truncated writing between 1 and 11 bytes into a region of size 6 [-Wformat-truncation=]
      278 |                                 snprintf(tc_string, 8, "TC%d ", tc);
          |                                                           ^~
    .../aq_ethtool.c:278:56: note: directive argument in the range [-2147483641, 254]
      278 |                                 snprintf(tc_string, 8, "TC%d ", tc);
          |                                                        ^~~~~~~
    .../aq_ethtool.c:278:33: note: ‘snprintf’ output between 5 and 15 bytes into a destination of size 8
      278 |                                 snprintf(tc_string, 8, "TC%d ", tc);
          |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    tc is always in the range 0 - cfg->tcs. And as cfg->tcs is a u8,
    the range is 0 - 255. Further, on inspecting the code, it seems
    that cfg->tcs will never be more than AQ_CFG_TCS_MAX (8), so
    the range is actually 0 - 8.
    
    So, it seems that the condition that GCC flags will not occur.
    But, nonetheless, it would be nice if it didn't emit the warning.
    
    It seems that this can be achieved by changing the format specifier
    from %d to %u, in which case I believe GCC recognises an upper bound
    on the range of tc of 0 - 255. After some experimentation I think
    this is due to the combination of the use of %u and the type of
    cfg->tcs (u8).
    
    Empirically, updating the type of the tc variable to unsigned int
    has the same effect.
    
    As both of these changes seem to make sense in relation to what the code
    is actually doing - iterating over unsigned values - do both.
    
    Compile tested only.
    
    Signed-off-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240821-atlantic-str-v1-1-fa2cfe38ca00@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: avoid potential underflow in qdisc_pkt_len_init() with UFO [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Sep 24 15:02:56 2024 +0000

    net: avoid potential underflow in qdisc_pkt_len_init() with UFO
    
    [ Upstream commit c20029db28399ecc50e556964eaba75c43b1e2f1 ]
    
    After commit 7c6d2ecbda83 ("net: be more gentle about silly gso
    requests coming from user") virtio_net_hdr_to_skb() had sanity check
    to detect malicious attempts from user space to cook a bad GSO packet.
    
    Then commit cf9acc90c80ec ("net: virtio_net_hdr_to_skb: count
    transport header in UFO") while fixing one issue, allowed user space
    to cook a GSO packet with the following characteristic :
    
    IPv4 SKB_GSO_UDP, gso_size=3, skb->len = 28.
    
    When this packet arrives in qdisc_pkt_len_init(), we end up
    with hdr_len = 28 (IPv4 header + UDP header), matching skb->len
    
    Then the following sets gso_segs to 0 :
    
    gso_segs = DIV_ROUND_UP(skb->len - hdr_len,
                            shinfo->gso_size);
    
    Then later we set qdisc_skb_cb(skb)->pkt_len to back to zero :/
    
    qdisc_skb_cb(skb)->pkt_len += (gso_segs - 1) * hdr_len;
    
    This leads to the following crash in fq_codel [1]
    
    qdisc_pkt_len_init() is best effort, we only want an estimation
    of the bytes sent on the wire, not crashing the kernel.
    
    This patch is fixing this particular issue, a following one
    adds more sanity checks for another potential bug.
    
    [1]
    [   70.724101] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [   70.724561] #PF: supervisor read access in kernel mode
    [   70.724561] #PF: error_code(0x0000) - not-present page
    [   70.724561] PGD 10ac61067 P4D 10ac61067 PUD 107ee2067 PMD 0
    [   70.724561] Oops: Oops: 0000 [#1] SMP NOPTI
    [   70.724561] CPU: 11 UID: 0 PID: 2163 Comm: b358537762 Not tainted 6.11.0-virtme #991
    [   70.724561] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   70.724561] RIP: 0010:fq_codel_enqueue (net/sched/sch_fq_codel.c:120 net/sched/sch_fq_codel.c:168 net/sched/sch_fq_codel.c:230) sch_fq_codel
    [ 70.724561] Code: 24 08 49 c1 e1 06 44 89 7c 24 18 45 31 ed 45 31 c0 31 ff 89 44 24 14 4c 03 8b 90 01 00 00 eb 04 39 ca 73 37 4d 8b 39 83 c7 01 <49> 8b 17 49 89 11 41 8b 57 28 45 8b 5f 34 49 c7 07 00 00 00 00 49
    All code
    ========
       0:   24 08                   and    $0x8,%al
       2:   49 c1 e1 06             shl    $0x6,%r9
       6:   44 89 7c 24 18          mov    %r15d,0x18(%rsp)
       b:   45 31 ed                xor    %r13d,%r13d
       e:   45 31 c0                xor    %r8d,%r8d
      11:   31 ff                   xor    %edi,%edi
      13:   89 44 24 14             mov    %eax,0x14(%rsp)
      17:   4c 03 8b 90 01 00 00    add    0x190(%rbx),%r9
      1e:   eb 04                   jmp    0x24
      20:   39 ca                   cmp    %ecx,%edx
      22:   73 37                   jae    0x5b
      24:   4d 8b 39                mov    (%r9),%r15
      27:   83 c7 01                add    $0x1,%edi
      2a:*  49 8b 17                mov    (%r15),%rdx              <-- trapping instruction
      2d:   49 89 11                mov    %rdx,(%r9)
      30:   41 8b 57 28             mov    0x28(%r15),%edx
      34:   45 8b 5f 34             mov    0x34(%r15),%r11d
      38:   49 c7 07 00 00 00 00    movq   $0x0,(%r15)
      3f:   49                      rex.WB
    
    Code starting with the faulting instruction
    ===========================================
       0:   49 8b 17                mov    (%r15),%rdx
       3:   49 89 11                mov    %rdx,(%r9)
       6:   41 8b 57 28             mov    0x28(%r15),%edx
       a:   45 8b 5f 34             mov    0x34(%r15),%r11d
       e:   49 c7 07 00 00 00 00    movq   $0x0,(%r15)
      15:   49                      rex.WB
    [   70.724561] RSP: 0018:ffff95ae85e6fb90 EFLAGS: 00000202
    [   70.724561] RAX: 0000000002000000 RBX: ffff95ae841de000 RCX: 0000000000000000
    [   70.724561] RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000001
    [   70.724561] RBP: ffff95ae85e6fbf8 R08: 0000000000000000 R09: ffff95b710a30000
    [   70.724561] R10: 0000000000000000 R11: bdf289445ce31881 R12: ffff95ae85e6fc58
    [   70.724561] R13: 0000000000000000 R14: 0000000000000040 R15: 0000000000000000
    [   70.724561] FS:  000000002c5c1380(0000) GS:ffff95bd7fcc0000(0000) knlGS:0000000000000000
    [   70.724561] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   70.724561] CR2: 0000000000000000 CR3: 000000010c568000 CR4: 00000000000006f0
    [   70.724561] Call Trace:
    [   70.724561]  <TASK>
    [   70.724561] ? __die (arch/x86/kernel/dumpstack.c:421 arch/x86/kernel/dumpstack.c:434)
    [   70.724561] ? page_fault_oops (arch/x86/mm/fault.c:715)
    [   70.724561] ? exc_page_fault (./arch/x86/include/asm/irqflags.h:26 ./arch/x86/include/asm/irqflags.h:87 ./arch/x86/include/asm/irqflags.h:147 arch/x86/mm/fault.c:1489 arch/x86/mm/fault.c:1539)
    [   70.724561] ? asm_exc_page_fault (./arch/x86/include/asm/idtentry.h:623)
    [   70.724561] ? fq_codel_enqueue (net/sched/sch_fq_codel.c:120 net/sched/sch_fq_codel.c:168 net/sched/sch_fq_codel.c:230) sch_fq_codel
    [   70.724561] dev_qdisc_enqueue (net/core/dev.c:3784)
    [   70.724561] __dev_queue_xmit (net/core/dev.c:3880 (discriminator 2) net/core/dev.c:4390 (discriminator 2))
    [   70.724561] ? irqentry_enter (kernel/entry/common.c:237)
    [   70.724561] ? sysvec_apic_timer_interrupt (./arch/x86/include/asm/hardirq.h:74 (discriminator 2) arch/x86/kernel/apic/apic.c:1043 (discriminator 2) arch/x86/kernel/apic/apic.c:1043 (discriminator 2))
    [   70.724561] ? trace_hardirqs_on (kernel/trace/trace_preemptirq.c:58 (discriminator 4))
    [   70.724561] ? asm_sysvec_apic_timer_interrupt (./arch/x86/include/asm/idtentry.h:702)
    [   70.724561] ? virtio_net_hdr_to_skb.constprop.0 (./include/linux/virtio_net.h:129 (discriminator 1))
    [   70.724561] packet_sendmsg (net/packet/af_packet.c:3145 (discriminator 1) net/packet/af_packet.c:3177 (discriminator 1))
    [   70.724561] ? _raw_spin_lock_bh (./arch/x86/include/asm/atomic.h:107 (discriminator 4) ./include/linux/atomic/atomic-arch-fallback.h:2170 (discriminator 4) ./include/linux/atomic/atomic-instrumented.h:1302 (discriminator 4) ./include/asm-generic/qspinlock.h:111 (discriminator 4) ./include/linux/spinlock.h:187 (discriminator 4) ./include/linux/spinlock_api_smp.h:127 (discriminator 4) kernel/locking/spinlock.c:178 (discriminator 4))
    [   70.724561] ? netdev_name_node_lookup_rcu (net/core/dev.c:325 (discriminator 1))
    [   70.724561] __sys_sendto (net/socket.c:730 (discriminator 1) net/socket.c:745 (discriminator 1) net/socket.c:2210 (discriminator 1))
    [   70.724561] ? __sys_setsockopt (./include/linux/file.h:34 net/socket.c:2355)
    [   70.724561] __x64_sys_sendto (net/socket.c:2222 (discriminator 1) net/socket.c:2218 (discriminator 1) net/socket.c:2218 (discriminator 1))
    [   70.724561] do_syscall_64 (arch/x86/entry/common.c:52 (discriminator 1) arch/x86/entry/common.c:83 (discriminator 1))
    [   70.724561] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    [   70.724561] RIP: 0033:0x41ae09
    
    Fixes: cf9acc90c80ec ("net: virtio_net_hdr_to_skb: count transport header in UFO")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Jonathan Davies <jonathan.davies@nutanix.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: Jonathan Davies <jonathan.davies@nutanix.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: add coalesce timer ethtool configuration [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Fri Mar 4 20:24:43 2022 -0600

    net: axienet: add coalesce timer ethtool configuration
    
    [ Upstream commit 0b79b8dc97b9df4f873f63161e3050bafc4c4237 ]
    
    Add the ability to configure the RX/TX coalesce timer with ethtool.
    Change default setting to scale with the clock rate rather than being a
    fixed number of clock cycles.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: Be more careful about updating tx_bd_tail [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Thu May 12 11:18:52 2022 -0600

    net: axienet: Be more careful about updating tx_bd_tail
    
    [ Upstream commit f0cf4000f5867ec4325d19d32bd83cf583065667 ]
    
    The axienet_start_xmit function was updating the tx_bd_tail variable
    multiple times, with potential rollbacks on error or invalid
    intermediate positions, even though this variable is also used in the
    TX completion path. Use READ_ONCE where this variable is read and
    WRITE_ONCE where it is written to make this update more atomic, and
    move the write before the MMIO write to start the transfer, so it is
    protected by that implicit write barrier.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: Clean up device used for DMA calls [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Fri Mar 4 20:24:38 2022 -0600

    net: axienet: Clean up device used for DMA calls
    
    [ Upstream commit 17882fd4256721451457ee57532bbae0cd5cacfe ]
    
    Instead of using lp->ndev.parent to find the correct device to use for
    DMA API calls, just use the dev attribute in the device structure.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: Clean up DMA start/stop and error handling [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Fri Mar 4 20:24:39 2022 -0600

    net: axienet: Clean up DMA start/stop and error handling
    
    [ Upstream commit 84b9ccc0749a7036bcaf707f02273dcbd4756fbf ]
    
    Simplify the DMA error handling process, and remove some duplicated code
    between the DMA error handling and the stop function.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: don't set IRQ timer when IRQ delay not used [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Fri Mar 4 20:24:40 2022 -0600

    net: axienet: don't set IRQ timer when IRQ delay not used
    
    [ Upstream commit 0155ae6eb84dbeecb7199a2fd9dee72e046ac875 ]
    
    When the RX or TX coalesce count is set to 1, there's no point in
    setting the delay timer value since an interrupt will already be raised
    on every packet, and the delay interrupt just causes extra pointless
    interrupts.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: implement NAPI and GRO receive [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Fri Mar 4 20:24:41 2022 -0600

    net: axienet: implement NAPI and GRO receive
    
    [ Upstream commit cc37610caaf8d13a6ecb8afd1fe2ebc2424ff622 ]
    
    Implement NAPI and GRO receive. In addition to better performance, this
    also avoids handling RX packets in hard IRQ context, which reduces the
    IRQ latency impact to other devices.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: reduce default RX interrupt threshold to 1 [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Fri Mar 4 20:24:42 2022 -0600

    net: axienet: reduce default RX interrupt threshold to 1
    
    [ Upstream commit 40da5d680e02ca8d61237192db4b5833d3c9639f ]
    
    Now that NAPI has been implemented, the hardware interrupt mitigation
    mechanism is not needed to avoid excessive interrupt load in most cases.
    Reduce the default RX interrupt threshold to 1 to reduce introduced
    latency. This can be increased with ethtool if desired if some applications
    still want to reduce interrupts.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: start napi before enabling Rx/Tx [+ + +]
Author: Andy Chiu <andy.chiu@sifive.com>
Date:   Fri Jul 26 15:06:50 2024 +0800

    net: axienet: start napi before enabling Rx/Tx
    
    commit 799a829507506924add8a7620493adc1c3cfda30 upstream.
    
    softirq may get lost if an Rx interrupt comes before we call
    napi_enable. Move napi_enable in front of axienet_setoptions(), which
    turns on the device, to address the issue.
    
    Link: https://lists.gnu.org/archive/html/qemu-devel/2024-07/msg06160.html
    Fixes: cc37610caaf8 ("net: axienet: implement NAPI and GRO receive")
    Signed-off-by: Andy Chiu <andy.chiu@sifive.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: axienet: Switch to 64-bit RX/TX statistics [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Mon Aug 29 17:39:01 2022 -0600

    net: axienet: Switch to 64-bit RX/TX statistics
    
    [ Upstream commit cb45a8bf4693965e89d115cd2c510f12bc127c37 ]
    
    The RX and TX byte/packet statistics in this driver could be overflowed
    relatively quickly on a 32-bit platform. Switch these stats to use the
    u64_stats infrastructure to avoid this.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Link: https://lore.kernel.org/r/20220829233901.3429419-1-robert.hancock@calian.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: axienet: Use NAPI for TX completion path [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Thu May 12 11:18:53 2022 -0600

    net: axienet: Use NAPI for TX completion path
    
    [ Upstream commit 9e2bc267e78068b512d4409b884662f425adb1ec ]
    
    This driver was using the TX IRQ handler to perform all TX completion
    tasks. Under heavy TX network load, this can cause significant irqs-off
    latencies (found to be in the hundreds of microseconds using ftrace).
    This can cause other issues, such as overrunning serial UART FIFOs when
    using high baud rates with limited UART FIFO sizes.
    
    Switch to using a NAPI poll handler to perform the TX completion work
    to get this out of hard IRQ context and avoid the IRQ latency impact.
    A separate poll handler is used for TX and RX since they have separate
    IRQs on this controller, so that the completion work for each of them
    stays on the same CPU as the interrupt.
    
    Testing on a Xilinx MPSoC ZU9EG platform using iperf3 from a Linux PC
    through a switch at 1G link speed showed no significant change in TX or
    RX throughput, with approximately 941 Mbps before and after. Hard IRQ
    time in the TX throughput test was significantly reduced from 12% to
    below 1% on the CPU handling TX interrupts, with total hard+soft IRQ CPU
    usage dropping from about 56% down to 48%.
    
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 5a6caa2cfabb ("net: xilinx: axienet: Fix packet counting")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dpaa: Pad packets to ETH_ZLEN [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Tue Sep 10 10:31:44 2024 -0400

    net: dpaa: Pad packets to ETH_ZLEN
    
    [ Upstream commit cbd7ec083413c6a2e0c326d49e24ec7d12c7a9e0 ]
    
    When sending packets under 60 bytes, up to three bytes of the buffer
    following the data may be leaked. Avoid this by extending all packets to
    ETH_ZLEN, ensuring nothing is leaked in the padding. This bug can be
    reproduced by running
    
            $ ping -s 11 destination
    
    Fixes: 9ad1a3749333 ("dpaa_eth: add support for DPAA Ethernet")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240910143144.1439910-1-sean.anderson@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: allow lower MTUs on BCM5325/5365 [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Fri Oct 4 10:47:20 2024 +0200

    net: dsa: b53: allow lower MTUs on BCM5325/5365
    
    [ Upstream commit e4b294f88a32438baf31762441f3dd1c996778be ]
    
    While BCM5325/5365 do not support jumbo frames, they do support slightly
    oversized frames, so do not error out if requesting a supported MTU for
    them.
    
    Fixes: 6ae5834b983a ("net: dsa: b53: add MTU configuration support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix jumbo frame mtu check [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Fri Oct 4 10:47:17 2024 +0200

    net: dsa: b53: fix jumbo frame mtu check
    
    [ Upstream commit 42fb3acf6826c6764ba79feb6e15229b43fd2f9f ]
    
    JMS_MIN_SIZE is the full ethernet frame length, while mtu is just the
    data payload size. Comparing these two meant that mtus between 1500 and
    1518 did not trigger enabling jumbo frames.
    
    So instead compare the set mtu ETH_DATA_LEN, which is equal to
    JMS_MIN_SIZE - ETH_HLEN - ETH_FCS_LEN;
    
    Also do a check that the requested mtu is actually greater than the
    minimum length, else we do not need to enable jumbo frames.
    
    In practice this only introduced a very small range of mtus that did not
    work properly. Newer chips allow 2000 byte large frames by default, and
    older chips allow 1536 bytes long, which is equivalent to an mtu of
    1514. So effectivly only mtus of 1515~1517 were broken.
    
    Fixes: 6ae5834b983a ("net: dsa: b53: add MTU configuration support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix jumbo frames on 10/100 ports [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Fri Oct 4 10:47:21 2024 +0200

    net: dsa: b53: fix jumbo frames on 10/100 ports
    
    [ Upstream commit 2f3dcd0d39affe5b9ba1c351ce0e270c8bdd5109 ]
    
    All modern chips support and need the 10_100 bit set for supporting jumbo
    frames on 10/100 ports, so instead of enabling it only for 583XX enable
    it for everything except bcm63xx, where the bit is writeable, but does
    nothing.
    
    Tested on BCM53115, where jumbo frames were dropped at 10/100 speeds
    without the bit set.
    
    Fixes: 6ae5834b983a ("net: dsa: b53: add MTU configuration support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix max MTU for 1g switches [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Fri Oct 4 10:47:18 2024 +0200

    net: dsa: b53: fix max MTU for 1g switches
    
    [ Upstream commit 680a8217dc00dc7e7da57888b3c053289b60eb2b ]
    
    JMS_MAX_SIZE is the ethernet frame length, not the MTU, which is payload
    without ethernet headers.
    
    According to the datasheets maximum supported frame length for most
    gigabyte swithes is 9720 bytes, so convert that to the expected MTU when
    using VLAN tagged frames.
    
    Fixes: 6ae5834b983a ("net: dsa: b53: add MTU configuration support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: b53: fix max MTU for BCM5325/BCM5365 [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Fri Oct 4 10:47:19 2024 +0200

    net: dsa: b53: fix max MTU for BCM5325/BCM5365
    
    [ Upstream commit ca8c1f71c10193c270f772d70d34b15ad765d6a8 ]
    
    BCM5325/BCM5365 do not support jumbo frames, so we should not report a
    jumbo frame mtu for them. But they do support so called "oversized"
    frames up to 1536 bytes long by default, so report an appropriate MTU.
    
    Fixes: 6ae5834b983a ("net: dsa: b53: add MTU configuration support")
    Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: lan9303: ensure chip reset and wait for READY status [+ + +]
Author: Anatolij Gustschin <agust@denx.de>
Date:   Fri Oct 4 13:36:54 2024 +0200

    net: dsa: lan9303: ensure chip reset and wait for READY status
    
    commit 5c14e51d2d7df49fe0d4e64a12c58d2542f452ff upstream.
    
    Accessing device registers seems to be not reliable, the chip
    revision is sometimes detected wrongly (0 instead of expected 1).
    
    Ensure that the chip reset is performed via reset GPIO and then
    wait for 'Device Ready' status in HW_CFG register before doing
    any register initializations.
    
    Cc: stable@vger.kernel.org
    Fixes: a1292595e006 ("net: dsa: add new DSA switch driver for the SMSC-LAN9303")
    Signed-off-by: Anatolij Gustschin <agust@denx.de>
    [alex: reworked using read_poll_timeout()]
    Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
    Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
    Link: https://patch.msgid.link/20241004113655.3436296-1-alexander.sverdlin@siemens.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: enetc: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Wed Sep 11 17:44:44 2024 +0800

    net: enetc: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit 799a9225997799f7b1b579bc50a93b78b4fb2a01 ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: bbb96dc7fa1a ("enetc: Factor out the traffic start/stop procedures")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Link: https://patch.msgid.link/20240911094445.1922476-3-ruanjinjie@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: cortina: Drop TSO support [+ + +]
Author: Linus Walleij <linus.walleij@linaro.org>
Date:   Sat Jan 6 01:12:22 2024 +0100

    net: ethernet: cortina: Drop TSO support
    
    [ Upstream commit ac631873c9e7a50d2a8de457cfc4b9f86666403e ]
    
    The recent change to allow large frames without hardware checksumming
    slotted in software checksumming in the driver if hardware could not
    do it.
    
    This will however upset TSO (TCP Segment Offloading). Typical
    error dumps includes this:
    
    skb len=2961 headroom=222 headlen=66 tailroom=0
    (...)
    WARNING: CPU: 0 PID: 956 at net/core/dev.c:3259 skb_warn_bad_offload+0x7c/0x108
    gemini-ethernet-port: caps=(0x0000010000154813, 0x00002007ffdd7889)
    
    And the packets do not go through.
    
    The TSO implementation is bogus: a TSO enabled driver must propagate
    the skb_shinfo(skb)->gso_size value to the TSO engine on the NIC.
    
    Drop the size check and TSO offloading features for now: this
    needs to be fixed up properly.
    
    After this ethernet works fine on Gemini devices with a direct connected
    PHY such as D-Link DNS-313.
    
    Also tested to still be working with a DSA switch using the Gemini
    ethernet as conduit interface.
    
    Link: https://lore.kernel.org/netdev/CANn89iJLfxng1sYL5Zk0mknXpyYQPCp83m3KgD2KJ2_hKCpEUg@mail.gmail.com/
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Fixes: d4d0c5b4d279 ("net: ethernet: cortina: Handle large frames")
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: lantiq_etop: fix memory disclosure [+ + +]
Author: Aleksander Jan Bajkowski <olek2@wp.pl>
Date:   Mon Sep 23 23:49:49 2024 +0200

    net: ethernet: lantiq_etop: fix memory disclosure
    
    [ Upstream commit 45c0de18ff2dc9af01236380404bbd6a46502c69 ]
    
    When applying padding, the buffer is not zeroed, which results in memory
    disclosure. The mentioned data is observed on the wire. This patch uses
    skb_put_padto() to pad Ethernet frames properly. The mentioned function
    zeroes the expanded buffer.
    
    In case the packet cannot be padded it is silently dropped. Statistics
    are also not incremented. This driver does not support statistics in the
    old 32-bit format or the new 64-bit format. These will be added in the
    future. In its current form, the patch should be easily backported to
    stable versions.
    
    Ethernet MACs on Amazon-SE and Danube cannot do padding of the packets
    in hardware, so software padding must be applied.
    
    Fixes: 504d4721ee8e ("MIPS: Lantiq: Add ethernet driver")
    Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20240923214949.231511-2-olek2@wp.pl
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: use ip_hdrlen() instead of bit shift [+ + +]
Author: Moon Yeounsu <yyyynoom@gmail.com>
Date:   Wed Aug 7 19:07:21 2024 +0900

    net: ethernet: use ip_hdrlen() instead of bit shift
    
    [ Upstream commit 9a039eeb71a42c8b13408a1976e300f3898e1be0 ]
    
    `ip_hdr(skb)->ihl << 2` is the same as `ip_hdrlen(skb)`
    Therefore, we should use a well-defined function not a bit shift
    to find the header length.
    
    It also compresses two lines to a single line.
    
    Signed-off-by: Moon Yeounsu <yyyynoom@gmail.com>
    Reviewed-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: explicitly clear the sk pointer, when pf->create fails [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Thu Oct 3 18:01:51 2024 +0100

    net: explicitly clear the sk pointer, when pf->create fails
    
    commit 631083143315d1b192bd7d915b967b37819e88ea upstream.
    
    We have recently noticed the exact same KASAN splat as in commit
    6cd4a78d962b ("net: do not leave a dangling sk pointer, when socket
    creation fails"). The problem is that commit did not fully address the
    problem, as some pf->create implementations do not use sk_common_release
    in their error paths.
    
    For example, we can use the same reproducer as in the above commit, but
    changing ping to arping. arping uses AF_PACKET socket and if packet_create
    fails, it will just sk_free the allocated sk object.
    
    While we could chase all the pf->create implementations and make sure they
    NULL the freed sk object on error from the socket, we can't guarantee
    future protocols will not make the same mistake.
    
    So it is easier to just explicitly NULL the sk pointer upon return from
    pf->create in __sock_create. We do know that pf->create always releases the
    allocated sk object on error, so if the pointer is not NULL, it is
    definitely dangling.
    
    Fixes: 6cd4a78d962b ("net: do not leave a dangling sk pointer, when socket creation fails")
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241003170151.69445-1-ignat@cloudflare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: Fix an unsafe loop on the list [+ + +]
Author: Anastasia Kovaleva <a.kovaleva@yadro.com>
Date:   Thu Oct 3 13:44:31 2024 +0300

    net: Fix an unsafe loop on the list
    
    commit 1dae9f1187189bc09ff6d25ca97ead711f7e26f9 upstream.
    
    The kernel may crash when deleting a genetlink family if there are still
    listeners for that family:
    
    Oops: Kernel access of bad area, sig: 11 [#1]
      ...
      NIP [c000000000c080bc] netlink_update_socket_mc+0x3c/0xc0
      LR [c000000000c0f764] __netlink_clear_multicast_users+0x74/0xc0
      Call Trace:
    __netlink_clear_multicast_users+0x74/0xc0
    genl_unregister_family+0xd4/0x2d0
    
    Change the unsafe loop on the list to a safe one, because inside the
    loop there is an element removal from this list.
    
    Fixes: b8273570f802 ("genetlink: fix netns vs. netlink table locking (2)")
    Cc: stable@vger.kernel.org
    Signed-off-by: Anastasia Kovaleva <a.kovaleva@yadro.com>
    Reviewed-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20241003104431.12391-1-a.kovaleva@yadro.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ftgmac100: Enable TX interrupt to avoid TX timeout [+ + +]
Author: Jacky Chou <jacky_chou@aspeedtech.com>
Date:   Fri Sep 6 14:28:31 2024 +0800

    net: ftgmac100: Enable TX interrupt to avoid TX timeout
    
    [ Upstream commit fef2843bb49f414d1523ca007d088071dee0e055 ]
    
    Currently, the driver only enables RX interrupt to handle RX
    packets and TX resources. Sometimes there is not RX traffic,
    so the TX resource needs to wait for RX interrupt to free.
    This situation will toggle the TX timeout watchdog when the MAC
    TX ring has no more resources to transmit packets.
    Therefore, enable TX interrupt to release TX resources at any time.
    
    When I am verifying iperf3 over UDP, the network hangs.
    Like the log below.
    
    root# iperf3 -c 192.168.100.100 -i1 -t10 -u -b0
    Connecting to host 192.168.100.100, port 5201
    [  4] local 192.168.100.101 port 35773 connected to 192.168.100.100 port 5201
    [ ID] Interval           Transfer     Bandwidth       Total Datagrams
    [  4]   0.00-20.42  sec   160 KBytes  64.2 Kbits/sec  20
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    [  4]  20.42-20.42  sec  0.00 Bytes  0.00 bits/sec  0
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval          Transfer    Bandwidth      Jitter   Lost/Total Datagrams
    [  4]   0.00-20.42  sec  160 KBytes 64.2 Kbits/sec 0.000 ms 0/20 (0%)
    [  4] Sent 20 datagrams
    iperf3: error - the server has terminated
    
    The network topology is FTGMAC connects directly to a PC.
    UDP does not need to wait for ACK, unlike TCP.
    Therefore, FTGMAC needs to enable TX interrupt to release TX resources instead
    of waiting for the RX interrupt.
    
    Fixes: 10cbd6407609 ("ftgmac100: Rework NAPI & interrupts handling")
    Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
    Link: https://patch.msgid.link/20240906062831.2243399-1-jacky_chou@aspeedtech.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ftgmac100: Ensure tx descriptor updates are visible [+ + +]
Author: Jacky Chou <jacky_chou@aspeedtech.com>
Date:   Thu Aug 22 15:30:06 2024 +0800

    net: ftgmac100: Ensure tx descriptor updates are visible
    
    [ Upstream commit 4186c8d9e6af57bab0687b299df10ebd47534a0a ]
    
    The driver must ensure TX descriptor updates are visible
    before updating TX pointer and TX clear pointer.
    
    This resolves TX hangs observed on AST2600 when running
    iperf3.
    
    Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: geneve: add missing netlink policy and size for IFLA_GENEVE_INNER_PROTO_INHERIT [+ + +]
Author: Eyal Birger <eyal.birger@gmail.com>
Date:   Tue Mar 22 06:39:54 2022 +0200

    net: geneve: add missing netlink policy and size for IFLA_GENEVE_INNER_PROTO_INHERIT
    
    commit 36c2e31ad25bd087756b8db9584994d1d80c236b upstream.
    
    Add missing netlink attribute policy and size calculation.
    Also enable strict validation from this new attribute onwards.
    
    Fixes: 435fe1c0c1f7 ("net: geneve: support IPv4/IPv6 as inner protocol")
    Signed-off-by: Eyal Birger <eyal.birger@gmail.com>
    Link: https://lore.kernel.org/r/20220322043954.3042468-1-eyal.birger@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: geneve: support IPv4/IPv6 as inner protocol [+ + +]
Author: Eyal Birger <eyal.birger@gmail.com>
Date:   Wed Mar 16 08:15:57 2022 +0200

    net: geneve: support IPv4/IPv6 as inner protocol
    
    [ Upstream commit 435fe1c0c1f74b682dba85641406abf4337aade6 ]
    
    This patch adds support for encapsulating IPv4/IPv6 within GENEVE.
    
    In order to use this, a new IFLA_GENEVE_INNER_PROTO_INHERIT flag needs
    to be provided at device creation. This property cannot be changed for
    the time being.
    
    In case IP traffic is received on a non-tun device the drop count is
    increased.
    
    Signed-off-by: Eyal Birger <eyal.birger@gmail.com>
    Link: https://lore.kernel.org/r/20220316061557.431872-1-eyal.birger@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: c471236b2359 ("bareudp: Pull inner IP header on xmit.")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: Handle l3mdev in ip_tunnel_init_flow [+ + +]
Author: David Ahern <dsahern@kernel.org>
Date:   Wed Apr 13 11:43:20 2022 -0600

    net: Handle l3mdev in ip_tunnel_init_flow
    
    commit db53cd3d88dc328dea2e968c9c8d3b4294a8a674 upstream.
    
    Ido reported that the commit referenced in the Fixes tag broke
    a gre use case with dummy devices. Add a check to ip_tunnel_init_flow
    to see if the oif is an l3mdev port and if so set the oif to 0 to
    avoid the oif comparison in fib_lookup_good_nhc.
    
    Fixes: 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices")
    Reported-by: Ido Schimmel <idosch@idosch.org>
    Signed-off-by: David Ahern <dsahern@kernel.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: hisilicon: hip04: fix OF node leak in probe() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Tue Aug 27 16:44:19 2024 +0200

    net: hisilicon: hip04: fix OF node leak in probe()
    
    [ Upstream commit 17555297dbd5bccc93a01516117547e26a61caf1 ]
    
    Driver is leaking OF node reference from
    of_parse_phandle_with_fixed_args() in probe().
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240827144421.52852-2-krzysztof.kozlowski@linaro.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hisilicon: hns_dsaf_mac: fix OF node leak in hns_mac_get_info() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Tue Aug 27 16:44:20 2024 +0200

    net: hisilicon: hns_dsaf_mac: fix OF node leak in hns_mac_get_info()
    
    [ Upstream commit 5680cf8d34e1552df987e2f4bb1bff0b2a8c8b11 ]
    
    Driver is leaking OF node reference from
    of_parse_phandle_with_fixed_args() in hns_mac_get_info().
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240827144421.52852-3-krzysztof.kozlowski@linaro.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hisilicon: hns_mdio: fix OF node leak in probe() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Tue Aug 27 16:44:21 2024 +0200

    net: hisilicon: hns_mdio: fix OF node leak in probe()
    
    [ Upstream commit e62beddc45f487b9969821fad3a0913d9bc18a2f ]
    
    Driver is leaking OF node reference from
    of_parse_phandle_with_fixed_args() in probe().
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240827144421.52852-4-krzysztof.kozlowski@linaro.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ibm: emac: mal: fix wrong goto [+ + +]
Author: Rosen Penev <rosenp@gmail.com>
Date:   Mon Oct 7 16:57:11 2024 -0700

    net: ibm: emac: mal: fix wrong goto
    
    [ Upstream commit 08c8acc9d8f3f70d62dd928571368d5018206490 ]
    
    dcr_map is called in the previous if and therefore needs to be unmapped.
    
    Fixes: 1ff0fcfcb1a6 ("ibm_newemac: Fix new MAL feature handling")
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Link: https://patch.msgid.link/20241007235711.5714-1-rosenp@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ieee802154: mcr20a: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Wed Sep 11 17:42:34 2024 +0800

    net: ieee802154: mcr20a: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit 09573b1cc76e7ff8f056ab29ea1cdc152ec8c653 ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Fixes: 8c6ad9cc5157 ("ieee802154: Add NXP MCR20A IEEE 802.15.4 transceiver driver")
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Link: https://lore.kernel.org/20240911094234.1922418-1-ruanjinjie@huawei.com
    Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv6: rpl_iptunnel: Fix memory leak in rpl_input [+ + +]
Author: Justin Iurman <justin.iurman@uliege.be>
Date:   Wed Sep 11 19:45:57 2024 +0200

    net: ipv6: rpl_iptunnel: Fix memory leak in rpl_input
    
    [ Upstream commit 2c84b0aa28b9e73e8c4b4ce038269469434ae372 ]
    
    Free the skb before returning from rpl_input when skb_cow_head() fails.
    Use a "drop" label and goto instructions.
    
    Fixes: a7a29f9c361f ("net: ipv6: add rpl sr tunnel")
    Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240911174557.11536-1-justin.iurman@uliege.be
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ipv6: select DST_CACHE from IPV6_RPL_LWTUNNEL [+ + +]
Author: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Date:   Mon Sep 16 20:57:13 2024 +0200

    net: ipv6: select DST_CACHE from IPV6_RPL_LWTUNNEL
    
    [ Upstream commit 93c21077bb9ba08807c459982d440dbbee4c7af3 ]
    
    The rpl sr tunnel code contains calls to dst_cache_*() which are
    only present when the dst cache is built.
    Select DST_CACHE to build the dst cache, similar to other kconfig
    options in the same file.
    Compiling the rpl sr tunnel without DST_CACHE will lead to linker
    errors.
    
    Fixes: a7a29f9c361f ("net: ipv6: add rpl sr tunnel")
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Simon Horman <horms@kernel.org> # build-tested
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mvpp2: Increase size of queue_name buffer [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Tue Aug 6 12:28:24 2024 +0100

    net: mvpp2: Increase size of queue_name buffer
    
    [ Upstream commit 91d516d4de48532d967a77967834e00c8c53dfe6 ]
    
    Increase size of queue_name buffer from 30 to 31 to accommodate
    the largest string written to it. This avoids truncation in
    the possibly unlikely case where the string is name is the
    maximum size.
    
    Flagged by gcc-14:
    
      .../mvpp2_main.c: In function 'mvpp2_probe':
      .../mvpp2_main.c:7636:32: warning: 'snprintf' output may be truncated before the last format character [-Wformat-truncation=]
       7636 |                  "stats-wq-%s%s", netdev_name(priv->port_list[0]->dev),
            |                                ^
      .../mvpp2_main.c:7635:9: note: 'snprintf' output between 10 and 31 bytes into a destination of size 30
       7635 |         snprintf(priv->queue_name, sizeof(priv->queue_name),
            |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       7636 |                  "stats-wq-%s%s", netdev_name(priv->port_list[0]->dev),
            |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       7637 |                  priv->port_count > 1 ? "+" : "");
            |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Introduced by commit 118d6298f6f0 ("net: mvpp2: add ethtool GOP statistics").
    I am not flagging this as a bug as I am not aware that it is one.
    
    Compile tested only.
    
    Signed-off-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Marcin Wojtas <marcin.s.wojtas@gmail.com>
    Link: https://patch.msgid.link/20240806-mvpp2-namelen-v1-1-6dc773653f2f@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: bcm84881: Fix some error handling paths [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Thu Oct 3 21:03:21 2024 +0200

    net: phy: bcm84881: Fix some error handling paths
    
    [ Upstream commit 9234a2549cb6ac038bec36cc7c084218e9575513 ]
    
    If phy_read_mmd() fails, the error code stored in 'bmsr' should be returned
    instead of 'val' which is likely to be 0.
    
    Fixes: 75f4d8d10e01 ("net: phy: add Broadcom BCM84881 PHY driver")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://patch.msgid.link/3e1755b0c40340d00e089d6adae5bca2f8c79e53.1727982168.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: dp83869: fix memory corruption when enabling fiber [+ + +]
Author: Ingo van Lil <inguin@gmx.de>
Date:   Wed Oct 2 18:18:07 2024 +0200

    net: phy: dp83869: fix memory corruption when enabling fiber
    
    [ Upstream commit a842e443ca8184f2dc82ab307b43a8b38defd6a5 ]
    
    When configuring the fiber port, the DP83869 PHY driver incorrectly
    calls linkmode_set_bit() with a bit mask (1 << 10) rather than a bit
    number (10). This corrupts some other memory location -- in case of
    arm64 the priv pointer in the same structure.
    
    Since the advertising flags are updated from supported at the end of the
    function the incorrect line isn't needed at all and can be removed.
    
    Fixes: a29de52ba2a1 ("net: dp83869: Add ability to advertise Fiber connection")
    Signed-off-by: Ingo van Lil <inguin@gmx.de>
    Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20241002161807.440378-1-inguin@gmx.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: vitesse: repair vsc73xx autonegotiation [+ + +]
Author: Pawel Dembicki <paweldembicki@gmail.com>
Date:   Fri Aug 9 21:38:06 2024 +0200

    net: phy: vitesse: repair vsc73xx autonegotiation
    
    [ Upstream commit de7a670f8defe4ed2115552ad23dea0f432f7be4 ]
    
    When the vsc73xx mdio bus work properly, the generic autonegotiation
    configuration works well.
    
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: qrtr: Update packets cloning when broadcasting [+ + +]
Author: Youssef Samir <quic_yabdulra@quicinc.com>
Date:   Mon Sep 16 19:08:58 2024 +0200

    net: qrtr: Update packets cloning when broadcasting
    
    [ Upstream commit f011b313e8ebd5b7abd8521b5119aecef403de45 ]
    
    When broadcasting data to multiple nodes via MHI, using skb_clone()
    causes all nodes to receive the same header data. This can result in
    packets being discarded by endpoints, leading to lost data.
    
    This issue occurs when a socket is closed, and a QRTR_TYPE_DEL_CLIENT
    packet is broadcasted. All nodes receive the same destination node ID,
    causing the node connected to the client to discard the packet and
    remain unaware of the client's deletion.
    
    Replace skb_clone() with pskb_copy(), to create a separate copy of
    the header for each sk_buff.
    
    Fixes: bdabad3e363d ("net: Add Qualcomm IPC router")
    Signed-off-by: Youssef Samir <quic_yabdulra@quicinc.com>
    Reviewed-by: Jeffery Hugo <quic_jhugo@quicinc.com>
    Reviewed-by: Carl Vanderlip <quic_carlv@quicinc.com>
    Reviewed-by: Chris Lew <quic_clew@quicinc.com>
    Link: https://patch.msgid.link/20240916170858.2382247-1-quic_yabdulra@quicinc.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: rtnetlink: add msg kind names [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Wed Apr 13 13:51:51 2022 +0300

    net: rtnetlink: add msg kind names
    
    [ Upstream commit 12dc5c2cb7b269c5a1c6d02844f40bfce942a7a6 ]
    
    Add rtnl kind names instead of using raw values. We'll need to
    check for DEL kind later to validate bulk flag support.
    
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d51705614f66 ("mctp: Handle error of rtnl_register_module().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: consistently use rcu_replace_pointer() in taprio_change() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Wed Sep 4 14:54:01 2024 +0300

    net: sched: consistently use rcu_replace_pointer() in taprio_change()
    
    [ Upstream commit d5c4546062fd6f5dbce575c7ea52ad66d1968678 ]
    
    According to Vinicius (and carefully looking through the whole
    https://syzkaller.appspot.com/bug?extid=b65e0af58423fc8a73aa
    once again), txtime branch of 'taprio_change()' is not going to
    race against 'advance_sched()'. But using 'rcu_replace_pointer()'
    in the former may be a good idea as well.
    
    Suggested-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition [+ + +]
Author: Kaixin Wang <kxwang23@m.fudan.edu.cn>
Date:   Sun Sep 15 22:40:46 2024 +0800

    net: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition
    
    [ Upstream commit b5109b60ee4fcb2f2bb24f589575e10cc5283ad4 ]
    
    In the ether3_probe function, a timer is initialized with a callback
    function ether3_ledoff, bound to &prev(dev)->timer. Once the timer is
    started, there is a risk of a race condition if the module or device
    is removed, triggering the ether3_remove function to perform cleanup.
    The sequence of operations that may lead to a UAF bug is as follows:
    
    CPU0                                    CPU1
    
                          |  ether3_ledoff
    ether3_remove         |
      free_netdev(dev);   |
      put_devic           |
      kfree(dev);         |
     |  ether3_outw(priv(dev)->regs.config2 |= CFG2_CTRLO, REG_CONFIG2);
                          | // use dev
    
    Fix it by ensuring that the timer is canceled before proceeding with
    the cleanup in ether3_remove.
    
    Fixes: 6fd9c53f7186 ("net: seeq: Convert timers to use timer_setup()")
    Signed-off-by: Kaixin Wang <kxwang23@m.fudan.edu.cn>
    Link: https://patch.msgid.link/20240915144045.451-1-kxwang23@m.fudan.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: seg6: fix seg6_lookup_any_nexthop() to handle VRFs using flowi_l3mdev [+ + +]
Author: Andrea Mayer <andrea.mayer@uniroma2.it>
Date:   Wed Jun 8 11:19:17 2022 +0200

    net: seg6: fix seg6_lookup_any_nexthop() to handle VRFs using flowi_l3mdev
    
    commit a3bd2102e464202b58d57390a538d96f57ffc361 upstream.
    
    Commit 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif
    reset for port devices") adds a new entry (flowi_l3mdev) in the common
    flow struct used for indicating the l3mdev index for later rule and
    table matching.
    The l3mdev_update_flow() has been adapted to properly set the
    flowi_l3mdev based on the flowi_oif/flowi_iif. In fact, when a valid
    flowi_iif is supplied to the l3mdev_update_flow(), this function can
    update the flowi_l3mdev entry only if it has not yet been set (i.e., the
    flowi_l3mdev entry is equal to 0).
    
    The SRv6 End.DT6 behavior in VRF mode leverages a VRF device in order to
    force the routing lookup into the associated routing table. This routing
    operation is performed by seg6_lookup_any_nextop() preparing a flowi6
    data structure used by ip6_route_input_lookup() which, in turn,
    (indirectly) invokes l3mdev_update_flow().
    
    However, seg6_lookup_any_nexthop() does not initialize the new
    flowi_l3mdev entry which is filled with random garbage data. This
    prevents l3mdev_update_flow() from properly updating the flowi_l3mdev
    with the VRF index, and thus SRv6 End.DT6 (VRF mode)/DT46 behaviors are
    broken.
    
    This patch correctly initializes the flowi6 instance allocated and used
    by seg6_lookup_any_nexhtop(). Specifically, the entire flowi6 instance
    is wiped out: in case new entries are added to flowi/flowi6 (as happened
    with the flowi_l3mdev entry), we should no longer have incorrectly
    initialized values. As a result of this operation, the value of
    flowi_l3mdev is also set to 0.
    
    The proposed fix can be tested easily. Starting from the commit
    referenced in the Fixes, selftests [1],[2] indicate that the SRv6
    End.DT6 (VRF mode)/DT46 behaviors no longer work correctly. By applying
    this patch, those behaviors are back to work properly again.
    
    [1] - tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh
    [2] - tools/testing/selftests/net/srv6_end_dt6_l3vpn_test.sh
    
    Fixes: 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices")
    Reported-by: Anton Makarov <am@3a-alliance.com>
    Signed-off-by: Andrea Mayer <andrea.mayer@uniroma2.it>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20220608091917.20345-1-andrea.mayer@uniroma2.it
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: Disable automatic FCS/Pad stripping [+ + +]
Author: Kurt Kanzenbach <kurt@linutronix.de>
Date:   Mon Sep 5 15:01:55 2022 +0200

    net: stmmac: Disable automatic FCS/Pad stripping
    
    [ Upstream commit 929d43421ee526c5a3c4d6f7e2bb1b98b2cb1b1f ]
    
    The stmmac has the possibility to automatically strip the padding/FCS for IEEE
    802.3 type frames. This feature is enabled conditionally. Therefore, the stmmac
    receive path has to have a determination logic whether the FCS has to be
    stripped in software or not.
    
    In fact, for DSA this ACS feature is disabled and the determination logic
    doesn't check for it properly. For instance, when using DSA in combination with
    an older stmmac (pre version 4), the FCS is not stripped by hardware or software
    which is problematic.
    
    So either add another check for DSA to the fast path or simply disable ACS
    feature completely. The latter approach has been chosen, because most of the
    time the FCS is stripped in software anyway and it removes conditionals from the
    receive fast path.
    
    Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Link: https://lore.kernel.org/r/87v8q8jjgh.fsf@kurt/
    Link: https://lore.kernel.org/r/20220905130155.193640-1-kurt@linutronix.de
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 4c1b56671b68 ("net: stmmac: dwmac4: extend timeout for VLAN Tag register busy bit check")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: dwmac-loongson: Init ref and PTP clocks rate [+ + +]
Author: Yanteng Si <siyanteng@loongson.cn>
Date:   Wed Aug 7 21:48:02 2024 +0800

    net: stmmac: dwmac-loongson: Init ref and PTP clocks rate
    
    [ Upstream commit c70f3163681381c15686bdd2fe56bf4af9b8aaaa ]
    
    Reference and PTP clocks rate of the Loongson GMAC devices is 125MHz.
    (So is in the GNET devices which support is about to be added.) Set
    the respective plat_stmmacenet_data field up in accordance with that
    so to have the coalesce command and timestamping work correctly.
    
    Fixes: 30bba69d7db4 ("stmmac: pci: Add dwmac support for Loongson")
    Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn>
    Signed-off-by: Yinggang Gu <guyinggang@loongson.cn>
    Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
    Acked-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
    Tested-by: Serge Semin <fancer.lancer@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: dwmac4: extend timeout for VLAN Tag register busy bit check [+ + +]
Author: Shenwei Wang <shenwei.wang@nxp.com>
Date:   Tue Sep 24 15:54:24 2024 -0500

    net: stmmac: dwmac4: extend timeout for VLAN Tag register busy bit check
    
    [ Upstream commit 4c1b56671b68ffcbe6b78308bfdda6bcce6491ae ]
    
    Increase the timeout for checking the busy bit of the VLAN Tag register
    from 10µs to 500ms. This change is necessary to accommodate scenarios
    where Energy Efficient Ethernet (EEE) is enabled.
    
    Overnight testing revealed that when EEE is active, the busy bit can
    remain set for up to approximately 300ms. The new 500ms timeout provides
    a safety margin.
    
    Fixes: ed64639bc1e0 ("net: stmmac: Add support for VLAN Rx filtering")
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Shenwei Wang <shenwei.wang@nxp.com>
    Link: https://patch.msgid.link/20240924205424.573913-1-shenwei.wang@nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: Fix zero-division error when disabling tc cbs [+ + +]
Author: KhaiWenTan <khai.wen.tan@linux.intel.com>
Date:   Wed Sep 18 14:14:22 2024 +0800

    net: stmmac: Fix zero-division error when disabling tc cbs
    
    commit 675faf5a14c14a2be0b870db30a70764df81e2df upstream.
    
    The commit b8c43360f6e4 ("net: stmmac: No need to calculate speed divider
    when offload is disabled") allows the "port_transmit_rate_kbps" to be
    set to a value of 0, which is then passed to the "div_s64" function when
    tc-cbs is disabled. This leads to a zero-division error.
    
    When tc-cbs is disabled, the idleslope, sendslope, and credit values the
    credit values are not required to be configured. Therefore, adding a return
    statement after setting the txQ mode to DCB when tc-cbs is disabled would
    prevent a zero-division error.
    
    Fixes: b8c43360f6e4 ("net: stmmac: No need to calculate speed divider when offload is disabled")
    Cc: <stable@vger.kernel.org>
    Co-developed-by: Choong Yong Liang <yong.liang.choong@linux.intel.com>
    Signed-off-by: Choong Yong Liang <yong.liang.choong@linux.intel.com>
    Signed-off-by: KhaiWenTan <khai.wen.tan@linux.intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240918061422.1589662-1-khai.wen.tan@linux.intel.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: tighten bad gso csum offset check in virtio_net_hdr [+ + +]
Author: Willem de Bruijn <willemb@google.com>
Date:   Tue Sep 10 17:35:35 2024 -0400

    net: tighten bad gso csum offset check in virtio_net_hdr
    
    commit 6513eb3d3191574b58859ef2d6dc26c0277c6f81 upstream.
    
    The referenced commit drops bad input, but has false positives.
    Tighten the check to avoid these.
    
    The check detects illegal checksum offload requests, which produce
    csum_start/csum_off beyond end of packet after segmentation.
    
    But it is based on two incorrect assumptions:
    
    1. virtio_net_hdr_to_skb with VIRTIO_NET_HDR_GSO_TCP[46] implies GSO.
    True in callers that inject into the tx path, such as tap.
    But false in callers that inject into rx, like virtio-net.
    Here, the flags indicate GRO, and CHECKSUM_UNNECESSARY or
    CHECKSUM_NONE without VIRTIO_NET_HDR_F_NEEDS_CSUM is normal.
    
    2. TSO requires checksum offload, i.e., ip_summed == CHECKSUM_PARTIAL.
    False, as tcp[46]_gso_segment will fix up csum_start and offset for
    all other ip_summed by calling __tcp_v4_send_check.
    
    Because of 2, we can limit the scope of the fix to virtio_net_hdr
    that do try to set these fields, with a bogus value.
    
    Link: https://lore.kernel.org/netdev/20240909094527.GA3048202@port70.net/
    Fixes: 89add40066f9 ("net: drop bad gso csum_start and offset in virtio_net_hdr")
    Signed-off-by: Willem de Bruijn <willemb@google.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20240910213553.839926-1-willemdebruijn.kernel@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: tipc: avoid possible garbage value [+ + +]
Author: Su Hui <suhui@nfschina.com>
Date:   Thu Sep 12 19:01:20 2024 +0800

    net: tipc: avoid possible garbage value
    
    [ Upstream commit 99655a304e450baaae6b396cb942b9e47659d644 ]
    
    Clang static checker (scan-build) warning:
    net/tipc/bcast.c:305:4:
    The expression is an uninitialized value. The computed value will also
    be garbage [core.uninitialized.Assign]
      305 |                         (*cong_link_cnt)++;
          |                         ^~~~~~~~~~~~~~~~~~
    
    tipc_rcast_xmit() will increase cong_link_cnt's value, but cong_link_cnt
    is uninitialized. Although it won't really cause a problem, it's better
    to fix it.
    
    Fixes: dca4a17d24ee ("tipc: fix potential hanging after b/rcast changing")
    Signed-off-by: Su Hui <suhui@nfschina.com>
    Reviewed-by: Justin Stitt <justinstitt@google.com>
    Link: https://patch.msgid.link/20240912110119.2025503-1-suhui@nfschina.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: vrf: determine the dst using the original ifindex for multicast [+ + +]
Author: Antoine Tenart <atenart@kernel.org>
Date:   Tue Dec 20 18:18:25 2022 +0100

    net: vrf: determine the dst using the original ifindex for multicast
    
    commit f2575c8f404911da83f25b688e12afcf4273e640 upstream.
    
    Multicast packets received on an interface bound to a VRF are marked as
    belonging to the VRF and the skb device is updated to point to the VRF
    device itself. This was fine even when a route was associated to a
    device as when performing a fib table lookup 'oif' in fib6_table_lookup
    (coming from 'skb->dev->ifindex' in ip6_route_input) was set to 0 when
    FLOWI_FLAG_SKIP_NH_OIF was set.
    
    With commit 40867d74c374 ("net: Add l3mdev index to flow struct and
    avoid oif reset for port devices") this is not longer true and multicast
    traffic is not received on the original interface.
    
    Instead of adding back a similar check in fib6_table_lookup determine
    the dst using the original ifindex for multicast VRF traffic. To make
    things consistent across the function do the above for all strict
    packets, which was the logic before commit 6f12fa775530 ("vrf: mark skb
    for multicast or link-local as enslaved to VRF"). Note that reverting to
    this behavior should be fine as the change was about marking packets
    belonging to the VRF, not about their dst.
    
    Fixes: 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices")
    Reported-by: Jianlin Shi <jishi@redhat.com>
    Signed-off-by: Antoine Tenart <atenart@kernel.org>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20221220171825.1172237-1-atenart@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: xilinx: axienet: Fix packet counting [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Fri Sep 13 10:51:56 2024 -0400

    net: xilinx: axienet: Fix packet counting
    
    [ Upstream commit 5a6caa2cfabb559309b5ce29ee7c8e9ce1a9a9df ]
    
    axienet_free_tx_chain returns the number of DMA descriptors it's
    handled. However, axienet_tx_poll treats the return as the number of
    packets. When scatter-gather SKBs are enabled, a single packet may use
    multiple DMA descriptors, which causes incorrect packet counts. Fix this
    by explicitly keepting track of the number of packets processed as
    separate from the DMA descriptors.
    
    Budget does not affect the number of Tx completions we can process for
    NAPI, so we use the ring size as the limit instead of budget. As we no
    longer return the number of descriptors processed to axienet_tx_poll, we
    now update tx_bd_ci in axienet_free_tx_chain.
    
    Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Link: https://patch.msgid.link/20240913145156.2283067-1-sean.anderson@linux.dev
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: xilinx: axienet: Schedule NAPI in two steps [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Fri Sep 13 10:57:11 2024 -0400

    net: xilinx: axienet: Schedule NAPI in two steps
    
    commit ba0da2dc934ec5ac32bbeecbd0670da16ba03565 upstream.
    
    As advised by Documentation/networking/napi.rst, masking IRQs after
    calling napi_schedule can be racy. Avoid this by only masking/scheduling
    if napi_schedule_prep returns true.
    
    Fixes: 9e2bc267e780 ("net: axienet: Use NAPI for TX completion path")
    Fixes: cc37610caaf8 ("net: axienet: implement NAPI and GRO receive")
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240913145711.2284295-1-sean.anderson@linux.dev
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: br_netfilter: fix panic with metadata_dst skb [+ + +]
Author: Andy Roulin <aroulin@nvidia.com>
Date:   Tue Oct 1 08:43:59 2024 -0700

    netfilter: br_netfilter: fix panic with metadata_dst skb
    
    [ Upstream commit f9ff7665cd128012868098bbd07e28993e314fdb ]
    
    Fix a kernel panic in the br_netfilter module when sending untagged
    traffic via a VxLAN device.
    This happens during the check for fragmentation in br_nf_dev_queue_xmit.
    
    It is dependent on:
    1) the br_netfilter module being loaded;
    2) net.bridge.bridge-nf-call-iptables set to 1;
    3) a bridge with a VxLAN (single-vxlan-device) netdevice as a bridge port;
    4) untagged frames with size higher than the VxLAN MTU forwarded/flooded
    
    When forwarding the untagged packet to the VxLAN bridge port, before
    the netfilter hooks are called, br_handle_egress_vlan_tunnel is called and
    changes the skb_dst to the tunnel dst. The tunnel_dst is a metadata type
    of dst, i.e., skb_valid_dst(skb) is false, and metadata->dst.dev is NULL.
    
    Then in the br_netfilter hooks, in br_nf_dev_queue_xmit, there's a check
    for frames that needs to be fragmented: frames with higher MTU than the
    VxLAN device end up calling br_nf_ip_fragment, which in turns call
    ip_skb_dst_mtu.
    
    The ip_dst_mtu tries to use the skb_dst(skb) as if it was a valid dst
    with valid dst->dev, thus the crash.
    
    This case was never supported in the first place, so drop the packet
    instead.
    
    PING 10.0.0.2 (10.0.0.2) from 0.0.0.0 h1-eth0: 2000(2028) bytes of data.
    [  176.291791] Unable to handle kernel NULL pointer dereference at
    virtual address 0000000000000110
    [  176.292101] Mem abort info:
    [  176.292184]   ESR = 0x0000000096000004
    [  176.292322]   EC = 0x25: DABT (current EL), IL = 32 bits
    [  176.292530]   SET = 0, FnV = 0
    [  176.292709]   EA = 0, S1PTW = 0
    [  176.292862]   FSC = 0x04: level 0 translation fault
    [  176.293013] Data abort info:
    [  176.293104]   ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
    [  176.293488]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [  176.293787]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [  176.293995] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000043ef5000
    [  176.294166] [0000000000000110] pgd=0000000000000000,
    p4d=0000000000000000
    [  176.294827] Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP
    [  176.295252] Modules linked in: vxlan ip6_udp_tunnel udp_tunnel veth
    br_netfilter bridge stp llc ipv6 crct10dif_ce
    [  176.295923] CPU: 0 PID: 188 Comm: ping Not tainted
    6.8.0-rc3-g5b3fbd61b9d1 #2
    [  176.296314] Hardware name: linux,dummy-virt (DT)
    [  176.296535] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS
    BTYPE=--)
    [  176.296808] pc : br_nf_dev_queue_xmit+0x390/0x4ec [br_netfilter]
    [  176.297382] lr : br_nf_dev_queue_xmit+0x2ac/0x4ec [br_netfilter]
    [  176.297636] sp : ffff800080003630
    [  176.297743] x29: ffff800080003630 x28: 0000000000000008 x27:
    ffff6828c49ad9f8
    [  176.298093] x26: ffff6828c49ad000 x25: 0000000000000000 x24:
    00000000000003e8
    [  176.298430] x23: 0000000000000000 x22: ffff6828c4960b40 x21:
    ffff6828c3b16d28
    [  176.298652] x20: ffff6828c3167048 x19: ffff6828c3b16d00 x18:
    0000000000000014
    [  176.298926] x17: ffffb0476322f000 x16: ffffb7e164023730 x15:
    0000000095744632
    [  176.299296] x14: ffff6828c3f1c880 x13: 0000000000000002 x12:
    ffffb7e137926a70
    [  176.299574] x11: 0000000000000001 x10: ffff6828c3f1c898 x9 :
    0000000000000000
    [  176.300049] x8 : ffff6828c49bf070 x7 : 0008460f18d5f20e x6 :
    f20e0100bebafeca
    [  176.300302] x5 : ffff6828c7f918fe x4 : ffff6828c49bf070 x3 :
    0000000000000000
    [  176.300586] x2 : 0000000000000000 x1 : ffff6828c3c7ad00 x0 :
    ffff6828c7f918f0
    [  176.300889] Call trace:
    [  176.301123]  br_nf_dev_queue_xmit+0x390/0x4ec [br_netfilter]
    [  176.301411]  br_nf_post_routing+0x2a8/0x3e4 [br_netfilter]
    [  176.301703]  nf_hook_slow+0x48/0x124
    [  176.302060]  br_forward_finish+0xc8/0xe8 [bridge]
    [  176.302371]  br_nf_hook_thresh+0x124/0x134 [br_netfilter]
    [  176.302605]  br_nf_forward_finish+0x118/0x22c [br_netfilter]
    [  176.302824]  br_nf_forward_ip.part.0+0x264/0x290 [br_netfilter]
    [  176.303136]  br_nf_forward+0x2b8/0x4e0 [br_netfilter]
    [  176.303359]  nf_hook_slow+0x48/0x124
    [  176.303803]  __br_forward+0xc4/0x194 [bridge]
    [  176.304013]  br_flood+0xd4/0x168 [bridge]
    [  176.304300]  br_handle_frame_finish+0x1d4/0x5c4 [bridge]
    [  176.304536]  br_nf_hook_thresh+0x124/0x134 [br_netfilter]
    [  176.304978]  br_nf_pre_routing_finish+0x29c/0x494 [br_netfilter]
    [  176.305188]  br_nf_pre_routing+0x250/0x524 [br_netfilter]
    [  176.305428]  br_handle_frame+0x244/0x3cc [bridge]
    [  176.305695]  __netif_receive_skb_core.constprop.0+0x33c/0xecc
    [  176.306080]  __netif_receive_skb_one_core+0x40/0x8c
    [  176.306197]  __netif_receive_skb+0x18/0x64
    [  176.306369]  process_backlog+0x80/0x124
    [  176.306540]  __napi_poll+0x38/0x17c
    [  176.306636]  net_rx_action+0x124/0x26c
    [  176.306758]  __do_softirq+0x100/0x26c
    [  176.307051]  ____do_softirq+0x10/0x1c
    [  176.307162]  call_on_irq_stack+0x24/0x4c
    [  176.307289]  do_softirq_own_stack+0x1c/0x2c
    [  176.307396]  do_softirq+0x54/0x6c
    [  176.307485]  __local_bh_enable_ip+0x8c/0x98
    [  176.307637]  __dev_queue_xmit+0x22c/0xd28
    [  176.307775]  neigh_resolve_output+0xf4/0x1a0
    [  176.308018]  ip_finish_output2+0x1c8/0x628
    [  176.308137]  ip_do_fragment+0x5b4/0x658
    [  176.308279]  ip_fragment.constprop.0+0x48/0xec
    [  176.308420]  __ip_finish_output+0xa4/0x254
    [  176.308593]  ip_finish_output+0x34/0x130
    [  176.308814]  ip_output+0x6c/0x108
    [  176.308929]  ip_send_skb+0x50/0xf0
    [  176.309095]  ip_push_pending_frames+0x30/0x54
    [  176.309254]  raw_sendmsg+0x758/0xaec
    [  176.309568]  inet_sendmsg+0x44/0x70
    [  176.309667]  __sys_sendto+0x110/0x178
    [  176.309758]  __arm64_sys_sendto+0x28/0x38
    [  176.309918]  invoke_syscall+0x48/0x110
    [  176.310211]  el0_svc_common.constprop.0+0x40/0xe0
    [  176.310353]  do_el0_svc+0x1c/0x28
    [  176.310434]  el0_svc+0x34/0xb4
    [  176.310551]  el0t_64_sync_handler+0x120/0x12c
    [  176.310690]  el0t_64_sync+0x190/0x194
    [  176.311066] Code: f9402e61 79402aa2 927ff821 f9400023 (f9408860)
    [  176.315743] ---[ end trace 0000000000000000 ]---
    [  176.316060] Kernel panic - not syncing: Oops: Fatal exception in
    interrupt
    [  176.316371] Kernel Offset: 0x37e0e3000000 from 0xffff800080000000
    [  176.316564] PHYS_OFFSET: 0xffff97d780000000
    [  176.316782] CPU features: 0x0,88000203,3c020000,0100421b
    [  176.317210] Memory Limit: none
    [  176.317527] ---[ end Kernel panic - not syncing: Oops: Fatal
    Exception in interrupt ]---\
    
    Fixes: 11538d039ac6 ("bridge: vlan dst_metadata hooks in ingress and egress paths")
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: Andy Roulin <aroulin@nvidia.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Link: https://patch.msgid.link/20241001154400.22787-2-aroulin@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ctnetlink: compile ctnetlink_label_size with CONFIG_NF_CONNTRACK_EVENTS [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Mon Sep 16 16:14:41 2024 +0100

    netfilter: ctnetlink: compile ctnetlink_label_size with CONFIG_NF_CONNTRACK_EVENTS
    
    [ Upstream commit e1f1ee0e9ad8cbe660f5c104e791c5f1a7cf4c31 ]
    
    Only provide ctnetlink_label_size when it is used,
    which is when CONFIG_NF_CONNTRACK_EVENTS is configured.
    
    Flagged by clang-18 W=1 builds as:
    
    .../nf_conntrack_netlink.c:385:19: warning: unused function 'ctnetlink_label_size' [-Wunused-function]
      385 | static inline int ctnetlink_label_size(const struct nf_conn *ct)
          |                   ^~~~~~~~~~~~~~~~~~~~
    
    The condition on CONFIG_NF_CONNTRACK_LABELS being removed by
    this patch guards compilation of non-trivial implementations
    of ctnetlink_dump_labels() and ctnetlink_label_size().
    
    However, this is not necessary as each of these functions
    will always return 0 if CONFIG_NF_CONNTRACK_LABELS is not defined
    as each function starts with the equivalent of:
    
            struct nf_conn_labels *labels = nf_ct_labels_find(ct);
    
            if (!labels)
                    return 0;
    
    And nf_ct_labels_find always returns NULL if CONFIG_NF_CONNTRACK_LABELS
    is not enabled.  So I believe that the compiler optimises the code away
    in such cases anyway.
    
    Found by inspection.
    Compile tested only.
    
    Originally splitted in two patches, Pablo Neira Ayuso collapsed them and
    added Fixes: tag.
    
    Fixes: 0ceabd83875b ("netfilter: ctnetlink: deliver labels to userspace")
    Link: https://lore.kernel.org/netfilter-devel/20240909151712.GZ2097826@kernel.org/
    Signed-off-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: fib: check correct rtable in vrf setups [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Oct 9 09:19:02 2024 +0200

    netfilter: fib: check correct rtable in vrf setups
    
    [ Upstream commit 05ef7055debc804e8083737402127975e7244fc4 ]
    
    We need to init l3mdev unconditionally, else main routing table is searched
    and incorrect result is returned unless strict (iif keyword) matching is
    requested.
    
    Next patch adds a selftest for this.
    
    Fixes: 2a8a7c0eaa87 ("netfilter: nft_fib: Fix for rpath check with VRF devices")
    Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1761
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ip6t_rpfilter: Fix regression with VRF interfaces [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Thu Feb 16 17:05:36 2023 +0100

    netfilter: ip6t_rpfilter: Fix regression with VRF interfaces
    
    commit efb056e5f1f0036179b2f92c1c15f5ea7a891d70 upstream.
    
    When calling ip6_route_lookup() for the packet arriving on the VRF
    interface, the result is always the real (slave) interface. Expect this
    when validating the result.
    
    Fixes: acc641ab95b66 ("netfilter: rpfilter/fib: Populate flowic_l3mdev field")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_reject_ipv6: fix nf_reject_ip6_tcphdr_put() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Sep 13 17:06:15 2024 +0000

    netfilter: nf_reject_ipv6: fix nf_reject_ip6_tcphdr_put()
    
    [ Upstream commit 9c778fe48d20ef362047e3376dee56d77f8500d4 ]
    
    syzbot reported that nf_reject_ip6_tcphdr_put() was possibly sending
    garbage on the four reserved tcp bits (th->res1)
    
    Use skb_put_zero() to clear the whole TCP header,
    as done in nf_reject_ip_tcphdr_put()
    
    BUG: KMSAN: uninit-value in nf_reject_ip6_tcphdr_put+0x688/0x6c0 net/ipv6/netfilter/nf_reject_ipv6.c:255
      nf_reject_ip6_tcphdr_put+0x688/0x6c0 net/ipv6/netfilter/nf_reject_ipv6.c:255
      nf_send_reset6+0xd84/0x15b0 net/ipv6/netfilter/nf_reject_ipv6.c:344
      nft_reject_inet_eval+0x3c1/0x880 net/netfilter/nft_reject_inet.c:48
      expr_call_ops_eval net/netfilter/nf_tables_core.c:240 [inline]
      nft_do_chain+0x438/0x22a0 net/netfilter/nf_tables_core.c:288
      nft_do_chain_inet+0x41a/0x4f0 net/netfilter/nft_chain_filter.c:161
      nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
      nf_hook_slow+0xf4/0x400 net/netfilter/core.c:626
      nf_hook include/linux/netfilter.h:269 [inline]
      NF_HOOK include/linux/netfilter.h:312 [inline]
      ipv6_rcv+0x29b/0x390 net/ipv6/ip6_input.c:310
      __netif_receive_skb_one_core net/core/dev.c:5661 [inline]
      __netif_receive_skb+0x1da/0xa00 net/core/dev.c:5775
      process_backlog+0x4ad/0xa50 net/core/dev.c:6108
      __napi_poll+0xe7/0x980 net/core/dev.c:6772
      napi_poll net/core/dev.c:6841 [inline]
      net_rx_action+0xa5a/0x19b0 net/core/dev.c:6963
      handle_softirqs+0x1ce/0x800 kernel/softirq.c:554
      __do_softirq+0x14/0x1a kernel/softirq.c:588
      do_softirq+0x9a/0x100 kernel/softirq.c:455
      __local_bh_enable_ip+0x9f/0xb0 kernel/softirq.c:382
      local_bh_enable include/linux/bottom_half.h:33 [inline]
      rcu_read_unlock_bh include/linux/rcupdate.h:908 [inline]
      __dev_queue_xmit+0x2692/0x5610 net/core/dev.c:4450
      dev_queue_xmit include/linux/netdevice.h:3105 [inline]
      neigh_resolve_output+0x9ca/0xae0 net/core/neighbour.c:1565
      neigh_output include/net/neighbour.h:542 [inline]
      ip6_finish_output2+0x2347/0x2ba0 net/ipv6/ip6_output.c:141
      __ip6_finish_output net/ipv6/ip6_output.c:215 [inline]
      ip6_finish_output+0xbb8/0x14b0 net/ipv6/ip6_output.c:226
      NF_HOOK_COND include/linux/netfilter.h:303 [inline]
      ip6_output+0x356/0x620 net/ipv6/ip6_output.c:247
      dst_output include/net/dst.h:450 [inline]
      NF_HOOK include/linux/netfilter.h:314 [inline]
      ip6_xmit+0x1ba6/0x25d0 net/ipv6/ip6_output.c:366
      inet6_csk_xmit+0x442/0x530 net/ipv6/inet6_connection_sock.c:135
      __tcp_transmit_skb+0x3b07/0x4880 net/ipv4/tcp_output.c:1466
      tcp_transmit_skb net/ipv4/tcp_output.c:1484 [inline]
      tcp_connect+0x35b6/0x7130 net/ipv4/tcp_output.c:4143
      tcp_v6_connect+0x1bcc/0x1e40 net/ipv6/tcp_ipv6.c:333
      __inet_stream_connect+0x2ef/0x1730 net/ipv4/af_inet.c:679
      inet_stream_connect+0x6a/0xd0 net/ipv4/af_inet.c:750
      __sys_connect_file net/socket.c:2061 [inline]
      __sys_connect+0x606/0x690 net/socket.c:2078
      __do_sys_connect net/socket.c:2088 [inline]
      __se_sys_connect net/socket.c:2085 [inline]
      __x64_sys_connect+0x91/0xe0 net/socket.c:2085
      x64_sys_call+0x27a5/0x3ba0 arch/x86/include/generated/asm/syscalls_64.h:43
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was stored to memory at:
      nf_reject_ip6_tcphdr_put+0x60c/0x6c0 net/ipv6/netfilter/nf_reject_ipv6.c:249
      nf_send_reset6+0xd84/0x15b0 net/ipv6/netfilter/nf_reject_ipv6.c:344
      nft_reject_inet_eval+0x3c1/0x880 net/netfilter/nft_reject_inet.c:48
      expr_call_ops_eval net/netfilter/nf_tables_core.c:240 [inline]
      nft_do_chain+0x438/0x22a0 net/netfilter/nf_tables_core.c:288
      nft_do_chain_inet+0x41a/0x4f0 net/netfilter/nft_chain_filter.c:161
      nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
      nf_hook_slow+0xf4/0x400 net/netfilter/core.c:626
      nf_hook include/linux/netfilter.h:269 [inline]
      NF_HOOK include/linux/netfilter.h:312 [inline]
      ipv6_rcv+0x29b/0x390 net/ipv6/ip6_input.c:310
      __netif_receive_skb_one_core net/core/dev.c:5661 [inline]
      __netif_receive_skb+0x1da/0xa00 net/core/dev.c:5775
      process_backlog+0x4ad/0xa50 net/core/dev.c:6108
      __napi_poll+0xe7/0x980 net/core/dev.c:6772
      napi_poll net/core/dev.c:6841 [inline]
      net_rx_action+0xa5a/0x19b0 net/core/dev.c:6963
      handle_softirqs+0x1ce/0x800 kernel/softirq.c:554
      __do_softirq+0x14/0x1a kernel/softirq.c:588
    
    Uninit was stored to memory at:
      nf_reject_ip6_tcphdr_put+0x2ca/0x6c0 net/ipv6/netfilter/nf_reject_ipv6.c:231
      nf_send_reset6+0xd84/0x15b0 net/ipv6/netfilter/nf_reject_ipv6.c:344
      nft_reject_inet_eval+0x3c1/0x880 net/netfilter/nft_reject_inet.c:48
      expr_call_ops_eval net/netfilter/nf_tables_core.c:240 [inline]
      nft_do_chain+0x438/0x22a0 net/netfilter/nf_tables_core.c:288
      nft_do_chain_inet+0x41a/0x4f0 net/netfilter/nft_chain_filter.c:161
      nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
      nf_hook_slow+0xf4/0x400 net/netfilter/core.c:626
      nf_hook include/linux/netfilter.h:269 [inline]
      NF_HOOK include/linux/netfilter.h:312 [inline]
      ipv6_rcv+0x29b/0x390 net/ipv6/ip6_input.c:310
      __netif_receive_skb_one_core net/core/dev.c:5661 [inline]
      __netif_receive_skb+0x1da/0xa00 net/core/dev.c:5775
      process_backlog+0x4ad/0xa50 net/core/dev.c:6108
      __napi_poll+0xe7/0x980 net/core/dev.c:6772
      napi_poll net/core/dev.c:6841 [inline]
      net_rx_action+0xa5a/0x19b0 net/core/dev.c:6963
      handle_softirqs+0x1ce/0x800 kernel/softirq.c:554
      __do_softirq+0x14/0x1a kernel/softirq.c:588
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:3998 [inline]
      slab_alloc_node mm/slub.c:4041 [inline]
      kmem_cache_alloc_node_noprof+0x6bf/0xb80 mm/slub.c:4084
      kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:583
      __alloc_skb+0x363/0x7b0 net/core/skbuff.c:674
      alloc_skb include/linux/skbuff.h:1320 [inline]
      nf_send_reset6+0x98d/0x15b0 net/ipv6/netfilter/nf_reject_ipv6.c:327
      nft_reject_inet_eval+0x3c1/0x880 net/netfilter/nft_reject_inet.c:48
      expr_call_ops_eval net/netfilter/nf_tables_core.c:240 [inline]
      nft_do_chain+0x438/0x22a0 net/netfilter/nf_tables_core.c:288
      nft_do_chain_inet+0x41a/0x4f0 net/netfilter/nft_chain_filter.c:161
      nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
      nf_hook_slow+0xf4/0x400 net/netfilter/core.c:626
      nf_hook include/linux/netfilter.h:269 [inline]
      NF_HOOK include/linux/netfilter.h:312 [inline]
      ipv6_rcv+0x29b/0x390 net/ipv6/ip6_input.c:310
      __netif_receive_skb_one_core net/core/dev.c:5661 [inline]
      __netif_receive_skb+0x1da/0xa00 net/core/dev.c:5775
      process_backlog+0x4ad/0xa50 net/core/dev.c:6108
      __napi_poll+0xe7/0x980 net/core/dev.c:6772
      napi_poll net/core/dev.c:6841 [inline]
      net_rx_action+0xa5a/0x19b0 net/core/dev.c:6963
      handle_softirqs+0x1ce/0x800 kernel/softirq.c:554
      __do_softirq+0x14/0x1a kernel/softirq.c:588
    
    Fixes: c8d7b98bec43 ("netfilter: move nf_send_resetX() code to nf_reject_ipvX modules")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Link: https://patch.msgid.link/20240913170615.3670897-1-edumazet@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: elements with timeout below CONFIG_HZ never expire [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Sep 3 01:06:41 2024 +0200

    netfilter: nf_tables: elements with timeout below CONFIG_HZ never expire
    
    [ Upstream commit e0c47281723f301894c14e6f5cd5884fdfb813f9 ]
    
    Element timeout that is below CONFIG_HZ never expires because the
    timeout extension is not allocated given that nf_msecs_to_jiffies64()
    returns 0. Set timeout to the minimum value to honor timeout.
    
    Fixes: 8e1102d5a159 ("netfilter: nf_tables: support timeouts larger than 23 days")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Keep deleted flowtable hooks until after RCU [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Thu Sep 12 14:21:33 2024 +0200

    netfilter: nf_tables: Keep deleted flowtable hooks until after RCU
    
    [ Upstream commit 642c89c475419b4d0c0d90e29d9c1a0e4351f379 ]
    
    Documentation of list_del_rcu() warns callers to not immediately free
    the deleted list item. While it seems not necessary to use the
    RCU-variant of list_del() here in the first place, doing so seems to
    require calling kfree_rcu() on the deleted item as well.
    
    Fixes: 3f0465a9ef02 ("netfilter: nf_tables: dynamically allocate hooks per net_device in flowtables")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: missing iterator type in lookup walk [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Sep 17 22:25:15 2024 +0200

    netfilter: nf_tables: missing iterator type in lookup walk
    
    commit efefd4f00c967d00ad7abe092554ffbb70c1a793 upstream.
    
    Add missing decorator type to lookup expression and tighten WARN_ON_ONCE
    check in pipapo to spot earlier that this is unset.
    
    Fixes: 29b359cf6d95 ("netfilter: nft_set_pipapo: walk over current view on netlink dump")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: prevent nf_skb_duplicated corruption [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Sep 26 18:56:11 2024 +0000

    netfilter: nf_tables: prevent nf_skb_duplicated corruption
    
    [ Upstream commit 92ceba94de6fb4cee2bf40b485979c342f44a492 ]
    
    syzbot found that nf_dup_ipv4() or nf_dup_ipv6() could write
    per-cpu variable nf_skb_duplicated in an unsafe way [1].
    
    Disabling preemption as hinted by the splat is not enough,
    we have to disable soft interrupts as well.
    
    [1]
    BUG: using __this_cpu_write() in preemptible [00000000] code: syz.4.282/6316
     caller is nf_dup_ipv4+0x651/0x8f0 net/ipv4/netfilter/nf_dup_ipv4.c:87
    CPU: 0 UID: 0 PID: 6316 Comm: syz.4.282 Not tainted 6.11.0-rc7-syzkaller-00104-g7052622fccb1 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
    Call Trace:
     <TASK>
      __dump_stack lib/dump_stack.c:93 [inline]
      dump_stack_lvl+0x241/0x360 lib/dump_stack.c:119
      check_preemption_disabled+0x10e/0x120 lib/smp_processor_id.c:49
      nf_dup_ipv4+0x651/0x8f0 net/ipv4/netfilter/nf_dup_ipv4.c:87
      nft_dup_ipv4_eval+0x1db/0x300 net/ipv4/netfilter/nft_dup_ipv4.c:30
      expr_call_ops_eval net/netfilter/nf_tables_core.c:240 [inline]
      nft_do_chain+0x4ad/0x1da0 net/netfilter/nf_tables_core.c:288
      nft_do_chain_ipv4+0x202/0x320 net/netfilter/nft_chain_filter.c:23
      nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
      nf_hook_slow+0xc3/0x220 net/netfilter/core.c:626
      nf_hook+0x2c4/0x450 include/linux/netfilter.h:269
      NF_HOOK_COND include/linux/netfilter.h:302 [inline]
      ip_output+0x185/0x230 net/ipv4/ip_output.c:433
      ip_local_out net/ipv4/ip_output.c:129 [inline]
      ip_send_skb+0x74/0x100 net/ipv4/ip_output.c:1495
      udp_send_skb+0xacf/0x1650 net/ipv4/udp.c:981
      udp_sendmsg+0x1c21/0x2a60 net/ipv4/udp.c:1269
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0x1a6/0x270 net/socket.c:745
      ____sys_sendmsg+0x525/0x7d0 net/socket.c:2597
      ___sys_sendmsg net/socket.c:2651 [inline]
      __sys_sendmmsg+0x3b2/0x740 net/socket.c:2737
      __do_sys_sendmmsg net/socket.c:2766 [inline]
      __se_sys_sendmmsg net/socket.c:2763 [inline]
      __x64_sys_sendmmsg+0xa0/0xb0 net/socket.c:2763
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f4ce4f7def9
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f4ce5d4a038 EFLAGS: 00000246 ORIG_RAX: 0000000000000133
    RAX: ffffffffffffffda RBX: 00007f4ce5135f80 RCX: 00007f4ce4f7def9
    RDX: 0000000000000001 RSI: 0000000020005d40 RDI: 0000000000000006
    RBP: 00007f4ce4ff0b76 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 0000000000000000 R14: 00007f4ce5135f80 R15: 00007ffd4cbc6d68
     </TASK>
    
    Fixes: d877f07112f1 ("netfilter: nf_tables: add nft_dup expression")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: reject element expiration with no timeout [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Sep 3 01:06:49 2024 +0200

    netfilter: nf_tables: reject element expiration with no timeout
    
    [ Upstream commit d2dc429ecb4e79ad164028d965c00f689e6f6d06 ]
    
    If element timeout is unset and set provides no default timeout, the
    element expiration is silently ignored, reject this instead to let user
    know this is unsupported.
    
    Also prepare for supporting timeout that never expire, where zero
    timeout and expiration must be also rejected.
    
    Fixes: 8e1102d5a159 ("netfilter: nf_tables: support timeouts larger than 23 days")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: reject expiration higher than timeout [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Sep 3 01:06:58 2024 +0200

    netfilter: nf_tables: reject expiration higher than timeout
    
    [ Upstream commit c0f38a8c60174368aed1d0f9965d733195f15033 ]
    
    Report ERANGE to userspace if user specifies an expiration larger than
    the timeout.
    
    Fixes: 8e1102d5a159 ("netfilter: nf_tables: support timeouts larger than 23 days")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: remove annotation to access set timeout while holding lock [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Sep 3 01:07:06 2024 +0200

    netfilter: nf_tables: remove annotation to access set timeout while holding lock
    
    [ Upstream commit 15d8605c0cf4fc9cf4386cae658c68a0fd4bdb92 ]
    
    Mutex is held when adding an element, no need for READ_ONCE, remove it.
    
    Fixes: 123b99619cca ("netfilter: nf_tables: honor set timeout and garbage collection updates")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_pipapo: walk over current view on netlink dump [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Sep 17 22:25:14 2024 +0200

    netfilter: nft_set_pipapo: walk over current view on netlink dump
    
    commit 29b359cf6d95fd60730533f7f10464e95bd17c73 upstream.
    
    The generation mask can be updated while netlink dump is in progress.
    The pipapo set backend walk iterator cannot rely on it to infer what
    view of the datastructure is to be used. Add notation to specify if user
    wants to read/update the set.
    
    Based on patch from Florian Westphal.
    
    Fixes: 2b84e215f874 ("netfilter: nft_set_pipapo: .walk does not deal with generations")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_socket: fix sk refcount leaks [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Sep 5 12:54:46 2024 +0200

    netfilter: nft_socket: fix sk refcount leaks
    
    [ Upstream commit 8b26ff7af8c32cb4148b3e147c52f9e4c695209c ]
    
    We must put 'sk' reference before returning.
    
    Fixes: 039b1f4f24ec ("netfilter: nft_socket: fix erroneous socket assignment")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: rpfilter/fib: Populate flowic_l3mdev field [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Wed Oct 5 18:07:05 2022 +0200

    netfilter: rpfilter/fib: Populate flowic_l3mdev field
    
    [ Upstream commit acc641ab95b66b813c1ce856c377a2bbe71e7f52 ]
    
    Use the introduced field for correct operation with VRF devices instead
    of conditionally overwriting flowic_oif. This is a partial revert of
    commit b575b24b8eee3 ("netfilter: Fix rpfilter dropping vrf packets by
    mistake"), implementing a simpler solution.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Guillaume Nault <gnault@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: 05ef7055debc ("netfilter: fib: check correct rtable in vrf setups")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: rpfilter/fib: Set ->flowic_uid correctly for user namespaces. [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Thu Oct 13 16:37:47 2022 +0200

    netfilter: rpfilter/fib: Set ->flowic_uid correctly for user namespaces.
    
    [ Upstream commit 1fcc064b305a1aadeff0d4bff961094d27660acd ]
    
    Currently netfilter's rpfilter and fib modules implicitely initialise
    ->flowic_uid with 0. This is normally the root UID. However, this isn't
    the case in user namespaces, where user ID 0 is mapped to a different
    kernel UID. By initialising ->flowic_uid with sock_net_uid(), we get
    the root UID of the user namespace, thus keeping the same behaviour
    whether or not we're running in a user namepspace.
    
    Note, this is similar to commit 8bcfd0925ef1 ("ipv4: add missing
    initialization for flowi4_uid"), which fixed the rp_filter sysctl.
    
    Fixes: 622ec2c9d524 ("net: core: add UID to flows, rules, and routes")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 05ef7055debc ("netfilter: fib: check correct rtable in vrf setups")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: uapi: NFTA_FLOWTABLE_HOOK is NLA_NESTED [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Wed Sep 25 20:01:20 2024 +0200

    netfilter: uapi: NFTA_FLOWTABLE_HOOK is NLA_NESTED
    
    [ Upstream commit 76f1ed087b562a469f2153076f179854b749c09a ]
    
    Fix the comment which incorrectly defines it as NLA_U32.
    
    Fixes: 3b49e2e94e6e ("netfilter: nf_tables: add flow table netlink frontend")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: xtables: avoid NFPROTO_UNSPEC where needed [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Mon Oct 7 11:28:16 2024 +0200

    netfilter: xtables: avoid NFPROTO_UNSPEC where needed
    
    [ Upstream commit 0bfcb7b71e735560077a42847f69597ec7dcc326 ]
    
    syzbot managed to call xt_cluster match via ebtables:
    
     WARNING: CPU: 0 PID: 11 at net/netfilter/xt_cluster.c:72 xt_cluster_mt+0x196/0x780
     [..]
     ebt_do_table+0x174b/0x2a40
    
    Module registers to NFPROTO_UNSPEC, but it assumes ipv4/ipv6 packet
    processing.  As this is only useful to restrict locally terminating
    TCP/UDP traffic, register this for ipv4 and ipv6 family only.
    
    Pablo points out that this is a general issue, direct users of the
    set/getsockopt interface can call into targets/matches that were only
    intended for use with ip(6)tables.
    
    Check all UNSPEC matches and targets for similar issues:
    
    - matches and targets are fine except if they assume skb_network_header()
      is valid -- this is only true when called from inet layer: ip(6) stack
      pulls the ip/ipv6 header into linear data area.
    - targets that return XT_CONTINUE or other xtables verdicts must be
      restricted too, they are incompatbile with the ebtables traverser, e.g.
      EBT_CONTINUE is a completely different value than XT_CONTINUE.
    
    Most matches/targets are changed to register for NFPROTO_IPV4/IPV6, as
    they are provided for use by ip(6)tables.
    
    The MARK target is also used by arptables, so register for NFPROTO_ARP too.
    
    While at it, bail out if connbytes fails to enable the corresponding
    conntrack family.
    
    This change passes the selftests in iptables.git.
    
    Reported-by: syzbot+256c348558aa5cf611a9@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netfilter-devel/66fec2e2.050a0220.9ec68.0047.GAE@google.com/
    Fixes: 0269ea493734 ("netfilter: xtables: add cluster match")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Co-developed-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfp: Use IRQF_NO_AUTOEN flag in request_irq() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Wed Sep 11 17:44:45 2024 +0800

    nfp: Use IRQF_NO_AUTOEN flag in request_irq()
    
    [ Upstream commit daaba19d357f0900b303a530ced96c78086267ea ]
    
    disable_irq() after request_irq() still has a time gap in which
    interrupts can come. request_irq() with IRQF_NO_AUTOEN flag will
    disable IRQ auto-enable when request IRQ.
    
    Reviewed-by: Louis Peens <louis.peens@corigine.com>
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Link: https://patch.msgid.link/20240911094445.1922476-4-ruanjinjie@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFS: Avoid unnecessary rescanning of the per-server delegation list [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Wed Aug 21 14:05:02 2024 -0400

    NFS: Avoid unnecessary rescanning of the per-server delegation list
    
    [ Upstream commit f92214e4c312f6ea9d78650cc6291d200f17abb6 ]
    
    If the call to nfs_delegation_grab_inode() fails, we will not have
    dropped any locks that require us to rescan the list.
    
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfs: fix memory leak in error path of nfs4_do_reclaim [+ + +]
Author: Li Lingfeng <lilingfeng3@huawei.com>
Date:   Wed Sep 4 20:34:57 2024 +0800

    nfs: fix memory leak in error path of nfs4_do_reclaim
    
    commit 8f6a7c9467eaf39da4c14e5474e46190ab3fb529 upstream.
    
    Commit c77e22834ae9 ("NFSv4: Fix a potential sleep while atomic in
    nfs4_do_reclaim()") separate out the freeing of the state owners from
    nfs4_purge_state_owners() and finish it outside the rcu lock.
    However, the error path is omitted. As a result, the state owners in
    "freeme" will not be released.
    Fix it by adding freeing in the error path.
    
    Fixes: c77e22834ae9 ("NFSv4: Fix a potential sleep while atomic in nfs4_do_reclaim()")
    Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
    Cc: stable@vger.kernel.org # v5.3+
    Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: call cache_put if xdr_reserve_space returns NULL [+ + +]
Author: Guoqing Jiang <guoqing.jiang@linux.dev>
Date:   Wed Aug 21 22:03:18 2024 +0800

    nfsd: call cache_put if xdr_reserve_space returns NULL
    
    [ Upstream commit d078cbf5c38de83bc31f83c47dcd2184c04a50c7 ]
    
    If not enough buffer space available, but idmap_lookup has triggered
    lookup_fn which calls cache_get and returns successfully. Then we
    missed to call cache_put here which pairs with cache_get.
    
    Fixes: ddd1ea563672 ("nfsd4: use xdr_reserve_space in attribute encoding")
    Signed-off-by: Guoqing Jiang <guoqing.jiang@linux.dev>
    Reviwed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfsd: fix delegation_blocked() to block correctly for at least 30 seconds [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Mon Sep 9 15:06:36 2024 +1000

    nfsd: fix delegation_blocked() to block correctly for at least 30 seconds
    
    commit 45bb63ed20e02ae146336412889fe5450316a84f upstream.
    
    The pair of bloom filtered used by delegation_blocked() was intended to
    block delegations on given filehandles for between 30 and 60 seconds.  A
    new filehandle would be recorded in the "new" bit set.  That would then
    be switch to the "old" bit set between 0 and 30 seconds later, and it
    would remain as the "old" bit set for 30 seconds.
    
    Unfortunately the code intended to clear the old bit set once it reached
    30 seconds old, preparing it to be the next new bit set, instead cleared
    the *new* bit set before switching it to be the old bit set.  This means
    that the "old" bit set is always empty and delegations are blocked
    between 0 and 30 seconds.
    
    This patch updates bd->new before clearing the set with that index,
    instead of afterwards.
    
    Reported-by: Olga Kornievskaia <okorniev@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: 6282cd565553 ("NFSD: Don't hand out delegations for 30 seconds after recalling them.")
    Signed-off-by: NeilBrown <neilb@suse.de>
    Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD: Fix NFSv4's PUTPUBFH operation [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Sun Aug 11 13:11:07 2024 -0400

    NFSD: Fix NFSv4's PUTPUBFH operation
    
    commit 202f39039a11402dcbcd5fece8d9fa6be83f49ae upstream.
    
    According to RFC 8881, all minor versions of NFSv4 support PUTPUBFH.
    
    Replace the XDR decoder for PUTPUBFH with a "noop" since we no
    longer want the minorversion check, and PUTPUBFH has no arguments to
    decode. (Ideally nfsd4_decode_noop should really be called
    nfsd4_decode_void).
    
    PUTPUBFH should now behave just like PUTROOTFH.
    
    Reported-by: Cedric Blancher <cedric.blancher@gmail.com>
    Fixes: e1a90ebd8b23 ("NFSD: Combine decode operations for v4 and v4.1")
    Cc: Dan Shelton <dan.f.shelton@gmail.com>
    Cc: Roland Mainz <roland.mainz@nrubsig.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: fix refcount leak when file is unhashed after being found [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Wed Jul 10 09:05:32 2024 -0400

    nfsd: fix refcount leak when file is unhashed after being found
    
    [ Upstream commit 8a7926176378460e0d91e02b03f0ff20a8709a60 ]
    
    If we wait_for_construction and find that the file is no longer hashed,
    and we're going to retry the open, the old nfsd_file reference is
    currently leaked. Put the reference before retrying.
    
    Fixes: c6593366c0bf ("nfsd: don't kill nfsd_files because of lease break error")
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Tested-by: Youzhong Yang <youzhong@gmail.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfsd: map the EBADMSG to nfserr_io to avoid warning [+ + +]
Author: Li Lingfeng <lilingfeng3@huawei.com>
Date:   Sat Aug 17 14:27:13 2024 +0800

    nfsd: map the EBADMSG to nfserr_io to avoid warning
    
    commit 340e61e44c1d2a15c42ec72ade9195ad525fd048 upstream.
    
    Ext4 will throw -EBADMSG through ext4_readdir when a checksum error
    occurs, resulting in the following WARNING.
    
    Fix it by mapping EBADMSG to nfserr_io.
    
    nfsd_buffered_readdir
     iterate_dir // -EBADMSG -74
      ext4_readdir // .iterate_shared
       ext4_dx_readdir
        ext4_htree_fill_tree
         htree_dirblock_to_tree
          ext4_read_dirblock
           __ext4_read_dirblock
            ext4_dirblock_csum_verify
             warn_no_space_for_csum
              __warn_no_space_for_csum
            return ERR_PTR(-EFSBADCRC) // -EBADMSG -74
     nfserrno // WARNING
    
    [  161.115610] ------------[ cut here ]------------
    [  161.116465] nfsd: non-standard errno: -74
    [  161.117315] WARNING: CPU: 1 PID: 780 at fs/nfsd/nfsproc.c:878 nfserrno+0x9d/0xd0
    [  161.118596] Modules linked in:
    [  161.119243] CPU: 1 PID: 780 Comm: nfsd Not tainted 5.10.0-00014-g79679361fd5d #138
    [  161.120684] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qe
    mu.org 04/01/2014
    [  161.123601] RIP: 0010:nfserrno+0x9d/0xd0
    [  161.124676] Code: 0f 87 da 30 dd 00 83 e3 01 b8 00 00 00 05 75 d7 44 89 ee 48 c7 c7 c0 57 24 98 89 44 24 04 c6
     05 ce 2b 61 03 01 e8 99 20 d8 00 <0f> 0b 8b 44 24 04 eb b5 4c 89 e6 48 c7 c7 a0 6d a4 99 e8 cc 15 33
    [  161.127797] RSP: 0018:ffffc90000e2f9c0 EFLAGS: 00010286
    [  161.128794] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
    [  161.130089] RDX: 1ffff1103ee16f6d RSI: 0000000000000008 RDI: fffff520001c5f2a
    [  161.131379] RBP: 0000000000000022 R08: 0000000000000001 R09: ffff8881f70c1827
    [  161.132664] R10: ffffed103ee18304 R11: 0000000000000001 R12: 0000000000000021
    [  161.133949] R13: 00000000ffffffb6 R14: ffff8881317c0000 R15: ffffc90000e2fbd8
    [  161.135244] FS:  0000000000000000(0000) GS:ffff8881f7080000(0000) knlGS:0000000000000000
    [  161.136695] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  161.137761] CR2: 00007fcaad70b348 CR3: 0000000144256006 CR4: 0000000000770ee0
    [  161.139041] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  161.140291] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  161.141519] PKRU: 55555554
    [  161.142076] Call Trace:
    [  161.142575]  ? __warn+0x9b/0x140
    [  161.143229]  ? nfserrno+0x9d/0xd0
    [  161.143872]  ? report_bug+0x125/0x150
    [  161.144595]  ? handle_bug+0x41/0x90
    [  161.145284]  ? exc_invalid_op+0x14/0x70
    [  161.146009]  ? asm_exc_invalid_op+0x12/0x20
    [  161.146816]  ? nfserrno+0x9d/0xd0
    [  161.147487]  nfsd_buffered_readdir+0x28b/0x2b0
    [  161.148333]  ? nfsd4_encode_dirent_fattr+0x380/0x380
    [  161.149258]  ? nfsd_buffered_filldir+0xf0/0xf0
    [  161.150093]  ? wait_for_concurrent_writes+0x170/0x170
    [  161.151004]  ? generic_file_llseek_size+0x48/0x160
    [  161.151895]  nfsd_readdir+0x132/0x190
    [  161.152606]  ? nfsd4_encode_dirent_fattr+0x380/0x380
    [  161.153516]  ? nfsd_unlink+0x380/0x380
    [  161.154256]  ? override_creds+0x45/0x60
    [  161.155006]  nfsd4_encode_readdir+0x21a/0x3d0
    [  161.155850]  ? nfsd4_encode_readlink+0x210/0x210
    [  161.156731]  ? write_bytes_to_xdr_buf+0x97/0xe0
    [  161.157598]  ? __write_bytes_to_xdr_buf+0xd0/0xd0
    [  161.158494]  ? lock_downgrade+0x90/0x90
    [  161.159232]  ? nfs4svc_decode_voidarg+0x10/0x10
    [  161.160092]  nfsd4_encode_operation+0x15a/0x440
    [  161.160959]  nfsd4_proc_compound+0x718/0xe90
    [  161.161818]  nfsd_dispatch+0x18e/0x2c0
    [  161.162586]  svc_process_common+0x786/0xc50
    [  161.163403]  ? nfsd_svc+0x380/0x380
    [  161.164137]  ? svc_printk+0x160/0x160
    [  161.164846]  ? svc_xprt_do_enqueue.part.0+0x365/0x380
    [  161.165808]  ? nfsd_svc+0x380/0x380
    [  161.166523]  ? rcu_is_watching+0x23/0x40
    [  161.167309]  svc_process+0x1a5/0x200
    [  161.168019]  nfsd+0x1f5/0x380
    [  161.168663]  ? nfsd_shutdown_threads+0x260/0x260
    [  161.169554]  kthread+0x1c4/0x210
    [  161.170224]  ? kthread_insert_work_sanity_check+0x80/0x80
    [  161.171246]  ret_from_fork+0x1f/0x30
    
    Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD: Mark filecache "down" if init fails [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Sat Sep 21 14:25:37 2024 -0400

    NFSD: Mark filecache "down" if init fails
    
    [ Upstream commit dc0d0f885aa422f621bc1c2124133eff566b0bc8 ]
    
    NeilBrown says:
    > The handling of NFSD_FILE_CACHE_UP is strange.  nfsd_file_cache_init()
    > sets it, but doesn't clear it on failure.  So if nfsd_file_cache_init()
    > fails for some reason, nfsd_file_cache_shutdown() would still try to
    > clean up if it was called.
    
    Reported-by: NeilBrown <neilb@suse.de>
    Fixes: c7b824c3d06c ("NFSD: Replace the "init once" mechanism")
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfsd: remove unneeded EEXIST error check in nfsd_do_file_acquire [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Thu Jul 11 15:11:13 2024 -0400

    nfsd: remove unneeded EEXIST error check in nfsd_do_file_acquire
    
    [ Upstream commit 81a95c2b1d605743220f28db04b8da13a65c4059 ]
    
    Given that we do the search and insertion while holding the i_lock, I
    don't think it's possible for us to get EEXIST here. Remove this case.
    
    Fixes: c6593366c0bf ("nfsd: don't kill nfsd_files because of lease break error")
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Tested-by: Youzhong Yang <youzhong@gmail.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfsd: return -EINVAL when namelen is 0 [+ + +]
Author: Li Lingfeng <lilingfeng3@huawei.com>
Date:   Tue Sep 3 19:14:46 2024 +0800

    nfsd: return -EINVAL when namelen is 0
    
    [ Upstream commit 22451a16b7ab7debefce660672566be887db1637 ]
    
    When we have a corrupted main.sqlite in /var/lib/nfs/nfsdcld/, it may
    result in namelen being 0, which will cause memdup_user() to return
    ZERO_SIZE_PTR.
    When we access the name.data that has been assigned the value of
    ZERO_SIZE_PTR in nfs4_client_to_reclaim(), null pointer dereference is
    triggered.
    
    [ T1205] ==================================================================
    [ T1205] BUG: KASAN: null-ptr-deref in nfs4_client_to_reclaim+0xe9/0x260
    [ T1205] Read of size 1 at addr 0000000000000010 by task nfsdcld/1205
    [ T1205]
    [ T1205] CPU: 11 PID: 1205 Comm: nfsdcld Not tainted 5.10.0-00003-g2c1423731b8d #406
    [ T1205] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20190727_073836-buildvm-ppc64le-16.ppc.fedoraproject.org-3.fc31 04/01/2014
    [ T1205] Call Trace:
    [ T1205]  dump_stack+0x9a/0xd0
    [ T1205]  ? nfs4_client_to_reclaim+0xe9/0x260
    [ T1205]  __kasan_report.cold+0x34/0x84
    [ T1205]  ? nfs4_client_to_reclaim+0xe9/0x260
    [ T1205]  kasan_report+0x3a/0x50
    [ T1205]  nfs4_client_to_reclaim+0xe9/0x260
    [ T1205]  ? nfsd4_release_lockowner+0x410/0x410
    [ T1205]  cld_pipe_downcall+0x5ca/0x760
    [ T1205]  ? nfsd4_cld_tracking_exit+0x1d0/0x1d0
    [ T1205]  ? down_write_killable_nested+0x170/0x170
    [ T1205]  ? avc_policy_seqno+0x28/0x40
    [ T1205]  ? selinux_file_permission+0x1b4/0x1e0
    [ T1205]  rpc_pipe_write+0x84/0xb0
    [ T1205]  vfs_write+0x143/0x520
    [ T1205]  ksys_write+0xc9/0x170
    [ T1205]  ? __ia32_sys_read+0x50/0x50
    [ T1205]  ? ktime_get_coarse_real_ts64+0xfe/0x110
    [ T1205]  ? ktime_get_coarse_real_ts64+0xa2/0x110
    [ T1205]  do_syscall_64+0x33/0x40
    [ T1205]  entry_SYSCALL_64_after_hwframe+0x67/0xd1
    [ T1205] RIP: 0033:0x7fdbdb761bc7
    [ T1205] Code: 0f 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b7 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 514
    [ T1205] RSP: 002b:00007fff8c4b7248 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    [ T1205] RAX: ffffffffffffffda RBX: 000000000000042b RCX: 00007fdbdb761bc7
    [ T1205] RDX: 000000000000042b RSI: 00007fff8c4b75f0 RDI: 0000000000000008
    [ T1205] RBP: 00007fdbdb761bb0 R08: 0000000000000000 R09: 0000000000000001
    [ T1205] R10: 0000000000000000 R11: 0000000000000246 R12: 000000000000042b
    [ T1205] R13: 0000000000000008 R14: 00007fff8c4b75f0 R15: 0000000000000000
    [ T1205] ==================================================================
    
    Fix it by checking namelen.
    
    Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
    Fixes: 74725959c33c ("nfsd: un-deprecate nfsdcld")
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Reviewed-by: Scott Mayhew <smayhew@redhat.com>
    Tested-by: Scott Mayhew <smayhew@redhat.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFSv4: Fix clearing of layout segments in layoutreturn [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Wed Aug 21 14:05:01 2024 -0400

    NFSv4: Fix clearing of layout segments in layoutreturn
    
    [ Upstream commit d72b7963115bea971a28eaa2cb76722c023f9fdf ]
    
    Make sure that we clear the layout segments in cases where we see a
    fatal error, and also in the case where the layout is invalid.
    
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFSv4: Prevent NULL-pointer dereference in nfs42_complete_copies() [+ + +]
Author: Yanjun Zhang <zhangyanjun@cestc.cn>
Date:   Tue Oct 1 16:39:30 2024 +0800

    NFSv4: Prevent NULL-pointer dereference in nfs42_complete_copies()
    
    [ Upstream commit a848c29e3486189aaabd5663bc11aea50c5bd144 ]
    
    On the node of an NFS client, some files saved in the mountpoint of the
    NFS server were copied to another location of the same NFS server.
    Accidentally, the nfs42_complete_copies() got a NULL-pointer dereference
    crash with the following syslog:
    
    [232064.838881] NFSv4: state recovery failed for open file nfs/pvc-12b5200d-cd0f-46a3-b9f0-af8f4fe0ef64.qcow2, error = -116
    [232064.839360] NFSv4: state recovery failed for open file nfs/pvc-12b5200d-cd0f-46a3-b9f0-af8f4fe0ef64.qcow2, error = -116
    [232066.588183] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000058
    [232066.588586] Mem abort info:
    [232066.588701]   ESR = 0x0000000096000007
    [232066.588862]   EC = 0x25: DABT (current EL), IL = 32 bits
    [232066.589084]   SET = 0, FnV = 0
    [232066.589216]   EA = 0, S1PTW = 0
    [232066.589340]   FSC = 0x07: level 3 translation fault
    [232066.589559] Data abort info:
    [232066.589683]   ISV = 0, ISS = 0x00000007
    [232066.589842]   CM = 0, WnR = 0
    [232066.589967] user pgtable: 64k pages, 48-bit VAs, pgdp=00002000956ff400
    [232066.590231] [0000000000000058] pgd=08001100ae100003, p4d=08001100ae100003, pud=08001100ae100003, pmd=08001100b3c00003, pte=0000000000000000
    [232066.590757] Internal error: Oops: 96000007 [#1] SMP
    [232066.590958] Modules linked in: rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver nfs lockd grace fscache netfs ocfs2_dlmfs ocfs2_stack_o2cb ocfs2_dlm vhost_net vhost vhost_iotlb tap tun ipt_rpfilter xt_multiport ip_set_hash_ip ip_set_hash_net xfrm_interface xfrm6_tunnel tunnel4 tunnel6 esp4 ah4 wireguard libcurve25519_generic veth xt_addrtype xt_set nf_conntrack_netlink ip_set_hash_ipportnet ip_set_hash_ipportip ip_set_bitmap_port ip_set_hash_ipport dummy ip_set ip_vs_sh ip_vs_wrr ip_vs_rr ip_vs iptable_filter sch_ingress nfnetlink_cttimeout vport_gre ip_gre ip_tunnel gre vport_geneve geneve vport_vxlan vxlan ip6_udp_tunnel udp_tunnel openvswitch nf_conncount dm_round_robin dm_service_time dm_multipath xt_nat xt_MASQUERADE nft_chain_nat nf_nat xt_mark xt_conntrack xt_comment nft_compat nft_counter nf_tables nfnetlink ocfs2 ocfs2_nodemanager ocfs2_stackglue iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ipmi_ssif nbd overlay 8021q garp mrp bonding tls rfkill sunrpc ext4 mbcache jbd2
    [232066.591052]  vfat fat cas_cache cas_disk ses enclosure scsi_transport_sas sg acpi_ipmi ipmi_si ipmi_devintf ipmi_msghandler ip_tables vfio_pci vfio_pci_core vfio_virqfd vfio_iommu_type1 vfio dm_mirror dm_region_hash dm_log dm_mod nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 br_netfilter bridge stp llc fuse xfs libcrc32c ast drm_vram_helper qla2xxx drm_kms_helper syscopyarea crct10dif_ce sysfillrect ghash_ce sysimgblt sha2_ce fb_sys_fops cec sha256_arm64 sha1_ce drm_ttm_helper ttm nvme_fc igb sbsa_gwdt nvme_fabrics drm nvme_core i2c_algo_bit i40e scsi_transport_fc megaraid_sas aes_neon_bs
    [232066.596953] CPU: 6 PID: 4124696 Comm: 10.253.166.125- Kdump: loaded Not tainted 5.15.131-9.cl9_ocfs2.aarch64 #1
    [232066.597356] Hardware name: Great Wall .\x93\x8e...RF6260 V5/GWMSSE2GL1T, BIOS T656FBE_V3.0.18 2024-01-06
    [232066.597721] pstate: 20400009 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [232066.598034] pc : nfs4_reclaim_open_state+0x220/0x800 [nfsv4]
    [232066.598327] lr : nfs4_reclaim_open_state+0x12c/0x800 [nfsv4]
    [232066.598595] sp : ffff8000f568fc70
    [232066.598731] x29: ffff8000f568fc70 x28: 0000000000001000 x27: ffff21003db33000
    [232066.599030] x26: ffff800005521ae0 x25: ffff0100f98fa3f0 x24: 0000000000000001
    [232066.599319] x23: ffff800009920008 x22: ffff21003db33040 x21: ffff21003db33050
    [232066.599628] x20: ffff410172fe9e40 x19: ffff410172fe9e00 x18: 0000000000000000
    [232066.599914] x17: 0000000000000000 x16: 0000000000000004 x15: 0000000000000000
    [232066.600195] x14: 0000000000000000 x13: ffff800008e685a8 x12: 00000000eac0c6e6
    [232066.600498] x11: 0000000000000000 x10: 0000000000000008 x9 : ffff8000054e5828
    [232066.600784] x8 : 00000000ffffffbf x7 : 0000000000000001 x6 : 000000000a9eb14a
    [232066.601062] x5 : 0000000000000000 x4 : ffff70ff8a14a800 x3 : 0000000000000058
    [232066.601348] x2 : 0000000000000001 x1 : 54dce46366daa6c6 x0 : 0000000000000000
    [232066.601636] Call trace:
    [232066.601749]  nfs4_reclaim_open_state+0x220/0x800 [nfsv4]
    [232066.601998]  nfs4_do_reclaim+0x1b8/0x28c [nfsv4]
    [232066.602218]  nfs4_state_manager+0x928/0x10f0 [nfsv4]
    [232066.602455]  nfs4_run_state_manager+0x78/0x1b0 [nfsv4]
    [232066.602690]  kthread+0x110/0x114
    [232066.602830]  ret_from_fork+0x10/0x20
    [232066.602985] Code: 1400000d f9403f20 f9402e61 91016003 (f9402c00)
    [232066.603284] SMP: stopping secondary CPUs
    [232066.606936] Starting crashdump kernel...
    [232066.607146] Bye!
    
    Analysing the vmcore, we know that nfs4_copy_state listed by destination
    nfs_server->ss_copies was added by the field copies in handle_async_copy(),
    and we found a waiting copy process with the stack as:
    PID: 3511963  TASK: ffff710028b47e00  CPU: 0   COMMAND: "cp"
     #0 [ffff8001116ef740] __switch_to at ffff8000081b92f4
     #1 [ffff8001116ef760] __schedule at ffff800008dd0650
     #2 [ffff8001116ef7c0] schedule at ffff800008dd0a00
     #3 [ffff8001116ef7e0] schedule_timeout at ffff800008dd6aa0
     #4 [ffff8001116ef860] __wait_for_common at ffff800008dd166c
     #5 [ffff8001116ef8e0] wait_for_completion_interruptible at ffff800008dd1898
     #6 [ffff8001116ef8f0] handle_async_copy at ffff8000055142f4 [nfsv4]
     #7 [ffff8001116ef970] _nfs42_proc_copy at ffff8000055147c8 [nfsv4]
     #8 [ffff8001116efa80] nfs42_proc_copy at ffff800005514cf0 [nfsv4]
     #9 [ffff8001116efc50] __nfs4_copy_file_range.constprop.0 at ffff8000054ed694 [nfsv4]
    
    The NULL-pointer dereference was due to nfs42_complete_copies() listed
    the nfs_server->ss_copies by the field ss_copies of nfs4_copy_state.
    So the nfs4_copy_state address ffff0100f98fa3f0 was offset by 0x10 and
    the data accessed through this pointer was also incorrect. Generally,
    the ordered list nfs4_state_owner->so_states indicate open(O_RDWR) or
    open(O_WRITE) states are reclaimed firstly by nfs4_reclaim_open_state().
    When destination state reclaim is failed with NFS_STATE_RECOVERY_FAILED
    and copies are not deleted in nfs_server->ss_copies, the source state
    may be passed to the nfs42_complete_copies() process earlier, resulting
    in this crash scene finally. To solve this issue, we add a list_head
    nfs_server->ss_src_copies for a server-to-server copy specially.
    
    Fixes: 0e65a32c8a56 ("NFS: handle source server reboot")
    Signed-off-by: Yanjun Zhang <zhangyanjun@cestc.cn>
    Reviewed-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: determine empty node blocks as corrupted [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Wed Sep 4 17:13:08 2024 +0900

    nilfs2: determine empty node blocks as corrupted
    
    [ Upstream commit 111b812d3662f3a1b831d19208f83aa711583fe6 ]
    
    Due to the nature of b-trees, nilfs2 itself and admin tools such as
    mkfs.nilfs2 will never create an intermediate b-tree node block with 0
    child nodes, nor will they delete (key, pointer)-entries that would result
    in such a state.  However, it is possible that a b-tree node block is
    corrupted on the backing device and is read with 0 child nodes.
    
    Because operation is not guaranteed if the number of child nodes is 0 for
    intermediate node blocks other than the root node, modify
    nilfs_btree_node_broken(), which performs sanity checks when reading a
    b-tree node block, so that such cases will be judged as metadata
    corruption.
    
    Link: https://lkml.kernel.org/r/20240904081401.16682-3-konishi.ryusuke@gmail.com
    Fixes: 17c76b0104e4 ("nilfs2: B-tree based block mapping")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: Lizhi Xu <lizhi.xu@windriver.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nilfs2: fix potential null-ptr-deref in nilfs_btree_insert() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Wed Sep 4 17:13:07 2024 +0900

    nilfs2: fix potential null-ptr-deref in nilfs_btree_insert()
    
    [ Upstream commit 9403001ad65ae4f4c5de368bdda3a0636b51d51a ]
    
    Patch series "nilfs2: fix potential issues with empty b-tree nodes".
    
    This series addresses three potential issues with empty b-tree nodes that
    can occur with corrupted filesystem images, including one recently
    discovered by syzbot.
    
    This patch (of 3):
    
    If a b-tree is broken on the device, and the b-tree height is greater than
    2 (the level of the root node is greater than 1) even if the number of
    child nodes of the b-tree root is 0, a NULL pointer dereference occurs in
    nilfs_btree_prepare_insert(), which is called from nilfs_btree_insert().
    
    This is because, when the number of child nodes of the b-tree root is 0,
    nilfs_btree_do_lookup() does not set the block buffer head in any of
    path[x].bp_bh, leaving it as the initial value of NULL, but if the level
    of the b-tree root node is greater than 1, nilfs_btree_get_nonroot_node(),
    which accesses the buffer memory of path[x].bp_bh, is called.
    
    Fix this issue by adding a check to nilfs_btree_root_broken(), which
    performs sanity checks when reading the root node from the device, to
    detect this inconsistency.
    
    Thanks to Lizhi Xu for trying to solve the bug and clarifying the cause
    early on.
    
    Link: https://lkml.kernel.org/r/20240904081401.16682-1-konishi.ryusuke@gmail.com
    Link: https://lkml.kernel.org/r/20240902084101.138971-1-lizhi.xu@windriver.com
    Link: https://lkml.kernel.org/r/20240904081401.16682-2-konishi.ryusuke@gmail.com
    Fixes: 17c76b0104e4 ("nilfs2: B-tree based block mapping")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+9bff4c7b992038a7409f@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9bff4c7b992038a7409f
    Cc: Lizhi Xu <lizhi.xu@windriver.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nilfs2: fix potential oob read in nilfs_btree_check_delete() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Wed Sep 4 17:13:09 2024 +0900

    nilfs2: fix potential oob read in nilfs_btree_check_delete()
    
    [ Upstream commit f9c96351aa6718b42a9f42eaf7adce0356bdb5e8 ]
    
    The function nilfs_btree_check_delete(), which checks whether degeneration
    to direct mapping occurs before deleting a b-tree entry, causes memory
    access outside the block buffer when retrieving the maximum key if the
    root node has no entries.
    
    This does not usually happen because b-tree mappings with 0 child nodes
    are never created by mkfs.nilfs2 or nilfs2 itself.  However, it can happen
    if the b-tree root node read from a device is configured that way, so fix
    this potential issue by adding a check for that case.
    
    Link: https://lkml.kernel.org/r/20240904081401.16682-4-konishi.ryusuke@gmail.com
    Fixes: 17c76b0104e4 ("nilfs2: B-tree based block mapping")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: Lizhi Xu <lizhi.xu@windriver.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nouveau/dmem: Fix vulnerability in migrate_to_ram upon copy error [+ + +]
Author: Yonatan Maman <Ymaman@Nvidia.com>
Date:   Tue Oct 8 14:59:43 2024 +0300

    nouveau/dmem: Fix vulnerability in migrate_to_ram upon copy error
    
    commit 835745a377a4519decd1a36d6b926e369b3033e2 upstream.
    
    The `nouveau_dmem_copy_one` function ensures that the copy push command is
    sent to the device firmware but does not track whether it was executed
    successfully.
    
    In the case of a copy error (e.g., firmware or hardware failure), the
    copy push command will be sent via the firmware channel, and
    `nouveau_dmem_copy_one` will likely report success, leading to the
    `migrate_to_ram` function returning a dirty HIGH_USER page to the user.
    
    This can result in a security vulnerability, as a HIGH_USER page that may
    contain sensitive or corrupted data could be returned to the user.
    
    To prevent this vulnerability, we allocate a zero page. Thus, in case of
    an error, a non-dirty (zero) page will be returned to the user.
    
    Fixes: 5be73b690875 ("drm/nouveau/dmem: device memory helpers for SVM")
    Signed-off-by: Yonatan Maman <Ymaman@Nvidia.com>
    Co-developed-by: Gal Shalom <GalShalom@Nvidia.com>
    Signed-off-by: Gal Shalom <GalShalom@Nvidia.com>
    Reviewed-by: Ben Skeggs <bskeggs@nvidia.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241008115943.990286-3-ymaman@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ntb: intel: Fix the NULL vs IS_ERR() bug for debugfs_create_dir() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Thu Aug 31 20:39:27 2023 +0800

    ntb: intel: Fix the NULL vs IS_ERR() bug for debugfs_create_dir()
    
    [ Upstream commit e229897d373a87ee09ec5cc4ecd4bb2f895fc16b ]
    
    The debugfs_create_dir() function returns error pointers.
    It never returns NULL. So use IS_ERR() to check it.
    
    Fixes: e26a5843f7f5 ("NTB: Split ntb_hw_intel and ntb_transport drivers")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ntb: ntb_hw_switchtec: Fix use after free vulnerability in switchtec_ntb_remove due to race condition [+ + +]
Author: Kaixin Wang <kxwang23@m.fudan.edu.cn>
Date:   Tue Sep 10 01:20:07 2024 +0800

    ntb: ntb_hw_switchtec: Fix use after free vulnerability in switchtec_ntb_remove due to race condition
    
    [ Upstream commit e51aded92d42784313ba16c12f4f88cc4f973bbb ]
    
    In the switchtec_ntb_add function, it can call switchtec_ntb_init_sndev
    function, then &sndev->check_link_status_work is bound with
    check_link_status_work. switchtec_ntb_link_notification may be called
    to start the work.
    
    If we remove the module which will call switchtec_ntb_remove to make
    cleanup, it will free sndev through kfree(sndev), while the work
    mentioned above will be used. The sequence of operations that may lead
    to a UAF bug is as follows:
    
    CPU0                                 CPU1
    
                            | check_link_status_work
    switchtec_ntb_remove    |
    kfree(sndev);           |
                            | if (sndev->link_force_down)
                            | // use sndev
    
    Fix it by ensuring that the work is canceled before proceeding with
    the cleanup in switchtec_ntb_remove.
    
    Signed-off-by: Kaixin Wang <kxwang23@m.fudan.edu.cn>
    Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ntb_perf: Fix printk format [+ + +]
Author: Max Hawking <maxahawking@sonnenkinder.org>
Date:   Sun Oct 8 20:45:16 2023 -0700

    ntb_perf: Fix printk format
    
    [ Upstream commit 1501ae7479c8d0f66efdbfdc9ae8d6136cefbd37 ]
    
    The correct printk format is %pa or %pap, but not %pa[p].
    
    Fixes: 99a06056124d ("NTB: ntb_perf: Fix address err in perf_copy_chunk")
    Signed-off-by: Max Hawking <maxahawking@sonnenkinder.org>
    Signed-off-by: Jon Mason <jdmason@kudzu.us>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme-pci: qdepth 1 quirk [+ + +]
Author: Keith Busch <kbusch@kernel.org>
Date:   Wed Sep 11 10:39:59 2024 -0700

    nvme-pci: qdepth 1 quirk
    
    [ Upstream commit 83bdfcbdbe5d901c5fa432decf12e1725a840a56 ]
    
    Another device has been reported to be unreliable if we have more than
    one outstanding command. In this new case, data corruption may occur.
    Since we have two devices now needing this quirky behavior, make a
    generic quirk flag.
    
    The same Apple quirk is clearly not "temporary", so update the comment
    while moving it.
    
    Link: https://lore.kernel.org/linux-nvme/191d810a4e3.fcc6066c765804.973611676137075390@collabora.com/
    Reported-by: Robert Beckett <bob.beckett@collabora.com>
    Reviewed-by: Christoph Hellwig hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ocfs2: add bounds checking to ocfs2_xattr_find_entry() [+ + +]
Author: Ferry Meng <mengferry@linux.alibaba.com>
Date:   Mon May 20 10:40:23 2024 +0800

    ocfs2: add bounds checking to ocfs2_xattr_find_entry()
    
    [ Upstream commit 9e3041fecdc8f78a5900c3aa51d3d756e73264d6 ]
    
    Add a paranoia check to make sure it doesn't stray beyond valid memory
    region containing ocfs2 xattr entries when scanning for a match.  It will
    prevent out-of-bound access in case of crafted images.
    
    Link: https://lkml.kernel.org/r/20240520024024.1976129-1-joseph.qi@linux.alibaba.com
    Signed-off-by: Ferry Meng <mengferry@linux.alibaba.com>
    Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reported-by: lei lu <llfamsec@gmail.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: af77c4fc1871 ("ocfs2: strict bound check before memcmp in ocfs2_xattr_find_entry()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ocfs2: cancel dqi_sync_work before freeing oinfo [+ + +]
Author: Joseph Qi <joseph.qi@linux.alibaba.com>
Date:   Wed Sep 4 15:10:03 2024 +0800

    ocfs2: cancel dqi_sync_work before freeing oinfo
    
    commit 35fccce29feb3706f649726d410122dd81b92c18 upstream.
    
    ocfs2_global_read_info() will initialize and schedule dqi_sync_work at the
    end, if error occurs after successfully reading global quota, it will
    trigger the following warning with CONFIG_DEBUG_OBJECTS_* enabled:
    
    ODEBUG: free active (active state 0) object: 00000000d8b0ce28 object type: timer_list hint: qsync_work_fn+0x0/0x16c
    
    This reports that there is an active delayed work when freeing oinfo in
    error handling, so cancel dqi_sync_work first.  BTW, return status instead
    of -1 when .read_file_info fails.
    
    Link: https://syzkaller.appspot.com/bug?extid=f7af59df5d6b25f0febd
    Link: https://lkml.kernel.org/r/20240904071004.2067695-1-joseph.qi@linux.alibaba.com
    Fixes: 171bf93ce11f ("ocfs2: Periodic quota syncing")
    Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reviewed-by: Heming Zhao <heming.zhao@suse.com>
    Reported-by: syzbot+f7af59df5d6b25f0febd@syzkaller.appspotmail.com
    Tested-by: syzbot+f7af59df5d6b25f0febd@syzkaller.appspotmail.com
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: fix null-ptr-deref when journal load failed. [+ + +]
Author: Julian Sun <sunjunchao2870@gmail.com>
Date:   Mon Sep 2 11:08:44 2024 +0800

    ocfs2: fix null-ptr-deref when journal load failed.
    
    commit 5784d9fcfd43bd853654bb80c87ef293b9e8e80a upstream.
    
    During the mounting process, if journal_reset() fails because of too short
    journal, then lead to jbd2_journal_load() fails with NULL j_sb_buffer.
    Subsequently, ocfs2_journal_shutdown() calls
    jbd2_journal_flush()->jbd2_cleanup_journal_tail()->
    __jbd2_update_log_tail()->jbd2_journal_update_sb_log_tail()
    ->lock_buffer(journal->j_sb_buffer), resulting in a null-pointer
    dereference error.
    
    To resolve this issue, we should check the JBD2_LOADED flag to ensure the
    journal was properly loaded.  Additionally, use journal instead of
    osb->journal directly to simplify the code.
    
    Link: https://syzkaller.appspot.com/bug?extid=05b9b39d8bdfe1a0861f
    Link: https://lkml.kernel.org/r/20240902030844.422725-1-sunjunchao2870@gmail.com
    Fixes: f6f50e28f0cb ("jbd2: Fail to load a journal if it is too short")
    Signed-off-by: Julian Sun <sunjunchao2870@gmail.com>
    Reported-by: syzbot+05b9b39d8bdfe1a0861f@syzkaller.appspotmail.com
    Suggested-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: fix possible null-ptr-deref in ocfs2_set_buffer_uptodate [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Mon Sep 2 10:36:36 2024 +0800

    ocfs2: fix possible null-ptr-deref in ocfs2_set_buffer_uptodate
    
    commit 33b525cef4cff49e216e4133cc48452e11c0391e upstream.
    
    When doing cleanup, if flags without OCFS2_BH_READAHEAD, it may trigger
    NULL pointer dereference in the following ocfs2_set_buffer_uptodate() if
    bh is NULL.
    
    Link: https://lkml.kernel.org/r/20240902023636.1843422-3-joseph.qi@linux.alibaba.com
    Fixes: cf76c78595ca ("ocfs2: don't put and assigning null to bh allocated outside")
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reported-by: Heming Zhao <heming.zhao@suse.com>
    Suggested-by: Heming Zhao <heming.zhao@suse.com>
    Cc: <stable@vger.kernel.org>    [4.20+]
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: fix the la space leak when unmounting an ocfs2 volume [+ + +]
Author: Heming Zhao <heming.zhao@suse.com>
Date:   Fri Jul 19 19:43:10 2024 +0800

    ocfs2: fix the la space leak when unmounting an ocfs2 volume
    
    commit dfe6c5692fb525e5e90cefe306ee0dffae13d35f upstream.
    
    This bug has existed since the initial OCFS2 code.  The code logic in
    ocfs2_sync_local_to_main() is wrong, as it ignores the last contiguous
    free bits, which causes an OCFS2 volume to lose the last free clusters of
    LA window on each umount command.
    
    Link: https://lkml.kernel.org/r/20240719114310.14245-1-heming.zhao@suse.com
    Signed-off-by: Heming Zhao <heming.zhao@suse.com>
    Reviewed-by: Su Yue <glass.su@suse.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Heming Zhao <heming.zhao@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: fix uninit-value in ocfs2_get_block() [+ + +]
Author: Joseph Qi <joseph.qi@linux.alibaba.com>
Date:   Wed Sep 25 17:06:00 2024 +0800

    ocfs2: fix uninit-value in ocfs2_get_block()
    
    commit 2af148ef8549a12f8025286b8825c2833ee6bcb8 upstream.
    
    syzbot reported an uninit-value BUG:
    
    BUG: KMSAN: uninit-value in ocfs2_get_block+0xed2/0x2710 fs/ocfs2/aops.c:159
    ocfs2_get_block+0xed2/0x2710 fs/ocfs2/aops.c:159
    do_mpage_readpage+0xc45/0x2780 fs/mpage.c:225
    mpage_readahead+0x43f/0x840 fs/mpage.c:374
    ocfs2_readahead+0x269/0x320 fs/ocfs2/aops.c:381
    read_pages+0x193/0x1110 mm/readahead.c:160
    page_cache_ra_unbounded+0x901/0x9f0 mm/readahead.c:273
    do_page_cache_ra mm/readahead.c:303 [inline]
    force_page_cache_ra+0x3b1/0x4b0 mm/readahead.c:332
    force_page_cache_readahead mm/internal.h:347 [inline]
    generic_fadvise+0x6b0/0xa90 mm/fadvise.c:106
    vfs_fadvise mm/fadvise.c:185 [inline]
    ksys_fadvise64_64 mm/fadvise.c:199 [inline]
    __do_sys_fadvise64 mm/fadvise.c:214 [inline]
    __se_sys_fadvise64 mm/fadvise.c:212 [inline]
    __x64_sys_fadvise64+0x1fb/0x3a0 mm/fadvise.c:212
    x64_sys_call+0xe11/0x3ba0
    arch/x86/include/generated/asm/syscalls_64.h:222
    do_syscall_x64 arch/x86/entry/common.c:52 [inline]
    do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
    entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    This is because when ocfs2_extent_map_get_blocks() fails, p_blkno is
    uninitialized.  So the error log will trigger the above uninit-value
    access.
    
    The error log is out-of-date since get_blocks() was removed long time ago.
    And the error code will be logged in ocfs2_extent_map_get_blocks() once
    ocfs2_get_cluster() fails, so fix this by only logging inode and block.
    
    Link: https://syzkaller.appspot.com/bug?extid=9709e73bae885b05314b
    Link: https://lkml.kernel.org/r/20240925090600.3643376-1-joseph.qi@linux.alibaba.com
    Fixes: ccd979bdbce9 ("[PATCH] OCFS2: The Second Oracle Cluster Filesystem")
    Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reported-by: syzbot+9709e73bae885b05314b@syzkaller.appspotmail.com
    Tested-by: syzbot+9709e73bae885b05314b@syzkaller.appspotmail.com
    Cc: Heming Zhao <heming.zhao@suse.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: remove unreasonable unlock in ocfs2_read_blocks [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Mon Sep 2 10:36:35 2024 +0800

    ocfs2: remove unreasonable unlock in ocfs2_read_blocks
    
    commit c03a82b4a0c935774afa01fd6d128b444fd930a1 upstream.
    
    Patch series "Misc fixes for ocfs2_read_blocks", v5.
    
    This series contains 2 fixes for ocfs2_read_blocks().  The first patch fix
    the issue reported by syzbot, which detects bad unlock balance in
    ocfs2_read_blocks().  The second patch fixes an issue reported by Heming
    Zhao when reviewing above fix.
    
    
    This patch (of 2):
    
    There was a lock release before exiting, so remove the unreasonable unlock.
    
    Link: https://lkml.kernel.org/r/20240902023636.1843422-1-joseph.qi@linux.alibaba.com
    Link: https://lkml.kernel.org/r/20240902023636.1843422-2-joseph.qi@linux.alibaba.com
    Fixes: cf76c78595ca ("ocfs2: don't put and assigning null to bh allocated outside")
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reviewed-by: Heming Zhao <heming.zhao@suse.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reported-by: syzbot+ab134185af9ef88dfed5@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=ab134185af9ef88dfed5
    Tested-by: syzbot+ab134185af9ef88dfed5@syzkaller.appspotmail.com
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>    [4.20+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: reserve space for inline xattr before attaching reflink tree [+ + +]
Author: Gautham Ananthakrishna <gautham.ananthakrishna@oracle.com>
Date:   Wed Sep 18 06:38:44 2024 +0000

    ocfs2: reserve space for inline xattr before attaching reflink tree
    
    commit 5ca60b86f57a4d9648f68418a725b3a7de2816b0 upstream.
    
    One of our customers reported a crash and a corrupted ocfs2 filesystem.
    The crash was due to the detection of corruption.  Upon troubleshooting,
    the fsck -fn output showed the below corruption
    
    [EXTENT_LIST_FREE] Extent list in owner 33080590 claims 230 as the next free chain record,
    but fsck believes the largest valid value is 227.  Clamp the next record value? n
    
    The stat output from the debugfs.ocfs2 showed the following corruption
    where the "Next Free Rec:" had overshot the "Count:" in the root metadata
    block.
    
            Inode: 33080590   Mode: 0640   Generation: 2619713622 (0x9c25a856)
            FS Generation: 904309833 (0x35e6ac49)
            CRC32: 00000000   ECC: 0000
            Type: Regular   Attr: 0x0   Flags: Valid
            Dynamic Features: (0x16) HasXattr InlineXattr Refcounted
            Extended Attributes Block: 0  Extended Attributes Inline Size: 256
            User: 0 (root)   Group: 0 (root)   Size: 281320357888
            Links: 1   Clusters: 141738
            ctime: 0x66911b56 0x316edcb8 -- Fri Jul 12 06:02:30.829349048 2024
            atime: 0x66911d6b 0x7f7a28d -- Fri Jul 12 06:11:23.133669517 2024
            mtime: 0x66911b56 0x12ed75d7 -- Fri Jul 12 06:02:30.317552087 2024
            dtime: 0x0 -- Wed Dec 31 17:00:00 1969
            Refcount Block: 2777346
            Last Extblk: 2886943   Orphan Slot: 0
            Sub Alloc Slot: 0   Sub Alloc Bit: 14
            Tree Depth: 1   Count: 227   Next Free Rec: 230
            ## Offset        Clusters       Block#
            0  0             2310           2776351
            1  2310          2139           2777375
            2  4449          1221           2778399
            3  5670          731            2779423
            4  6401          566            2780447
            .......          ....           .......
            .......          ....           .......
    
    The issue was in the reflink workfow while reserving space for inline
    xattr.  The problematic function is ocfs2_reflink_xattr_inline().  By the
    time this function is called the reflink tree is already recreated at the
    destination inode from the source inode.  At this point, this function
    reserves space for inline xattrs at the destination inode without even
    checking if there is space at the root metadata block.  It simply reduces
    the l_count from 243 to 227 thereby making space of 256 bytes for inline
    xattr whereas the inode already has extents beyond this index (in this
    case up to 230), thereby causing corruption.
    
    The fix for this is to reserve space for inline metadata at the destination
    inode before the reflink tree gets recreated. The customer has verified the
    fix.
    
    Link: https://lkml.kernel.org/r/20240918063844.1830332-1-gautham.ananthakrishna@oracle.com
    Fixes: ef962df057aa ("ocfs2: xattr: fix inlined xattr reflink")
    Signed-off-by: Gautham Ananthakrishna <gautham.ananthakrishna@oracle.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: strict bound check before memcmp in ocfs2_xattr_find_entry() [+ + +]
Author: Ferry Meng <mengferry@linux.alibaba.com>
Date:   Mon May 20 10:40:24 2024 +0800

    ocfs2: strict bound check before memcmp in ocfs2_xattr_find_entry()
    
    [ Upstream commit af77c4fc1871847b528d58b7fdafb4aa1f6a9262 ]
    
    xattr in ocfs2 maybe 'non-indexed', which saved with additional space
    requested.  It's better to check if the memory is out of bound before
    memcmp, although this possibility mainly comes from crafted poisonous
    images.
    
    Link: https://lkml.kernel.org/r/20240520024024.1976129-2-joseph.qi@linux.alibaba.com
    Signed-off-by: Ferry Meng <mengferry@linux.alibaba.com>
    Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Reported-by: lei lu <llfamsec@gmail.com>
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: Modify SMQ flush sequence to drop packets [+ + +]
Author: Naveen Mamindlapalli <naveenm@marvell.com>
Date:   Fri Sep 6 10:28:38 2024 +0530

    octeontx2-af: Modify SMQ flush sequence to drop packets
    
    [ Upstream commit 019aba04f08c2102b35ce7fee9d4628d349f56c0 ]
    
    The current implementation of SMQ flush sequence waits for the packets
    in the TM pipeline to be transmitted out of the link. This sequence
    doesn't succeed in HW when there is any issue with link such as lack of
    link credits, link down or any other traffic that is fully occupying the
    link bandwidth (QoS). This patch modifies the SMQ flush sequence to
    drop the packets after TL1 level (SQM) instead of polling for the packets
    to be sent out of RPM/CGX link.
    
    Fixes: 5d9b976d4480 ("octeontx2-af: Support fixed transmit scheduler topology")
    Signed-off-by: Naveen Mamindlapalli <naveenm@marvell.com>
    Reviewed-by: Sunil Kovvuri Goutham <sgoutham@marvell.com>
    Link: https://patch.msgid.link/20240906045838.1620308-1-naveenm@marvell.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

octeontx2-af: Set XOFF on other child transmit schedulers during SMQ flush [+ + +]
Author: Naveen Mamindlapalli <naveenm@marvell.com>
Date:   Mon Jun 12 11:34:24 2023 +0530

    octeontx2-af: Set XOFF on other child transmit schedulers during SMQ flush
    
    [ Upstream commit e18aab0470d8f6259be82282ffb3fdcfeaeff6c3 ]
    
    When multiple transmit scheduler queues feed a TL1 transmit link, the
    SMQ flush initiated on a low priority queue might get stuck when a high
    priority queue fully subscribes the transmit link. This inturn effects
    interface teardown. To avoid this, temporarily XOFF all TL1's other
    immediate child transmit scheduler queues and also clear any rate limit
    configuration on all the scheduler queues in SMQ(flush) hierarchy.
    
    Signed-off-by: Naveen Mamindlapalli <naveenm@marvell.com>
    Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 019aba04f08c ("octeontx2-af: Modify SMQ flush sequence to drop packets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
of/irq: Refer to actual buffer size in of_irq_parse_one() [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Tue Aug 20 14:16:53 2024 +0200

    of/irq: Refer to actual buffer size in of_irq_parse_one()
    
    [ Upstream commit 39ab331ab5d377a18fbf5a0e0b228205edfcc7f4 ]
    
    Replace two open-coded calculations of the buffer size by invocations of
    sizeof() on the buffer itself, to make sure the code will always use the
    actual buffer size.
    
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/817c0b9626fd30790fc488c472a3398324cfcc0c.1724156125.git.geert+renesas@glider.be
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

of/irq: Support #msi-cells=<0> in of_msi_get_domain [+ + +]
Author: Andrew Jones <ajones@ventanamicro.com>
Date:   Sat Aug 17 09:41:08 2024 +0200

    of/irq: Support #msi-cells=<0> in of_msi_get_domain
    
    commit db8e81132cf051843c9a59b46fa5a071c45baeb3 upstream.
    
    An 'msi-parent' property with a single entry and no accompanying
    '#msi-cells' property is considered the legacy definition as opposed
    to its definition after being expanded with commit 126b16e2ad98
    ("Docs: dt: add generic MSI bindings"). However, the legacy
    definition is completely compatible with the current definition and,
    since of_phandle_iterator_next() tolerates missing and present-but-
    zero *cells properties since commit e42ee61017f5 ("of: Let
    of_for_each_phandle fallback to non-negative cell_count"), there's no
    need anymore to special case the legacy definition in
    of_msi_get_domain().
    
    Indeed, special casing has turned out to be harmful, because, as of
    commit 7c025238b47a ("dt-bindings: irqchip: Describe the IMX MU block
    as a MSI controller"), MSI controller DT bindings have started
    specifying '#msi-cells' as a required property (even when the value
    must be zero) as an effort to make the bindings more explicit. But,
    since the special casing of 'msi-parent' only uses the existence of
    '#msi-cells' for its heuristic, and not whether or not it's also
    nonzero, the legacy path is not taken. Furthermore, the path to
    support the new, broader definition isn't taken either since that
    path has been restricted to the platform-msi bus.
    
    But, neither the definition of 'msi-parent' nor the definition of
    '#msi-cells' is platform-msi-specific (the platform-msi bus was just
    the first bus that needed '#msi-cells'), so remove both the special
    casing and the restriction. The code removal also requires changing
    to of_parse_phandle_with_optional_args() in order to ensure the
    legacy (but compatible) use of 'msi-parent' remains supported. This
    not only simplifies the code but also resolves an issue with PCI
    devices finding their MSI controllers on riscv, as the riscv,imsics
    binding requires '#msi-cells=<0>'.
    
    Signed-off-by: Andrew Jones <ajones@ventanamicro.com>
    Link: https://lore.kernel.org/r/20240817074107.31153-2-ajones@ventanamicro.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
padata: Honor the caller's alignment in case of chunk_size 0 [+ + +]
Author: Kamlesh Gurudasani <kamlesh@ti.com>
Date:   Thu Aug 22 02:32:52 2024 +0530

    padata: Honor the caller's alignment in case of chunk_size 0
    
    [ Upstream commit 24cc57d8faaa4060fd58adf810b858fcfb71a02f ]
    
    In the case where we are forcing the ps.chunk_size to be at least 1,
    we are ignoring the caller's alignment.
    
    Move the forcing of ps.chunk_size to be at least 1 before rounding it
    up to caller's alignment, so that caller's alignment is honored.
    
    While at it, use max() to force the ps.chunk_size to be at least 1 to
    improve readability.
    
    Fixes: 6d45e1c948a8 ("padata: Fix possible divide-by-0 panic in padata_mt_helper()")
    Signed-off-by: Kamlesh Gurudasani <kamlesh@ti.com>
    Acked-by:  Waiman Long <longman@redhat.com>
    Acked-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

padata: use integer wrap around to prevent deadlock on seq_nr overflow [+ + +]
Author: VanGiang Nguyen <vangiang.nguyen@rohde-schwarz.com>
Date:   Fri Aug 9 06:21:42 2024 +0000

    padata: use integer wrap around to prevent deadlock on seq_nr overflow
    
    commit 9a22b2812393d93d84358a760c347c21939029a6 upstream.
    
    When submitting more than 2^32 padata objects to padata_do_serial, the
    current sorting implementation incorrectly sorts padata objects with
    overflowed seq_nr, causing them to be placed before existing objects in
    the reorder list. This leads to a deadlock in the serialization process
    as padata_find_next cannot match padata->seq_nr and pd->processed
    because the padata instance with overflowed seq_nr will be selected
    next.
    
    To fix this, we use an unsigned integer wrap around to correctly sort
    padata objects in scenarios with integer overflow.
    
    Fixes: bfde23ce200e ("padata: unbind parallel jobs from specific CPUs")
    Cc: <stable@vger.kernel.org>
    Co-developed-by: Christian Gafert <christian.gafert@rohde-schwarz.com>
    Signed-off-by: Christian Gafert <christian.gafert@rohde-schwarz.com>
    Co-developed-by: Max Ferger <max.ferger@rohde-schwarz.com>
    Signed-off-by: Max Ferger <max.ferger@rohde-schwarz.com>
    Signed-off-by: Van Giang Nguyen <vangiang.nguyen@rohde-schwarz.com>
    Acked-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
parisc: Fix 64-bit userspace syscall path [+ + +]
Author: Helge Deller <deller@kernel.org>
Date:   Sun Sep 8 00:40:38 2024 +0200

    parisc: Fix 64-bit userspace syscall path
    
    commit d24449864da5838936669618356b0e30ca2999c3 upstream.
    
    Currently the glibc isn't yet ported to 64-bit for hppa, so
    there is no usable userspace available yet.
    But it's possible to manually build a static 64-bit binary
    and run that for testing. One such 64-bit test program is
    available at http://ftp.parisc-linux.org/src/64bit.tar.gz
    and it shows various issues with the existing 64-bit syscall
    path in the kernel.
    This patch fixes those issues.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org      # v4.19+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
parisc: Fix itlb miss handler for 64-bit programs [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Tue Sep 10 18:32:24 2024 +0200

    parisc: Fix itlb miss handler for 64-bit programs
    
    commit 9542130937e9dc707dd7c6b7af73326437da2d50 upstream.
    
    For an itlb miss when executing code above 4 Gb on ILP64 adjust the
    iasq/iaoq in the same way isr/ior was adjusted.  This fixes signal
    delivery for the 64-bit static test program from
    http://ftp.parisc-linux.org/src/64bit.tar.gz.  Note that signals are
    handled by the signal trampoline code in the 64-bit VDSO which is mapped
    into high userspace memory region above 4GB for 64-bit processes.
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org      # v4.19+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

parisc: Fix stack start for ADDR_NO_RANDOMIZE personality [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Sat Sep 7 18:28:11 2024 +0200

    parisc: Fix stack start for ADDR_NO_RANDOMIZE personality
    
    commit f31b256994acec6929306dfa86ac29716e7503d6 upstream.
    
    Fix the stack start address calculation for the parisc architecture in
    setup_arg_pages() when address randomization is disabled. When the
    ADDR_NO_RANDOMIZE process personality is disabled there is no need to add
    additional space for the stack.
    Note that this patch touches code inside an #ifdef CONFIG_STACK_GROWSUP hunk,
    which is why only the parisc architecture is affected since it's the
    only Linux architecture where the stack grows upwards.
    
    Without this patch you will find the stack in the middle of some
    mapped libaries and suddenly limited to 6MB instead of 8MB:
    
    root@parisc:~# setarch -R /bin/bash -c "cat /proc/self/maps"
    00010000-00019000 r-xp 00000000 08:05 1182034           /usr/bin/cat
    00019000-0001a000 rwxp 00009000 08:05 1182034           /usr/bin/cat
    0001a000-0003b000 rwxp 00000000 00:00 0                 [heap]
    f90c4000-f9283000 r-xp 00000000 08:05 1573004           /usr/lib/hppa-linux-gnu/libc.so.6
    f9283000-f9285000 r--p 001bf000 08:05 1573004           /usr/lib/hppa-linux-gnu/libc.so.6
    f9285000-f928a000 rwxp 001c1000 08:05 1573004           /usr/lib/hppa-linux-gnu/libc.so.6
    f928a000-f9294000 rwxp 00000000 00:00 0
    f9301000-f9323000 rwxp 00000000 00:00 0                 [stack]
    f98b4000-f98e4000 r-xp 00000000 08:05 1572869           /usr/lib/hppa-linux-gnu/ld.so.1
    f98e4000-f98e5000 r--p 00030000 08:05 1572869           /usr/lib/hppa-linux-gnu/ld.so.1
    f98e5000-f98e9000 rwxp 00031000 08:05 1572869           /usr/lib/hppa-linux-gnu/ld.so.1
    f9ad8000-f9b00000 rw-p 00000000 00:00 0
    f9b00000-f9b01000 r-xp 00000000 00:00 0                 [vdso]
    
    With the patch the stack gets correctly mapped at the end
    of the process memory map:
    
    root@panama:~# setarch -R /bin/bash -c "cat /proc/self/maps"
    00010000-00019000 r-xp 00000000 08:13 16385582          /usr/bin/cat
    00019000-0001a000 rwxp 00009000 08:13 16385582          /usr/bin/cat
    0001a000-0003b000 rwxp 00000000 00:00 0                 [heap]
    fef29000-ff0eb000 r-xp 00000000 08:13 16122400          /usr/lib/hppa-linux-gnu/libc.so.6
    ff0eb000-ff0ed000 r--p 001c2000 08:13 16122400          /usr/lib/hppa-linux-gnu/libc.so.6
    ff0ed000-ff0f2000 rwxp 001c4000 08:13 16122400          /usr/lib/hppa-linux-gnu/libc.so.6
    ff0f2000-ff0fc000 rwxp 00000000 00:00 0
    ff4b4000-ff4e4000 r-xp 00000000 08:13 16121913          /usr/lib/hppa-linux-gnu/ld.so.1
    ff4e4000-ff4e6000 r--p 00030000 08:13 16121913          /usr/lib/hppa-linux-gnu/ld.so.1
    ff4e6000-ff4ea000 rwxp 00032000 08:13 16121913          /usr/lib/hppa-linux-gnu/ld.so.1
    ff6d7000-ff6ff000 rw-p 00000000 00:00 0
    ff6ff000-ff700000 r-xp 00000000 00:00 0                 [vdso]
    ff700000-ff722000 rwxp 00000000 00:00 0                 [stack]
    
    Reported-by: Camm Maguire <camm@maguirefamily.org>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Fixes: d045c77c1a69 ("parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures")
    Fixes: 17d9822d4b4c ("parisc: Consider stack randomization for mmap base only when necessary")
    Cc: stable@vger.kernel.org      # v5.2+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: Add ACS quirk for Qualcomm SA8775P [+ + +]
Author: Subramanian Ananthanarayanan <quic_skananth@quicinc.com>
Date:   Fri Sep 6 10:52:27 2024 +0530

    PCI: Add ACS quirk for Qualcomm SA8775P
    
    [ Upstream commit 026f84d3fa62d215b11cbeb5a5d97df941e93b5c ]
    
    The Qualcomm SA8775P root ports don't advertise an ACS capability, but they
    do provide ACS-like features to disable peer transactions and validate bus
    numbers in requests.
    
    Thus, add an ACS quirk for the SA8775P.
    
    Link: https://lore.kernel.org/linux-pci/20240906052228.1829485-1-quic_skananth@quicinc.com
    Signed-off-by: Subramanian Ananthanarayanan <quic_skananth@quicinc.com>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Add function 0 DMA alias quirk for Glenfly Arise chip [+ + +]
Author: WangYuli <wangyuli@uniontech.com>
Date:   Fri Aug 23 17:57:08 2024 +0800

    PCI: Add function 0 DMA alias quirk for Glenfly Arise chip
    
    [ Upstream commit 9246b487ab3c3b5993aae7552b7a4c541cc14a49 ]
    
    Add DMA support for audio function of Glenfly Arise chip, which uses
    Requester ID of function 0.
    
    Link: https://lore.kernel.org/r/CA2BBD087345B6D1+20240823095708.3237375-1-wangyuli@uniontech.com
    Signed-off-by: SiyuLi <siyuli@glenfly.com>
    Signed-off-by: WangYuli <wangyuli@uniontech.com>
    [bhelgaas: lower-case hex to match local code, drop unused Device IDs]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: keystone: Fix if-statement expression in ks_pcie_quirk() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Jul 19 18:53:26 2024 -0500

    PCI: keystone: Fix if-statement expression in ks_pcie_quirk()
    
    [ Upstream commit 6188a1c762eb9bbd444f47696eda77a5eae6207a ]
    
    This code accidentally uses && where || was intended.  It potentially
    results in a NULL dereference.
    
    Thus, fix the if-statement expression to use the correct condition.
    
    Fixes: 86f271f22bbb ("PCI: keystone: Add workaround for Errata #i2037 (AM65x SR 1.0)")
    Link: https://lore.kernel.org/linux-pci/1b762a93-e1b2-4af3-8c04-c8843905c279@stanley.mountain
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    [kwilczynski: commit log]
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Reviewed-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Mark Creative Labs EMU20k2 INTx masking as broken [+ + +]
Author: Alex Williamson <alex.williamson@redhat.com>
Date:   Thu Sep 12 15:53:27 2024 -0600

    PCI: Mark Creative Labs EMU20k2 INTx masking as broken
    
    [ Upstream commit 2910306655a7072640021563ec9501bfa67f0cb1 ]
    
    Per user reports, the Creative Labs EMU20k2 (Sound Blaster X-Fi
    Titanium Series) generates spurious interrupts when used with
    vfio-pci unless DisINTx masking support is disabled.
    
    Thus, quirk the device to mark INTx masking as broken.
    
    Closes: https://lore.kernel.org/all/VI1PR10MB8207C507DB5420AB4C7281E0DB9A2@VI1PR10MB8207.EURPRD10.PROD.OUTLOOK.COM
    Link: https://lore.kernel.org/linux-pci/20240912215331.839220-1-alex.williamson@redhat.com
    Reported-by: zdravko delineshev <delineshev@outlook.com>
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    [kwilczynski: commit log]
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: xilinx-nwl: Clean up clock on probe failure/removal [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Fri May 31 12:13:35 2024 -0400

    PCI: xilinx-nwl: Clean up clock on probe failure/removal
    
    [ Upstream commit cfd67903977b13f63340a4eb5a1cc890994f2c62 ]
    
    Make sure we turn off the clock on probe failure and device removal.
    
    Fixes: de0a01f52966 ("PCI: xilinx-nwl: Enable the clock through CCF")
    Link: https://lore.kernel.org/r/20240531161337.864994-6-sean.anderson@linux.dev
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: xilinx-nwl: Fix off-by-one in INTx IRQ handler [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Fri May 31 12:13:32 2024 -0400

    PCI: xilinx-nwl: Fix off-by-one in INTx IRQ handler
    
    commit 0199d2f2bd8cd97b310f7ed82a067247d7456029 upstream.
    
    MSGF_LEG_MASK is laid out with INTA in bit 0, INTB in bit 1, INTC in bit 2,
    and INTD in bit 3. Hardware IRQ numbers start at 0, and we register
    PCI_NUM_INTX IRQs. So to enable INTA (aka hwirq 0) we should set bit 0.
    Remove the subtraction of one.
    
    This bug would cause INTx interrupts not to be delivered, as enabling INTB
    would actually enable INTA, and enabling INTA wouldn't enable anything at
    all. It is likely that this got overlooked for so long since most PCIe
    hardware uses MSIs. This fixes the following UBSAN error:
    
      UBSAN: shift-out-of-bounds in ../drivers/pci/controller/pcie-xilinx-nwl.c:389:11
      shift exponent 18446744073709551615 is too large for 32-bit type 'int'
      CPU: 1 PID: 61 Comm: kworker/u10:1 Not tainted 6.6.20+ #268
      Hardware name: xlnx,zynqmp (DT)
      Workqueue: events_unbound deferred_probe_work_func
      Call trace:
      dump_backtrace (arch/arm64/kernel/stacktrace.c:235)
      show_stack (arch/arm64/kernel/stacktrace.c:242)
      dump_stack_lvl (lib/dump_stack.c:107)
      dump_stack (lib/dump_stack.c:114)
      __ubsan_handle_shift_out_of_bounds (lib/ubsan.c:218 lib/ubsan.c:387)
      nwl_unmask_leg_irq (drivers/pci/controller/pcie-xilinx-nwl.c:389 (discriminator 1))
      irq_enable (kernel/irq/internals.h:234 kernel/irq/chip.c:170 kernel/irq/chip.c:439 kernel/irq/chip.c:432 kernel/irq/chip.c:345)
      __irq_startup (kernel/irq/internals.h:239 kernel/irq/chip.c:180 kernel/irq/chip.c:250)
      irq_startup (kernel/irq/chip.c:270)
      __setup_irq (kernel/irq/manage.c:1800)
      request_threaded_irq (kernel/irq/manage.c:2206)
      pcie_pme_probe (include/linux/interrupt.h:168 drivers/pci/pcie/pme.c:348)
    
    Fixes: 9a181e1093af ("PCI: xilinx-nwl: Modify IRQ chip for legacy interrupts")
    Link: https://lore.kernel.org/r/20240531161337.864994-3-sean.anderson@linux.dev
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: xilinx-nwl: Fix register misspelling [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Fri May 31 12:13:33 2024 -0400

    PCI: xilinx-nwl: Fix register misspelling
    
    [ Upstream commit a437027ae1730b8dc379c75fa0dd7d3036917400 ]
    
    MSIC -> MISC
    
    Fixes: c2a7ff18edcd ("PCI: xilinx-nwl: Expand error logging")
    Link: https://lore.kernel.org/r/20240531161337.864994-4-sean.anderson@linux.dev
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf hist: Update hist symbol when updating maps [+ + +]
Author: Matt Fleming <matt@readmodwrite.com>
Date:   Thu Aug 15 15:22:12 2024 +0100

    perf hist: Update hist symbol when updating maps
    
    commit ac01c8c4246546fd8340a232f3ada1921dc0ee48 upstream.
    
    AddressSanitizer found a use-after-free bug in the symbol code which
    manifested as 'perf top' segfaulting.
    
      ==1238389==ERROR: AddressSanitizer: heap-use-after-free on address 0x60b00c48844b at pc 0x5650d8035961 bp 0x7f751aaecc90 sp 0x7f751aaecc80
      READ of size 1 at 0x60b00c48844b thread T193
          #0 0x5650d8035960 in _sort__sym_cmp util/sort.c:310
          #1 0x5650d8043744 in hist_entry__cmp util/hist.c:1286
          #2 0x5650d8043951 in hists__findnew_entry util/hist.c:614
          #3 0x5650d804568f in __hists__add_entry util/hist.c:754
          #4 0x5650d8045bf9 in hists__add_entry util/hist.c:772
          #5 0x5650d8045df1 in iter_add_single_normal_entry util/hist.c:997
          #6 0x5650d8043326 in hist_entry_iter__add util/hist.c:1242
          #7 0x5650d7ceeefe in perf_event__process_sample /home/matt/src/linux/tools/perf/builtin-top.c:845
          #8 0x5650d7ceeefe in deliver_event /home/matt/src/linux/tools/perf/builtin-top.c:1208
          #9 0x5650d7fdb51b in do_flush util/ordered-events.c:245
          #10 0x5650d7fdb51b in __ordered_events__flush util/ordered-events.c:324
          #11 0x5650d7ced743 in process_thread /home/matt/src/linux/tools/perf/builtin-top.c:1120
          #12 0x7f757ef1f133 in start_thread nptl/pthread_create.c:442
          #13 0x7f757ef9f7db in clone3 ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
    
    When updating hist maps it's also necessary to update the hist symbol
    reference because the old one gets freed in map__put().
    
    While this bug was probably introduced with 5c24b67aae72f54c ("perf
    tools: Replace map->referenced & maps->removed_maps with map->refcnt"),
    the symbol objects were leaked until c087e9480cf33672 ("perf machine:
    Fix refcount usage when processing PERF_RECORD_KSYMBOL") was merged so
    the bug was masked.
    
    Fixes: c087e9480cf33672 ("perf machine: Fix refcount usage when processing PERF_RECORD_KSYMBOL")
    Reported-by: Yunzhao Li <yunzhao@cloudflare.com>
    Signed-off-by: Matt Fleming (Cloudflare) <matt@readmodwrite.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: kernel-team@cloudflare.com
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Riccardo Mancini <rickyman7@gmail.com>
    Cc: stable@vger.kernel.org # v5.13+
    Link: https://lore.kernel.org/r/20240815142212.3834625-1-matt@readmodwrite.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf mem: Free the allocated sort string, fixing a leak [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Wed Jul 31 16:55:01 2024 -0700

    perf mem: Free the allocated sort string, fixing a leak
    
    [ Upstream commit 3da209bb1177462b6fe8e3021a5527a5a49a9336 ]
    
    The get_sort_order() returns either a new string (from strdup) or NULL
    but it never gets freed.
    
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Fixes: 2e7f545096f954a9 ("perf mem: Factor out a function to generate sort order")
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: https://lore.kernel.org/r/20240731235505.710436-3-namhyung@kernel.org
    [ Added Fixes tag ]
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf report: Fix segfault when 'sym' sort key is not used [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Mon Aug 26 15:10:42 2024 -0700

    perf report: Fix segfault when 'sym' sort key is not used
    
    commit 9af2efee41b27a0f386fb5aa95d8d0b4b5d9fede upstream.
    
    The fields in the hist_entry are filled on-demand which means they only
    have meaningful values when relevant sort keys are used.
    
    So if neither of 'dso' nor 'sym' sort keys are used, the map/symbols in
    the hist entry can be garbage.  So it shouldn't access it
    unconditionally.
    
    I got a segfault, when I wanted to see cgroup profiles.
    
      $ sudo perf record -a --all-cgroups --synth=cgroup true
    
      $ sudo perf report -s cgroup
    
      Program received signal SIGSEGV, Segmentation fault.
      0x00005555557a8d90 in map__dso (map=0x0) at util/map.h:48
      48            return RC_CHK_ACCESS(map)->dso;
      (gdb) bt
      #0  0x00005555557a8d90 in map__dso (map=0x0) at util/map.h:48
      #1  0x00005555557aa39b in map__load (map=0x0) at util/map.c:344
      #2  0x00005555557aa592 in map__find_symbol (map=0x0, addr=140736115941088) at util/map.c:385
      #3  0x00005555557ef000 in hists__findnew_entry (hists=0x555556039d60, entry=0x7fffffffa4c0, al=0x7fffffffa8c0, sample_self=true)
          at util/hist.c:644
      #4  0x00005555557ef61c in __hists__add_entry (hists=0x555556039d60, al=0x7fffffffa8c0, sym_parent=0x0, bi=0x0, mi=0x0, ki=0x0,
          block_info=0x0, sample=0x7fffffffaa90, sample_self=true, ops=0x0) at util/hist.c:761
      #5  0x00005555557ef71f in hists__add_entry (hists=0x555556039d60, al=0x7fffffffa8c0, sym_parent=0x0, bi=0x0, mi=0x0, ki=0x0,
          sample=0x7fffffffaa90, sample_self=true) at util/hist.c:779
      #6  0x00005555557f00fb in iter_add_single_normal_entry (iter=0x7fffffffa900, al=0x7fffffffa8c0) at util/hist.c:1015
      #7  0x00005555557f09a7 in hist_entry_iter__add (iter=0x7fffffffa900, al=0x7fffffffa8c0, max_stack_depth=127, arg=0x7fffffffbce0)
          at util/hist.c:1260
      #8  0x00005555555ba7ce in process_sample_event (tool=0x7fffffffbce0, event=0x7ffff7c14128, sample=0x7fffffffaa90, evsel=0x555556039ad0,
          machine=0x5555560388e8) at builtin-report.c:334
      #9  0x00005555557b30c8 in evlist__deliver_sample (evlist=0x555556039010, tool=0x7fffffffbce0, event=0x7ffff7c14128,
          sample=0x7fffffffaa90, evsel=0x555556039ad0, machine=0x5555560388e8) at util/session.c:1232
      #10 0x00005555557b32bc in machines__deliver_event (machines=0x5555560388e8, evlist=0x555556039010, event=0x7ffff7c14128,
          sample=0x7fffffffaa90, tool=0x7fffffffbce0, file_offset=110888, file_path=0x555556038ff0 "perf.data") at util/session.c:1271
      #11 0x00005555557b3848 in perf_session__deliver_event (session=0x5555560386d0, event=0x7ffff7c14128, tool=0x7fffffffbce0,
          file_offset=110888, file_path=0x555556038ff0 "perf.data") at util/session.c:1354
      #12 0x00005555557affaf in ordered_events__deliver_event (oe=0x555556038e60, event=0x555556135aa0) at util/session.c:132
      #13 0x00005555557bb605 in do_flush (oe=0x555556038e60, show_progress=false) at util/ordered-events.c:245
      #14 0x00005555557bb95c in __ordered_events__flush (oe=0x555556038e60, how=OE_FLUSH__ROUND, timestamp=0) at util/ordered-events.c:324
      #15 0x00005555557bba46 in ordered_events__flush (oe=0x555556038e60, how=OE_FLUSH__ROUND) at util/ordered-events.c:342
      #16 0x00005555557b1b3b in perf_event__process_finished_round (tool=0x7fffffffbce0, event=0x7ffff7c15bb8, oe=0x555556038e60)
          at util/session.c:780
      #17 0x00005555557b3b27 in perf_session__process_user_event (session=0x5555560386d0, event=0x7ffff7c15bb8, file_offset=117688,
          file_path=0x555556038ff0 "perf.data") at util/session.c:1406
    
    As you can see the entry->ms.map was NULL even if he->ms.map has a
    value.  This is because 'sym' sort key is not given, so it cannot assume
    whether he->ms.sym and entry->ms.sym is the same.  I only checked the
    'sym' sort key here as it implies 'dso' behavior (so maps are the same).
    
    Fixes: ac01c8c4246546fd ("perf hist: Update hist symbol when updating maps")
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Matt Fleming <matt@readmodwrite.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: https://lore.kernel.org/r/20240826221045.1202305-2-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf sched timehist: Fix missing free of session in perf_sched__timehist() [+ + +]
Author: Yang Jihong <yangjihong@bytedance.com>
Date:   Tue Aug 6 10:35:33 2024 +0800

    perf sched timehist: Fix missing free of session in perf_sched__timehist()
    
    [ Upstream commit 6bdf5168b6fb19541b0c1862bdaa596d116c7bfb ]
    
    When perf_time__parse_str() fails in perf_sched__timehist(),
    need to free session that was previously created, fix it.
    
    Fixes: 853b74071110bed3 ("perf sched timehist: Add option to specify time window of interest")
    Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
    Acked-by: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: David Ahern <dsa@cumulusnetworks.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240806023533.1316348-1-yangjihong@bytedance.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

perf sched timehist: Fixed timestamp error when unable to confirm event sched_in time [+ + +]
Author: Yang Jihong <yangjihong@bytedance.com>
Date:   Mon Aug 19 10:47:20 2024 +0800

    perf sched timehist: Fixed timestamp error when unable to confirm event sched_in time
    
    [ Upstream commit 39c243411bdb8fb35777adf49ee32549633c4e12 ]
    
    If sched_in event for current task is not recorded, sched_in timestamp
    will be set to end_time of time window interest, causing an error in
    timestamp show. In this case, we choose to ignore this event.
    
    Test scenario:
    
      perf[1229608] does not record the first sched_in event, run time and sch delay are both 0
    
      # perf sched timehist
      Samples of sched_switch event do not have callchains.
                 time    cpu  task name                       wait time  sch delay   run time
                              [tid/pid]                          (msec)     (msec)     (msec)
      --------------- ------  ------------------------------  ---------  ---------  ---------
       2090450.763231 [0000]  perf[1229608]                       0.000      0.000      0.000
       2090450.763235 [0000]  migration/0[15]                     0.000      0.001      0.003
       2090450.763263 [0001]  perf[1229608]                       0.000      0.000      0.000
       2090450.763268 [0001]  migration/1[21]                     0.000      0.001      0.004
       2090450.763302 [0002]  perf[1229608]                       0.000      0.000      0.000
       2090450.763309 [0002]  migration/2[27]                     0.000      0.001      0.007
       2090450.763338 [0003]  perf[1229608]                       0.000      0.000      0.000
       2090450.763343 [0003]  migration/3[33]                     0.000      0.001      0.004
    
    Before:
    
      arbitrarily specify a time window of interest, timestamp will be set to an incorrect value
    
      # perf sched timehist --time 100,200
      Samples of sched_switch event do not have callchains.
                 time    cpu  task name                       wait time  sch delay   run time
                              [tid/pid]                          (msec)     (msec)     (msec)
      --------------- ------  ------------------------------  ---------  ---------  ---------
           200.000000 [0000]  perf[1229608]                       0.000      0.000      0.000
           200.000000 [0001]  perf[1229608]                       0.000      0.000      0.000
           200.000000 [0002]  perf[1229608]                       0.000      0.000      0.000
           200.000000 [0003]  perf[1229608]                       0.000      0.000      0.000
           200.000000 [0004]  perf[1229608]                       0.000      0.000      0.000
           200.000000 [0005]  perf[1229608]                       0.000      0.000      0.000
           200.000000 [0006]  perf[1229608]                       0.000      0.000      0.000
           200.000000 [0007]  perf[1229608]                       0.000      0.000      0.000
    
     After:
    
      # perf sched timehist --time 100,200
      Samples of sched_switch event do not have callchains.
                 time    cpu  task name                       wait time  sch delay   run time
                              [tid/pid]                          (msec)     (msec)     (msec)
      --------------- ------  ------------------------------  ---------  ---------  ---------
    
    Fixes: 853b74071110bed3 ("perf sched timehist: Add option to specify time window of interest")
    Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
    Acked-by: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: David Ahern <dsa@cumulusnetworks.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@arm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240819024720.2405244-1-yangjihong@bytedance.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf time-utils: Fix 32-bit nsec parsing [+ + +]
Author: Ian Rogers <irogers@google.com>
Date:   Sat Aug 31 00:04:11 2024 -0700

    perf time-utils: Fix 32-bit nsec parsing
    
    [ Upstream commit 38e2648a81204c9fc5b4c87a8ffce93a6ed91b65 ]
    
    The "time utils" test fails in 32-bit builds:
      ...
      parse_nsec_time("18446744073.709551615")
      Failed. ptime 4294967295709551615 expected 18446744073709551615
      ...
    
    Switch strtoul to strtoull as an unsigned long in 32-bit build isn't
    64-bits.
    
    Fixes: c284d669a20d408b ("perf tools: Move parse_nsec_time to time-utils.c")
    Signed-off-by: Ian Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
    Cc: Chaitanya S Prakash <chaitanyas.prakash@arm.com>
    Cc: Colin Ian King <colin.i.king@gmail.com>
    Cc: David Ahern <dsa@cumulusnetworks.com>
    Cc: Dominique Martinet <asmadeus@codewreck.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@linaro.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: John Garry <john.g.garry@oracle.com>
    Cc: Junhao He <hejunhao3@huawei.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Yang Jihong <yangjihong@bytedance.com>
    Link: https://lore.kernel.org/r/20240831070415.506194-3-irogers@google.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/core: Fix small negative period being ignored [+ + +]
Author: Luo Gengkun <luogengkun@huaweicloud.com>
Date:   Sat Aug 31 07:43:15 2024 +0000

    perf/core: Fix small negative period being ignored
    
    commit 62c0b1061593d7012292f781f11145b2d46f43ab upstream.
    
    In perf_adjust_period, we will first calculate period, and then use
    this period to calculate delta. However, when delta is less than 0,
    there will be a deviation compared to when delta is greater than or
    equal to 0. For example, when delta is in the range of [-14,-1], the
    range of delta = delta + 7 is between [-7,6], so the final value of
    delta/8 is 0. Therefore, the impact of -1 and -2 will be ignored.
    This is unacceptable when the target period is very short, because
    we will lose a lot of samples.
    
    Here are some tests and analyzes:
    before:
      # perf record -e cs -F 1000  ./a.out
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.022 MB perf.data (518 samples) ]
    
      # perf script
      ...
      a.out     396   257.956048:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.957891:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.959730:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.961545:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.963355:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.965163:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.966973:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.968785:         23 cs:  ffffffff81f4eeec schedul>
      a.out     396   257.970593:         23 cs:  ffffffff81f4eeec schedul>
      ...
    
    after:
      # perf record -e cs -F 1000  ./a.out
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.058 MB perf.data (1466 samples) ]
    
      # perf script
      ...
      a.out     395    59.338813:         11 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.339707:         12 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.340682:         13 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.341751:         13 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.342799:         12 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.343765:         11 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.344651:         11 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.345539:         12 cs:  ffffffff81f4eeec schedul>
      a.out     395    59.346502:         13 cs:  ffffffff81f4eeec schedul>
      ...
    
    test.c
    
    int main() {
            for (int i = 0; i < 20000; i++)
                    usleep(10);
    
            return 0;
    }
    
      # time ./a.out
      real    0m1.583s
      user    0m0.040s
      sys     0m0.298s
    
    The above results were tested on x86-64 qemu with KVM enabled using
    test.c as test program. Ideally, we should have around 1500 samples,
    but the previous algorithm had only about 500, whereas the modified
    algorithm now has about 1400. Further more, the new version shows 1
    sample per 0.001s, while the previous one is 1 sample per 0.002s.This
    indicates that the new algorithm is more sensitive to small negative
    values compared to old algorithm.
    
    Fixes: bd2b5b12849a ("perf_counter: More aggressive frequency adjustment")
    Signed-off-by: Luo Gengkun <luogengkun@huaweicloud.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Kan Liang <kan.liang@linux.intel.com>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20240831074316.2106159-2-luogengkun@huaweicloud.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf/x86/intel/pt: Fix sampling synchronization [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Jul 15 19:07:00 2024 +0300

    perf/x86/intel/pt: Fix sampling synchronization
    
    commit d92792a4b26e50b96ab734cbe203d8a4c932a7a9 upstream.
    
    pt_event_snapshot_aux() uses pt->handle_nmi to determine if tracing
    needs to be stopped, however tracing can still be going because
    pt->handle_nmi is set to zero before tracing is stopped in pt_event_stop,
    whereas pt_event_snapshot_aux() requires that tracing must be stopped in
    order to copy a sample of trace from the buffer.
    
    Instead call pt_config_stop() always, which anyway checks config for
    RTIT_CTL_TRACEEN and does nothing if it is already clear.
    
    Note pt_event_snapshot_aux() can continue to use pt->handle_nmi to
    determine if the trace needs to be restarted afterwards.
    
    Fixes: 25e8920b301c ("perf/x86/intel/pt: Add sampling support")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lkml.kernel.org/r/20240715160712.127117-2-adrian.hunter@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pinctrl: at91: make it work with current gpiolib [+ + +]
Author: Thomas Blocher <thomas.blocher@ek-dev.de>
Date:   Wed Jul 31 01:16:26 2024 +0200

    pinctrl: at91: make it work with current gpiolib
    
    [ Upstream commit 752f387faaae0ae2e84d3f496922524785e77d60 ]
    
    pinctrl-at91 currently does not support the gpio-groups devicetree
    property and has no pin-range.
    Because of this at91 gpios stopped working since patch
    commit 2ab73c6d8323fa1e ("gpio: Support GPIO controllers without pin-ranges")
    This was discussed in the patches
    commit fc328a7d1fcce263 ("gpio: Revert regression in sysfs-gpio (gpiolib.c)")
    commit 56e337f2cf132632 ("Revert "gpio: Revert regression in sysfs-gpio (gpiolib.c)"")
    
    As a workaround manually set pin-range via gpiochip_add_pin_range() until
    a) pinctrl-at91 is reworked to support devicetree gpio-groups
    b) another solution as mentioned in
    commit 56e337f2cf132632 ("Revert "gpio: Revert regression in sysfs-gpio (gpiolib.c)"")
    is found
    
    Signed-off-by: Thomas Blocher <thomas.blocher@ek-dev.de>
    Link: https://lore.kernel.org/5b992862-355d-f0de-cd3d-ff99e67a4ff1@ek-dev.de
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: mvebu: Fix devinit_dove_pinctrl_probe function [+ + +]
Author: Wang Jianzheng <wangjianzheng@vivo.com>
Date:   Thu Aug 29 14:48:23 2024 +0800

    pinctrl: mvebu: Fix devinit_dove_pinctrl_probe function
    
    [ Upstream commit c25478419f6fd3f74c324a21ec007cf14f2688d7 ]
    
    When an error occurs during the execution of the function
    __devinit_dove_pinctrl_probe, the clk is not properly disabled.
    
    Fix this by calling clk_disable_unprepare before return.
    
    Fixes: ba607b6238a1 ("pinctrl: mvebu: make pdma clock on dove mandatory")
    Signed-off-by: Wang Jianzheng <wangjianzheng@vivo.com>
    Link: https://lore.kernel.org/20240829064823.19808-1-wangjianzheng@vivo.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: mvebu: Use devm_platform_get_and_ioremap_resource() [+ + +]
Author: Yangtao Li <frank.li@vivo.com>
Date:   Tue Jul 4 20:47:40 2023 +0800

    pinctrl: mvebu: Use devm_platform_get_and_ioremap_resource()
    
    [ Upstream commit 2d357f25663ddfef47ffe26da21155302153d168 ]
    
    Convert platform_get_resource(), devm_ioremap_resource() to a single
    call to devm_platform_get_and_ioremap_resource(), as this is exactly
    what this function does.
    
    Signed-off-by: Yangtao Li <frank.li@vivo.com>
    Link: https://lore.kernel.org/r/20230704124742.9596-2-frank.li@vivo.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Stable-dep-of: c25478419f6f ("pinctrl: mvebu: Fix devinit_dove_pinctrl_probe function")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: single: fix missing error code in pcs_probe() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Mon Aug 19 10:46:25 2024 +0800

    pinctrl: single: fix missing error code in pcs_probe()
    
    [ Upstream commit cacd8cf79d7823b07619865e994a7916fcc8ae91 ]
    
    If pinctrl_enable() fails in pcs_probe(), it should return the error code.
    
    Fixes: 8f773bfbdd42 ("pinctrl: single: fix possible memory leak when pinctrl_enable() fails")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/20240819024625.154441-1-yangyingliang@huaweicloud.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/surface: aggregator_registry: Add support for Surface Laptop Go 3 [+ + +]
Author: Maximilian Luz <luzmaximilian@gmail.com>
Date:   Sun Aug 11 15:19:45 2024 +0200

    platform/surface: aggregator_registry: Add support for Surface Laptop Go 3
    
    [ Upstream commit ed235163c3f02329d5e37ed4485bbc39ed2568d4 ]
    
    Add SAM client device nodes for the Surface Laptop Go 3. It seems to use
    the same SAM client devices as the Surface Laptop Go 1 and 2, so re-use
    their node group.
    
    Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
    Link: https://lore.kernel.org/r/20240811131948.261806-3-luzmaximilian@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>

 
platform/x86: ISST: Fix the KASAN report slab-out-of-bounds bug [+ + +]
Author: Zach Wade <zachwade.k@gmail.com>
Date:   Mon Sep 23 22:45:08 2024 +0800

    platform/x86: ISST: Fix the KASAN report slab-out-of-bounds bug
    
    commit 7d59ac07ccb58f8f604f8057db63b8efcebeb3de upstream.
    
    Attaching SST PCI device to VM causes "BUG: KASAN: slab-out-of-bounds".
    kasan report:
    [   19.411889] ==================================================================
    [   19.413702] BUG: KASAN: slab-out-of-bounds in _isst_if_get_pci_dev+0x3d5/0x400 [isst_if_common]
    [   19.415634] Read of size 8 at addr ffff888829e65200 by task cpuhp/16/113
    [   19.417368]
    [   19.418627] CPU: 16 PID: 113 Comm: cpuhp/16 Tainted: G            E      6.9.0 #10
    [   19.420435] Hardware name: VMware, Inc. VMware20,1/440BX Desktop Reference Platform, BIOS VMW201.00V.20192059.B64.2207280713 07/28/2022
    [   19.422687] Call Trace:
    [   19.424091]  <TASK>
    [   19.425448]  dump_stack_lvl+0x5d/0x80
    [   19.426963]  ? _isst_if_get_pci_dev+0x3d5/0x400 [isst_if_common]
    [   19.428694]  print_report+0x19d/0x52e
    [   19.430206]  ? __pfx__raw_spin_lock_irqsave+0x10/0x10
    [   19.431837]  ? _isst_if_get_pci_dev+0x3d5/0x400 [isst_if_common]
    [   19.433539]  kasan_report+0xf0/0x170
    [   19.435019]  ? _isst_if_get_pci_dev+0x3d5/0x400 [isst_if_common]
    [   19.436709]  _isst_if_get_pci_dev+0x3d5/0x400 [isst_if_common]
    [   19.438379]  ? __pfx_sched_clock_cpu+0x10/0x10
    [   19.439910]  isst_if_cpu_online+0x406/0x58f [isst_if_common]
    [   19.441573]  ? __pfx_isst_if_cpu_online+0x10/0x10 [isst_if_common]
    [   19.443263]  ? ttwu_queue_wakelist+0x2c1/0x360
    [   19.444797]  cpuhp_invoke_callback+0x221/0xec0
    [   19.446337]  cpuhp_thread_fun+0x21b/0x610
    [   19.447814]  ? __pfx_cpuhp_thread_fun+0x10/0x10
    [   19.449354]  smpboot_thread_fn+0x2e7/0x6e0
    [   19.450859]  ? __pfx_smpboot_thread_fn+0x10/0x10
    [   19.452405]  kthread+0x29c/0x350
    [   19.453817]  ? __pfx_kthread+0x10/0x10
    [   19.455253]  ret_from_fork+0x31/0x70
    [   19.456685]  ? __pfx_kthread+0x10/0x10
    [   19.458114]  ret_from_fork_asm+0x1a/0x30
    [   19.459573]  </TASK>
    [   19.460853]
    [   19.462055] Allocated by task 1198:
    [   19.463410]  kasan_save_stack+0x30/0x50
    [   19.464788]  kasan_save_track+0x14/0x30
    [   19.466139]  __kasan_kmalloc+0xaa/0xb0
    [   19.467465]  __kmalloc+0x1cd/0x470
    [   19.468748]  isst_if_cdev_register+0x1da/0x350 [isst_if_common]
    [   19.470233]  isst_if_mbox_init+0x108/0xff0 [isst_if_mbox_msr]
    [   19.471670]  do_one_initcall+0xa4/0x380
    [   19.472903]  do_init_module+0x238/0x760
    [   19.474105]  load_module+0x5239/0x6f00
    [   19.475285]  init_module_from_file+0xd1/0x130
    [   19.476506]  idempotent_init_module+0x23b/0x650
    [   19.477725]  __x64_sys_finit_module+0xbe/0x130
    [   19.476506]  idempotent_init_module+0x23b/0x650
    [   19.477725]  __x64_sys_finit_module+0xbe/0x130
    [   19.478920]  do_syscall_64+0x82/0x160
    [   19.480036]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [   19.481292]
    [   19.482205] The buggy address belongs to the object at ffff888829e65000
     which belongs to the cache kmalloc-512 of size 512
    [   19.484818] The buggy address is located 0 bytes to the right of
     allocated 512-byte region [ffff888829e65000, ffff888829e65200)
    [   19.487447]
    [   19.488328] The buggy address belongs to the physical page:
    [   19.489569] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff888829e60c00 pfn:0x829e60
    [   19.491140] head: order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    [   19.492466] anon flags: 0x57ffffc0000840(slab|head|node=1|zone=2|lastcpupid=0x1fffff)
    [   19.493914] page_type: 0xffffffff()
    [   19.494988] raw: 0057ffffc0000840 ffff88810004cc80 0000000000000000 0000000000000001
    [   19.496451] raw: ffff888829e60c00 0000000080200018 00000001ffffffff 0000000000000000
    [   19.497906] head: 0057ffffc0000840 ffff88810004cc80 0000000000000000 0000000000000001
    [   19.499379] head: ffff888829e60c00 0000000080200018 00000001ffffffff 0000000000000000
    [   19.500844] head: 0057ffffc0000003 ffffea0020a79801 ffffea0020a79848 00000000ffffffff
    [   19.502316] head: 0000000800000000 0000000000000000 00000000ffffffff 0000000000000000
    [   19.503784] page dumped because: kasan: bad access detected
    [   19.505058]
    [   19.505970] Memory state around the buggy address:
    [   19.507172]  ffff888829e65100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   19.508599]  ffff888829e65180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   19.510013] >ffff888829e65200: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [   19.510014]                    ^
    [   19.510016]  ffff888829e65280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [   19.510018]  ffff888829e65300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [   19.515367] ==================================================================
    
    The reason for this error is physical_package_ids assigned by VMware VMM
    are not continuous and have gaps. This will cause value returned by
    topology_physical_package_id() to be more than topology_max_packages().
    
    Here the allocation uses topology_max_packages(). The call to
    topology_max_packages() returns maximum logical package ID not physical
    ID. Hence use topology_logical_package_id() instead of
    topology_physical_package_id().
    
    Fixes: 9a1aac8a96dc ("platform/x86: ISST: PUNIT device mapping with Sub-NUMA clustering")
    Cc: stable@vger.kernel.org
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Zach Wade <zachwade.k@gmail.com>
    Link: https://lore.kernel.org/r/20240923144508.1764-1-zachwade.k@gmail.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: panasonic-laptop: Allocate 1 entry extra in the sinf array [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Sep 9 13:32:26 2024 +0200

    platform/x86: panasonic-laptop: Allocate 1 entry extra in the sinf array
    
    commit 33297cef3101d950cec0033a0dce0a2d2bd59999 upstream.
    
    Some DSDT-s have an off-by-one bug where the SINF package count is
    one higher than the SQTY reported value, allocate 1 entry extra.
    
    Also make the SQTY <-> SINF package count mismatch error more verbose
    to help debugging similar issues in the future.
    
    This fixes the panasonic-laptop driver failing to probe() on some
    devices with the following errors:
    
    [    3.958887] SQTY reports bad SINF length SQTY: 37 SINF-pkg-count: 38
    [    3.958892] Couldn't retrieve BIOS data
    [    3.983685] Panasonic Laptop Support - With Macros: probe of MAT0019:00 failed with error -5
    
    Fixes: 709ee531c153 ("panasonic-laptop: add Panasonic Let's Note laptop extras driver v0.94")
    Cc: stable@vger.kernel.org
    Tested-by: James Harmison <jharmison@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240909113227.254470-2-hdegoede@redhat.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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: panasonic-laptop: Fix SINF array out of bounds accesses [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Sep 9 13:32:25 2024 +0200

    platform/x86: panasonic-laptop: Fix SINF array out of bounds accesses
    
    commit f52e98d16e9bd7dd2b3aef8e38db5cbc9899d6a4 upstream.
    
    The panasonic laptop code in various places uses the SINF array with index
    values of 0 - SINF_CUR_BRIGHT(0x0d) without checking that the SINF array
    is big enough.
    
    Not all panasonic laptops have this many SINF array entries, for example
    the Toughbook CF-18 model only has 10 SINF array entries. So it only
    supports the AC+DC brightness entries and mute.
    
    Check that the SINF array has a minimum size which covers all AC+DC
    brightness entries and refuse to load if the SINF array is smaller.
    
    For higher SINF indexes hide the sysfs attributes when the SINF array
    does not contain an entry for that attribute, avoiding show()/store()
    accessing the array out of bounds and add bounds checking to the probe()
    and resume() code accessing these.
    
    Fixes: e424fb8cc4e6 ("panasonic-laptop: avoid overflow in acpi_pcc_hotkey_add()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240909113227.254470-1-hdegoede@redhat.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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: touchscreen_dmi: add nanote-next quirk [+ + +]
Author: Ckath <ckath@yandex.ru>
Date:   Wed Sep 11 21:12:40 2024 +0200

    platform/x86: touchscreen_dmi: add nanote-next quirk
    
    [ Upstream commit c11619af35bae5884029bd14170c3e4b55ddf6f3 ]
    
    Add touschscreen info for the nanote next (UMPC-03-SR).
    
    After checking with multiple owners the DMI info really is this generic.
    
    Signed-off-by: Ckath <ckath@yandex.ru>
    Link: https://lore.kernel.org/r/e8dda83a-10ae-42cf-a061-5d29be0d193a@yandex.ru
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pmdomain: core: Harden inter-column space in debug summary [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Wed Sep 4 16:30:45 2024 +0200

    pmdomain: core: Harden inter-column space in debug summary
    
    [ Upstream commit 692c20c4d075bd452acfbbc68200fc226c7c9496 ]
    
    The inter-column space in the debug summary is two spaces.  However, in
    one case, the extra space is handled implicitly in a field width
    specifier.  Make inter-column space explicit to ease future maintenance.
    
    Fixes: 45fbc464b047 ("PM: domains: Add "performance" column to debug summary")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/ae61eb363621b981edde878e1e74d701702a579f.1725459707.git.geert+renesas@glider.be
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
power: reset: brcmstb: Do not go into infinite loop if reset fails [+ + +]
Author: Andrew Davis <afd@ti.com>
Date:   Mon Jun 10 09:28:36 2024 -0500

    power: reset: brcmstb: Do not go into infinite loop if reset fails
    
    [ Upstream commit cf8c39b00e982fa506b16f9d76657838c09150cb ]
    
    There may be other backup reset methods available, do not halt
    here so that other reset methods can be tried.
    
    Signed-off-by: Andrew Davis <afd@ti.com>
    Reviewed-by: Dhruva Gole <d-gole@ti.com>
    Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20240610142836.168603-5-afd@ti.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

power: supply: axp20x_battery: Remove design from min and max voltage [+ + +]
Author: Chris Morgan <macromorgan@hotmail.com>
Date:   Wed Aug 21 16:54:43 2024 -0500

    power: supply: axp20x_battery: Remove design from min and max voltage
    
    [ Upstream commit 61978807b00f8a1817b0e5580981af1cd2f428a5 ]
    
    The POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN and
    POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN values should be immutable
    properties of the battery, but for this driver they are writable values
    and used as the minimum and maximum values for charging. Remove the
    DESIGN designation from these values.
    
    Fixes: 46c202b5f25f ("power: supply: add battery driver for AXP20X and AXP22X PMICs")
    Suggested-by: Chen-Yu Tsai <wens@kernel.org>
    Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
    Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20240821215456.962564-3-macroalpha82@gmail.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

power: supply: hwmon: Fix missing temp1_max_alarm attribute [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sun Sep 8 20:53:37 2024 +0200

    power: supply: hwmon: Fix missing temp1_max_alarm attribute
    
    commit e50a57d16f897e45de1112eb6478577b197fab52 upstream.
    
    Temp channel 0 aka temp1 can have a temp1_max_alarm attribute for
    power_supply devices which have a POWER_SUPPLY_PROP_TEMP_ALERT_MAX
    property.
    
    HWMON_T_MAX_ALARM was missing from power_supply_hwmon_info for
    temp channel 0, causing the hwmon temp1_max_alarm attribute to be
    missing from such power_supply devices.
    
    Add this to power_supply_hwmon_info to fix this.
    
    Fixes: f1d33ae806ec ("power: supply: remove duplicated argument in power_supply_hwmon_info")
    Cc: stable@vger.kernel.org
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240908185337.103696-2-hdegoede@redhat.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

power: supply: max17042_battery: Fix SOC threshold calc w/ no current sense [+ + +]
Author: Artur Weber <aweber.kernel@gmail.com>
Date:   Sat Aug 17 12:51:14 2024 +0200

    power: supply: max17042_battery: Fix SOC threshold calc w/ no current sense
    
    [ Upstream commit 3a3acf839b2cedf092bdd1ff65b0e9895df1656b ]
    
    Commit 223a3b82834f ("power: supply: max17042_battery: use VFSOC for
    capacity when no rsns") made it so that capacity on systems without
    current sensing would be read from VFSOC instead of RepSOC. However,
    the SOC threshold calculation still read RepSOC to get the SOC
    regardless of the current sensing option state.
    
    Fix this by applying the same conditional to determine which register
    should be read.
    
    This also seems to be the intended behavior as per the datasheet - SOC
    alert config value in MiscCFG on setups without current sensing is set
    to a value of 0b11, indicating SOC alerts being generated based on
    VFSOC, instead of 0b00 which indicates SOC alerts being generated based
    on RepSOC.
    
    This fixes an issue on the Galaxy S3/Midas boards, where the alert
    interrupt would be constantly retriggered, causing high CPU usage
    on idle (around ~12%-15%).
    
    Fixes: e5f3872d2044 ("max17042: Add support for signalling change in SOC")
    Signed-off-by: Artur Weber <aweber.kernel@gmail.com>
    Reviewed-by: Henrik Grimler <henrik@grimler.se>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20240817-max17042-soc-threshold-fix-v1-1-72b45899c3cc@gmail.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powercap: RAPL: fix invalid initialization for pl4_supported field [+ + +]
Author: Sumeet Pawnikar <sumeet.r.pawnikar@intel.com>
Date:   Thu Jun 8 08:00:06 2023 +0530

    powercap: RAPL: fix invalid initialization for pl4_supported field
    
    commit d05b5e0baf424c8c4b4709ac11f66ab726c8deaf upstream.
    
    The current initialization of the struct x86_cpu_id via
    pl4_support_ids[] is partial and wrong. It is initializing
    "stepping" field with "X86_FEATURE_ANY" instead of "feature" field.
    
    Use X86_MATCH_INTEL_FAM6_MODEL macro instead of initializing
    each field of the struct x86_cpu_id for pl4_supported list of CPUs.
    This X86_MATCH_INTEL_FAM6_MODEL macro internally uses another macro
    X86_MATCH_VENDOR_FAM_MODEL_FEATURE for X86 based CPU matching with
    appropriate initialized values.
    
    Reported-by: Dave Hansen <dave.hansen@intel.com>
    Link: https://lore.kernel.org/lkml/28ead36b-2d9e-1a36-6f4e-04684e420260@intel.com
    Fixes: eb52bc2ae5b8 ("powercap: RAPL: Add Power Limit4 support for Meteor Lake SoC")
    Fixes: b08b95cf30f5 ("powercap: RAPL: Add Power Limit4 support for Alder Lake-N and Raptor Lake-P")
    Fixes: 515755906921 ("powercap: RAPL: Add Power Limit4 support for RaptorLake")
    Fixes: 1cc5b9a411e4 ("powercap: Add Power Limit4 support for Alder Lake SoC")
    Fixes: 8365a898fe53 ("powercap: Add Power Limit4 support")
    Signed-off-by: Sumeet Pawnikar <sumeet.r.pawnikar@intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    [ Ricardo: I only kept TIGERLAKE, ALDERLAKE, and ALDERLAKE_L in
      pl4_support_ids as only these models are enumerated before this
      changeset. ]
    Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc/32: Remove 'noltlbs' kernel parameter [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Tue Jun 14 12:32:24 2022 +0200

    powerpc/32: Remove 'noltlbs' kernel parameter
    
    [ Upstream commit 56e54b4e6c477b2a7df43f9a320ae5f9a5bfb16c ]
    
    Mapping without large TLBs has no added value on the 8xx.
    
    Mapping without large TLBs is still necessary on 40x when
    selecting CONFIG_KFENCE or CONFIG_DEBUG_PAGEALLOC or
    CONFIG_STRICT_KERNEL_RWX, but this is done automatically
    and doesn't require user selection.
    
    Remove 'noltlbs' kernel parameter, the user has no reason
    to use it.
    
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/80ca17bd39cf608a8ebd0764d7064a498e131199.1655202721.git.christophe.leroy@csgroup.eu
    Stable-dep-of: f9f2bff64c2f ("powerpc/8xx: Fix initial memory mapping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powerpc/32: Remove the 'nobats' kernel parameter [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Tue Jun 14 12:32:23 2022 +0200

    powerpc/32: Remove the 'nobats' kernel parameter
    
    [ Upstream commit 1ce844973bb516e95d3f2bcb001a3992548def9d ]
    
    Mapping without BATs doesn't bring any added value to the user.
    
    Remove that option.
    
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/6977314c823cfb728bc0273cea634b41807bfb64.1655202721.git.christophe.leroy@csgroup.eu
    Stable-dep-of: f9f2bff64c2f ("powerpc/8xx: Fix initial memory mapping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/8xx: Fix initial memory mapping [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Tue Aug 20 19:23:45 2024 +0200

    powerpc/8xx: Fix initial memory mapping
    
    [ Upstream commit f9f2bff64c2f0dbee57be3d8c2741357ad3d05e6 ]
    
    Commit cf209951fa7f ("powerpc/8xx: Map linear memory with huge pages")
    introduced an initial mapping of kernel TEXT using PAGE_KERNEL_TEXT,
    but the pages that contain kernel TEXT may also contain kernel RODATA,
    and depending on selected debug options PAGE_KERNEL_TEXT may be either
    RWX or ROX. RODATA must be writable during init because it also
    contains ro_after_init data.
    
    So use PAGE_KERNEL_X instead to be sure it is RWX.
    
    Fixes: cf209951fa7f ("powerpc/8xx: Map linear memory with huge pages")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/dac7a828d8497c4548c91840575a706657baa4f1.1724173828.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powerpc/8xx: Fix kernel vs user address comparison [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Tue Aug 20 19:23:46 2024 +0200

    powerpc/8xx: Fix kernel vs user address comparison
    
    [ Upstream commit 65a82e117ffeeab0baf6f871a1cab11a28ace183 ]
    
    Since commit 9132a2e82adc ("powerpc/8xx: Define a MODULE area below
    kernel text"), module exec space is below PAGE_OFFSET so not only
    space above PAGE_OFFSET, but space above TASK_SIZE need to be seen
    as kernel space.
    
    Until now the problem went undetected because by default TASK_SIZE
    is 0x8000000 which means address space is determined by just
    checking upper address bit. But when TASK_SIZE is over 0x80000000,
    PAGE_OFFSET is used for comparison, leading to thinking module
    addresses are part of user space.
    
    Fix it by using TASK_SIZE instead of PAGE_OFFSET for address
    comparison.
    
    Fixes: 9132a2e82adc ("powerpc/8xx: Define a MODULE area below kernel text")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/3f574c9845ff0a023b46cb4f38d2c45aecd769bd.1724173828.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/mm: Fix boot warning with hugepages and CONFIG_DEBUG_VIRTUAL [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Thu Aug 8 09:05:08 2024 +0200

    powerpc/mm: Fix boot warning with hugepages and CONFIG_DEBUG_VIRTUAL
    
    [ Upstream commit e7e846dc6c73fbc94ae8b4ec20d05627646416f2 ]
    
    Booting with CONFIG_DEBUG_VIRTUAL leads to following warning when
    passing hugepage reservation on command line:
    
      Kernel command line: hugepagesz=1g hugepages=1 hugepagesz=64m hugepages=1 hugepagesz=256m hugepages=1 noreboot
      HugeTLB: allocating 1 of page size 1.00 GiB failed.  Only allocated 0 hugepages.
      ------------[ cut here ]------------
      WARNING: CPU: 0 PID: 0 at arch/powerpc/include/asm/io.h:948 __alloc_bootmem_huge_page+0xd4/0x284
      Modules linked in:
      CPU: 0 PID: 0 Comm: swapper Not tainted 6.10.0-rc6-00396-g6b0e82791bd0-dirty #936
      Hardware name: MPC8544DS e500v2 0x80210030 MPC8544 DS
      NIP:  c1020240 LR: c10201d0 CTR: 00000000
      REGS: c13fdd30 TRAP: 0700   Not tainted  (6.10.0-rc6-00396-g6b0e82791bd0-dirty)
      MSR:  00021000 <CE,ME>  CR: 44084288  XER: 20000000
    
      GPR00: c10201d0 c13fde20 c130b560 e8000000 e8001000 00000000 00000000 c1420000
      GPR08: 00000000 00028001 00000000 00000004 44084282 01066ac0 c0eb7c9c efffe149
      GPR16: c0fc4228 0000005f ffffffff c0eb7d0c c0eb7cc0 c0eb7ce0 ffffffff 00000000
      GPR24: c1441cec efffe153 e8001000 c14240c0 00000000 c1441d64 00000000 e8000000
      NIP [c1020240] __alloc_bootmem_huge_page+0xd4/0x284
      LR [c10201d0] __alloc_bootmem_huge_page+0x64/0x284
      Call Trace:
      [c13fde20] [c10201d0] __alloc_bootmem_huge_page+0x64/0x284 (unreliable)
      [c13fde50] [c10207b8] hugetlb_hstate_alloc_pages+0x8c/0x3e8
      [c13fdeb0] [c1021384] hugepages_setup+0x240/0x2cc
      [c13fdef0] [c1000574] unknown_bootoption+0xfc/0x280
      [c13fdf30] [c0078904] parse_args+0x200/0x4c4
      [c13fdfa0] [c1000d9c] start_kernel+0x238/0x7d0
      [c13fdff0] [c0000434] set_ivor+0x12c/0x168
      Code: 554aa33e 7c042840 3ce0c142 80a7427c 5109a016 50caa016 7c9a2378 7fdcf378 4180000c 7c052040 41810160 7c095040 <0fe00000> 38c00000 40800108 3c60c0eb
      ---[ end trace 0000000000000000 ]---
    
    This is due to virt_addr_valid() using high_memory before it is set.
    
    high_memory is set in mem_init() using max_low_pfn, but max_low_pfn
    is available long before, it is set in mem_topology_setup(). So just
    like commit daa9ada2093e ("powerpc/mm: Fix boot crash with FLATMEM")
    moved the setting of max_mapnr immediately after the call to
    mem_topology_setup(), the same can be done for high_memory.
    
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/62b69c4baad067093f39e7e60df0fe27a86b8d2a.1723100702.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ppp: do not assume bh is held in ppp_channel_bridge_input() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Sep 27 07:45:53 2024 +0000

    ppp: do not assume bh is held in ppp_channel_bridge_input()
    
    [ Upstream commit aec7291003df78cb71fd461d7b672912bde55807 ]
    
    Networking receive path is usually handled from BH handler.
    However, some protocols need to acquire the socket lock, and
    packets might be stored in the socket backlog is the socket was
    owned by a user process.
    
    In this case, release_sock(), __release_sock(), and sk_backlog_rcv()
    might call the sk->sk_backlog_rcv() handler in process context.
    
    sybot caught ppp was not considering this case in
    ppp_channel_bridge_input() :
    
    WARNING: inconsistent lock state
    6.11.0-rc7-syzkaller-g5f5673607153 #0 Not tainted
    --------------------------------
    inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
    ksoftirqd/1/24 [HC0[0]:SC1[1]:HE1:SE0] takes:
     ffff0000db7f11e0 (&pch->downl){+.?.}-{2:2}, at: spin_lock include/linux/spinlock.h:351 [inline]
     ffff0000db7f11e0 (&pch->downl){+.?.}-{2:2}, at: ppp_channel_bridge_input drivers/net/ppp/ppp_generic.c:2272 [inline]
     ffff0000db7f11e0 (&pch->downl){+.?.}-{2:2}, at: ppp_input+0x16c/0x854 drivers/net/ppp/ppp_generic.c:2304
    {SOFTIRQ-ON-W} state was registered at:
       lock_acquire+0x240/0x728 kernel/locking/lockdep.c:5759
       __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
       _raw_spin_lock+0x48/0x60 kernel/locking/spinlock.c:154
       spin_lock include/linux/spinlock.h:351 [inline]
       ppp_channel_bridge_input drivers/net/ppp/ppp_generic.c:2272 [inline]
       ppp_input+0x16c/0x854 drivers/net/ppp/ppp_generic.c:2304
       pppoe_rcv_core+0xfc/0x314 drivers/net/ppp/pppoe.c:379
       sk_backlog_rcv include/net/sock.h:1111 [inline]
       __release_sock+0x1a8/0x3d8 net/core/sock.c:3004
       release_sock+0x68/0x1b8 net/core/sock.c:3558
       pppoe_sendmsg+0xc8/0x5d8 drivers/net/ppp/pppoe.c:903
       sock_sendmsg_nosec net/socket.c:730 [inline]
       __sock_sendmsg net/socket.c:745 [inline]
       __sys_sendto+0x374/0x4f4 net/socket.c:2204
       __do_sys_sendto net/socket.c:2216 [inline]
       __se_sys_sendto net/socket.c:2212 [inline]
       __arm64_sys_sendto+0xd8/0xf8 net/socket.c:2212
       __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
       invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:49
       el0_svc_common+0x130/0x23c arch/arm64/kernel/syscall.c:132
       do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:151
       el0_svc+0x54/0x168 arch/arm64/kernel/entry-common.c:712
       el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:730
       el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
    irq event stamp: 282914
     hardirqs last  enabled at (282914): [<ffff80008b42e30c>] __raw_spin_unlock_irqrestore include/linux/spinlock_api_smp.h:151 [inline]
     hardirqs last  enabled at (282914): [<ffff80008b42e30c>] _raw_spin_unlock_irqrestore+0x38/0x98 kernel/locking/spinlock.c:194
     hardirqs last disabled at (282913): [<ffff80008b42e13c>] __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:108 [inline]
     hardirqs last disabled at (282913): [<ffff80008b42e13c>] _raw_spin_lock_irqsave+0x2c/0x7c kernel/locking/spinlock.c:162
     softirqs last  enabled at (282904): [<ffff8000801f8e88>] softirq_handle_end kernel/softirq.c:400 [inline]
     softirqs last  enabled at (282904): [<ffff8000801f8e88>] handle_softirqs+0xa3c/0xbfc kernel/softirq.c:582
     softirqs last disabled at (282909): [<ffff8000801fbdf8>] run_ksoftirqd+0x70/0x158 kernel/softirq.c:928
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(&pch->downl);
      <Interrupt>
        lock(&pch->downl);
    
     *** DEADLOCK ***
    
    1 lock held by ksoftirqd/1/24:
      #0: ffff80008f74dfa0 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire+0x10/0x4c include/linux/rcupdate.h:325
    
    stack backtrace:
    CPU: 1 UID: 0 PID: 24 Comm: ksoftirqd/1 Not tainted 6.11.0-rc7-syzkaller-g5f5673607153 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
    Call trace:
      dump_backtrace+0x1b8/0x1e4 arch/arm64/kernel/stacktrace.c:319
      show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:326
      __dump_stack lib/dump_stack.c:93 [inline]
      dump_stack_lvl+0xe4/0x150 lib/dump_stack.c:119
      dump_stack+0x1c/0x28 lib/dump_stack.c:128
      print_usage_bug+0x698/0x9ac kernel/locking/lockdep.c:4000
     mark_lock_irq+0x980/0xd2c
      mark_lock+0x258/0x360 kernel/locking/lockdep.c:4677
      __lock_acquire+0xf48/0x779c kernel/locking/lockdep.c:5096
      lock_acquire+0x240/0x728 kernel/locking/lockdep.c:5759
      __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
      _raw_spin_lock+0x48/0x60 kernel/locking/spinlock.c:154
      spin_lock include/linux/spinlock.h:351 [inline]
      ppp_channel_bridge_input drivers/net/ppp/ppp_generic.c:2272 [inline]
      ppp_input+0x16c/0x854 drivers/net/ppp/ppp_generic.c:2304
      ppp_async_process+0x98/0x150 drivers/net/ppp/ppp_async.c:495
      tasklet_action_common+0x318/0x3f4 kernel/softirq.c:785
      tasklet_action+0x68/0x8c kernel/softirq.c:811
      handle_softirqs+0x2e4/0xbfc kernel/softirq.c:554
      run_ksoftirqd+0x70/0x158 kernel/softirq.c:928
      smpboot_thread_fn+0x4b0/0x90c kernel/smpboot.c:164
      kthread+0x288/0x310 kernel/kthread.c:389
      ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:860
    
    Fixes: 4cf476ced45d ("ppp: add PPPIOCBRIDGECHAN and PPPIOCUNBRIDGECHAN ioctls")
    Reported-by: syzbot+bd8d55ee2acd0a71d8ce@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/66f661e2.050a0220.38ace9.000f.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Tom Parkin <tparkin@katalix.com>
    Cc: James Chapman <jchapman@katalix.com>
    Link: https://patch.msgid.link/20240927074553.341910-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ppp: fix ppp_async_encode() illegal access [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Oct 9 18:58:02 2024 +0000

    ppp: fix ppp_async_encode() illegal access
    
    [ Upstream commit 40dddd4b8bd08a69471efd96107a4e1c73fabefc ]
    
    syzbot reported an issue in ppp_async_encode() [1]
    
    In this case, pppoe_sendmsg() is called with a zero size.
    Then ppp_async_encode() is called with an empty skb.
    
    BUG: KMSAN: uninit-value in ppp_async_encode drivers/net/ppp/ppp_async.c:545 [inline]
     BUG: KMSAN: uninit-value in ppp_async_push+0xb4f/0x2660 drivers/net/ppp/ppp_async.c:675
      ppp_async_encode drivers/net/ppp/ppp_async.c:545 [inline]
      ppp_async_push+0xb4f/0x2660 drivers/net/ppp/ppp_async.c:675
      ppp_async_send+0x130/0x1b0 drivers/net/ppp/ppp_async.c:634
      ppp_channel_bridge_input drivers/net/ppp/ppp_generic.c:2280 [inline]
      ppp_input+0x1f1/0xe60 drivers/net/ppp/ppp_generic.c:2304
      pppoe_rcv_core+0x1d3/0x720 drivers/net/ppp/pppoe.c:379
      sk_backlog_rcv+0x13b/0x420 include/net/sock.h:1113
      __release_sock+0x1da/0x330 net/core/sock.c:3072
      release_sock+0x6b/0x250 net/core/sock.c:3626
      pppoe_sendmsg+0x2b8/0xb90 drivers/net/ppp/pppoe.c:903
      sock_sendmsg_nosec net/socket.c:729 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:744
      ____sys_sendmsg+0x903/0xb60 net/socket.c:2602
      ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2656
      __sys_sendmmsg+0x3c1/0x960 net/socket.c:2742
      __do_sys_sendmmsg net/socket.c:2771 [inline]
      __se_sys_sendmmsg net/socket.c:2768 [inline]
      __x64_sys_sendmmsg+0xbc/0x120 net/socket.c:2768
      x64_sys_call+0xb6e/0x3ba0 arch/x86/include/generated/asm/syscalls_64.h:308
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:4092 [inline]
      slab_alloc_node mm/slub.c:4135 [inline]
      kmem_cache_alloc_node_noprof+0x6bf/0xb80 mm/slub.c:4187
      kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:587
      __alloc_skb+0x363/0x7b0 net/core/skbuff.c:678
      alloc_skb include/linux/skbuff.h:1322 [inline]
      sock_wmalloc+0xfe/0x1a0 net/core/sock.c:2732
      pppoe_sendmsg+0x3a7/0xb90 drivers/net/ppp/pppoe.c:867
      sock_sendmsg_nosec net/socket.c:729 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:744
      ____sys_sendmsg+0x903/0xb60 net/socket.c:2602
      ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2656
      __sys_sendmmsg+0x3c1/0x960 net/socket.c:2742
      __do_sys_sendmmsg net/socket.c:2771 [inline]
      __se_sys_sendmmsg net/socket.c:2768 [inline]
      __x64_sys_sendmmsg+0xbc/0x120 net/socket.c:2768
      x64_sys_call+0xb6e/0x3ba0 arch/x86/include/generated/asm/syscalls_64.h:308
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 1 UID: 0 PID: 5411 Comm: syz.1.14 Not tainted 6.12.0-rc1-syzkaller-00165-g360c1f1f24c6 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: syzbot+1d121645899e7692f92a@syzkaller.appspotmail.com
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241009185802.3763282-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pps: add an error check in parport_attach [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Wed Aug 28 21:18:14 2024 +0800

    pps: add an error check in parport_attach
    
    [ Upstream commit 62c5a01a5711c8e4be8ae7b6f0db663094615d48 ]
    
    In parport_attach, the return value of ida_alloc is unchecked, witch leads
    to the use of an invalid index value.
    
    To address this issue, index should be checked. When the index value is
    abnormal, the device should be freed.
    
    Found by code review, compile tested only.
    
    Cc: stable@vger.kernel.org
    Fixes: fb56d97df70e ("pps: client: use new parport device model")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Acked-by: Rodolfo Giometti <giometti@enneenne.com>
    Link: https://lore.kernel.org/r/20240828131814.3034338-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pps: remove usage of the deprecated ida_simple_xx() API [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Apr 14 12:10:17 2024 +0200

    pps: remove usage of the deprecated ida_simple_xx() API
    
    [ Upstream commit 55dbc5b5174d0e7d1fa397d05aa4cb145e8b887e ]
    
    ida_alloc() and ida_free() should be preferred to the deprecated
    ida_simple_get() and ida_simple_remove().
    
    This is less verbose.
    
    Link: https://lkml.kernel.org/r/9f681747d446b874952a892491387d79ffe565a9.1713089394.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Cc: Rodolfo Giometti <giometti@enneenne.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 62c5a01a5711 ("pps: add an error check in parport_attach")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
proc: add config & param to block forcing mem writes [+ + +]
Author: Adrian Ratiu <adrian.ratiu@collabora.com>
Date:   Fri Aug 2 11:02:25 2024 +0300

    proc: add config & param to block forcing mem writes
    
    [ Upstream commit 41e8149c8892ed1962bd15350b3c3e6e90cba7f4 ]
    
    This adds a Kconfig option and boot param to allow removing
    the FOLL_FORCE flag from /proc/pid/mem write calls because
    it can be abused.
    
    The traditional forcing behavior is kept as default because
    it can break GDB and some other use cases.
    
    Previously we tried a more sophisticated approach allowing
    distributions to fine-tune /proc/pid/mem behavior, however
    that got NAK-ed by Linus [1], who prefers this simpler
    approach with semantics also easier to understand for users.
    
    Link: https://lore.kernel.org/lkml/CAHk-=wiGWLChxYmUA5HrT5aopZrB7_2VTa0NLZcxORgkUe5tEQ@mail.gmail.com/ [1]
    Cc: Doug Anderson <dianders@chromium.org>
    Cc: Jeff Xu <jeffxu@google.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Christian Brauner <brauner@kernel.org>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
    Link: https://lore.kernel.org/r/20240802080225.89408-1-adrian.ratiu@collabora.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
r8169: add tally counter fields added with RTL8125 [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Tue Sep 17 23:04:46 2024 +0200

    r8169: add tally counter fields added with RTL8125
    
    [ Upstream commit ced8e8b8f40accfcce4a2bbd8b150aa76d5eff9a ]
    
    RTL8125 added fields to the tally counter, what may result in the chip
    dma'ing these new fields to unallocated memory. Therefore make sure
    that the allocated memory area is big enough to hold all of the
    tally counter values, even if we use only parts of it.
    
    Fixes: f1bce4ad2f1c ("r8169: add support for RTL8125")
    Cc: stable@vger.kernel.org
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/741d26a9-2b2b-485d-91d9-ecb302e345b5@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

r8169: disable ALDPS per default for RTL8125 [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Wed Sep 11 15:51:11 2024 +0200

    r8169: disable ALDPS per default for RTL8125
    
    [ Upstream commit b9c7ac4fe22c608acf6153a3329df2b6b6cd416c ]
    
    En-Wei reported that traffic breaks if cable is unplugged for more
    than 3s and then re-plugged. This was supposed to be fixed by
    621735f59064 ("r8169: fix rare issue with broken rx after link-down on
    RTL8125"). But apparently this didn't fix the issue for everybody.
    The 3s threshold rang a bell, as this is the delay after which ALDPS
    kicks in. And indeed disabling ALDPS fixes the issue for this user.
    Maybe this fixes the issue in general. In a follow-up step we could
    remove the first fix attempt and see whether anybody complains.
    
    Fixes: f1bce4ad2f1c ("r8169: add support for RTL8125")
    Tested-by: En-Wei WU <en-wei.wu@canonical.com>
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://patch.msgid.link/778b9d86-05c4-4856-be59-cde4487b9e52@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

r8169: Fix spelling mistake: "tx_underun" -> "tx_underrun" [+ + +]
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Mon Sep 9 15:00:21 2024 +0100

    r8169: Fix spelling mistake: "tx_underun" -> "tx_underrun"
    
    [ Upstream commit 8df9439389a44fb2cc4ef695e08d6a8870b1616c ]
    
    There is a spelling mistake in the struct field tx_underun, rename
    it to tx_underrun.
    
    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://patch.msgid.link/20240909140021.64884-1-colin.i.king@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: ced8e8b8f40a ("r8169: add tally counter fields added with RTL8125")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rcuscale: Provide clear error when async specified without primitives [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Thu Aug 1 17:43:03 2024 -0700

    rcuscale: Provide clear error when async specified without primitives
    
    [ Upstream commit 11377947b5861fa59bf77c827e1dd7c081842cc9 ]
    
    Currently, if the rcuscale module's async module parameter is specified
    for RCU implementations that do not have async primitives such as RCU
    Tasks Rude (which now lacks a call_rcu_tasks_rude() function), there
    will be a series of splats due to calls to a NULL pointer.  This commit
    therefore warns of this situation, but switches to non-async testing.
    
    Signed-off-by: "Paul E. McKenney" <paulmck@kernel.org>
    Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/cxgb4: Added NULL check for lookup_atid [+ + +]
Author: Mikhail Lobanov <m.lobanov@rosalinux.ru>
Date:   Thu Sep 12 10:58:39 2024 -0400

    RDMA/cxgb4: Added NULL check for lookup_atid
    
    [ Upstream commit e766e6a92410ca269161de059fff0843b8ddd65f ]
    
    The lookup_atid() function can return NULL if the ATID is
    invalid or does not exist in the identifier table, which
    could lead to dereferencing a null pointer without a
    check in the `act_establish()` and `act_open_rpl()` functions.
    Add a NULL check to prevent null pointer dereferencing.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: cfdda9d76436 ("RDMA/cxgb4: Add driver for Chelsio T4 RNIC")
    Signed-off-by: Mikhail Lobanov <m.lobanov@rosalinux.ru>
    Link: https://patch.msgid.link/20240912145844.77516-1-m.lobanov@rosalinux.ru
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/hns: Don't modify rq next block addr in HIP09 QPC [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Fri Sep 6 17:34:36 2024 +0800

    RDMA/hns: Don't modify rq next block addr in HIP09 QPC
    
    [ Upstream commit 6928d264e328e0cb5ee7663003a6e46e4cba0a7e ]
    
    The field 'rq next block addr' in QPC can be updated by driver only
    on HIP08. On HIP09 HW updates this field while driver is not allowed.
    
    Fixes: 926a01dc000d ("RDMA/hns: Add QP operations support for hip08 SoC")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20240906093444.3571619-2-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix spin_unlock_irqrestore() called with IRQs enabled [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Fri Sep 6 17:34:40 2024 +0800

    RDMA/hns: Fix spin_unlock_irqrestore() called with IRQs enabled
    
    [ Upstream commit 74d315b5af180220d561684d15897730135733a6 ]
    
    Fix missuse of spin_lock_irq()/spin_unlock_irq() when
    spin_lock_irqsave()/spin_lock_irqrestore() was hold.
    
    This was discovered through the lock debugging, and the corresponding
    log is as follows:
    
    raw_local_irq_restore() called with IRQs enabled
    WARNING: CPU: 96 PID: 2074 at kernel/locking/irqflag-debug.c:10 warn_bogus_irq_restore+0x30/0x40
    ...
    Call trace:
     warn_bogus_irq_restore+0x30/0x40
     _raw_spin_unlock_irqrestore+0x84/0xc8
     add_qp_to_list+0x11c/0x148 [hns_roce_hw_v2]
     hns_roce_create_qp_common.constprop.0+0x240/0x780 [hns_roce_hw_v2]
     hns_roce_create_qp+0x98/0x160 [hns_roce_hw_v2]
     create_qp+0x138/0x258
     ib_create_qp_kernel+0x50/0xe8
     create_mad_qp+0xa8/0x128
     ib_mad_port_open+0x218/0x448
     ib_mad_init_device+0x70/0x1f8
     add_client_context+0xfc/0x220
     enable_device_and_get+0xd0/0x140
     ib_register_device.part.0+0xf4/0x1c8
     ib_register_device+0x34/0x50
     hns_roce_register_device+0x174/0x3d0 [hns_roce_hw_v2]
     hns_roce_init+0xfc/0x2c0 [hns_roce_hw_v2]
     __hns_roce_hw_v2_init_instance+0x7c/0x1d0 [hns_roce_hw_v2]
     hns_roce_hw_v2_init_instance+0x9c/0x180 [hns_roce_hw_v2]
    
    Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20240906093444.3571619-6-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix the overflow risk of hem_list_calc_ba_range() [+ + +]
Author: wenglianfa <wenglianfa@huawei.com>
Date:   Fri Sep 6 17:34:39 2024 +0800

    RDMA/hns: Fix the overflow risk of hem_list_calc_ba_range()
    
    [ Upstream commit d586628b169d14bbf36be64d2b3ec9d9d2fe0432 ]
    
    The max value of 'unit' and 'hop_num' is 2^24 and 2, so the value of
    'step' may exceed the range of u32. Change the type of 'step' to u64.
    
    Fixes: 38389eaa4db1 ("RDMA/hns: Add mtr support for mixed multihop addressing")
    Signed-off-by: wenglianfa <wenglianfa@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20240906093444.3571619-5-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix the wrong type of return value of the interrupt handler [+ + +]
Author: Haoyue Xu <xuhaoyue1@hisilicon.com>
Date:   Thu Jul 14 21:43:50 2022 +0800

    RDMA/hns: Fix the wrong type of return value of the interrupt handler
    
    [ Upstream commit d95e0a0c6c9602ff6bb90c1c20987b204493d8e1 ]
    
    The type of return value of the interrupt handler should be irqreturn_t.
    
    Link: https://lore.kernel.org/r/20220714134353.16700-3-liangwenpeng@huawei.com
    Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
    Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: 4321feefa550 ("RDMA/hns: Fix VF triggering PF reset in abnormal interrupt handler")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix UAF for cq async event [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Fri Oct 11 18:22:15 2024 +0800

    RDMA/hns: Fix UAF for cq async event
    
    [ Upstream commit a942ec2745ca864cd8512142100e4027dc306a42 ]
    
    The refcount of CQ is not protected by locks. When CQ asynchronous
    events and CQ destruction are concurrent, CQ may have been released,
    which will cause UAF.
    
    Use the xa_lock() to protect the CQ refcount.
    
    Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://lore.kernel.org/r/20240412091616.370789-6-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Haixiao Yan <haixiao.yan.cn@windriver.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix VF triggering PF reset in abnormal interrupt handler [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Fri Sep 6 17:34:41 2024 +0800

    RDMA/hns: Fix VF triggering PF reset in abnormal interrupt handler
    
    [ Upstream commit 4321feefa5501a746ebf6a7d8b59e6b955ae1860 ]
    
    In abnormal interrupt handler, a PF reset will be triggered even if
    the device is a VF. It should be a VF reset.
    
    Fixes: 2b9acb9a97fe ("RDMA/hns: Add the process of AEQ overflow for hip08")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20240906093444.3571619-7-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Optimize hem allocation performance [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Fri Sep 6 17:34:43 2024 +0800

    RDMA/hns: Optimize hem allocation performance
    
    [ Upstream commit fe51f6254d81f5a69c31df16353d6539b2b51630 ]
    
    When allocating MTT hem, for each hop level of each hem that is being
    allocated, the driver iterates the hem list to find out whether the
    bt page has been allocated in this hop level. If not, allocate a new
    one and splice it to the list. The time complexity is O(n^2) in worst
    cases.
    
    Currently the allocation for-loop uses 'unit' as the step size. This
    actually has taken into account the reuse of last-hop-level MTT bt
    pages by multiple buffer pages. Thus pages of last hop level will
    never have been allocated, so there is no need to iterate the hem list
    in last hop level.
    
    Removing this unnecessary iteration can reduce the time complexity to
    O(n).
    
    Fixes: 38389eaa4db1 ("RDMA/hns: Add mtr support for mixed multihop addressing")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20240906093444.3571619-9-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Refactor the abnormal interrupt handler function [+ + +]
Author: Haoyue Xu <xuhaoyue1@hisilicon.com>
Date:   Thu Jul 14 21:43:52 2022 +0800

    RDMA/hns: Refactor the abnormal interrupt handler function
    
    [ Upstream commit 75e4e716f7089558fda4ddc660fa8dbdec4eb1d3 ]
    
    Use a single function to handle the same kind of abnormal interrupts.
    
    Link: https://lore.kernel.org/r/20220714134353.16700-5-liangwenpeng@huawei.com
    Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
    Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: 4321feefa550 ("RDMA/hns: Fix VF triggering PF reset in abnormal interrupt handler")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Remove unused abnormal interrupt of type RAS [+ + +]
Author: Haoyue Xu <xuhaoyue1@hisilicon.com>
Date:   Thu Jul 14 21:43:49 2022 +0800

    RDMA/hns: Remove unused abnormal interrupt of type RAS
    
    [ Upstream commit f5c25465b4f7d3badcaa5bf4a6f82f5763865b19 ]
    
    The HNS NIC driver receives and handles the abnormal interrupt of the RAS
    type generated by ROCEE, and the HNS RDMA driver does not need to handle
    this type of interrupt. Therefore, delete unused codes in the HNS RDMA
    driver.
    
    Link: https://lore.kernel.org/r/20220714134353.16700-2-liangwenpeng@huawei.com
    Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
    Signed-off-by: Wenpeng Liang <liangwenpeng@huawei.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: 4321feefa550 ("RDMA/hns: Fix VF triggering PF reset in abnormal interrupt handler")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/irdma: fix error message in irdma_modify_qp_roce() [+ + +]
Author: Vitaliy Shevtsov <v.shevtsov@maxima.ru>
Date:   Mon Sep 16 21:58:05 2024 +0500

    RDMA/irdma: fix error message in irdma_modify_qp_roce()
    
    [ Upstream commit 9f0eafe86ea0a589676209d0cff1a1ed49a037d3 ]
    
    Use a correct field max_dest_rd_atomic instead of max_rd_atomic for the
    error output.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    Fixes: b48c24c2d710 ("RDMA/irdma: Implement device supported verb APIs")
    Signed-off-by: Vitaliy Shevtsov <v.shevtsov@maxima.ru>
    Link: https://lore.kernel.org/stable/20240916165817.14691-1-v.shevtsov%40maxima.ru
    Link: https://patch.msgid.link/20240916165817.14691-1-v.shevtsov@maxima.ru
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/iwcm: Fix WARNING:at_kernel/workqueue.c:#check_flush_dependency [+ + +]
Author: Zhu Yanjun <yanjun.zhu@linux.dev>
Date:   Tue Aug 20 13:33:36 2024 +0200

    RDMA/iwcm: Fix WARNING:at_kernel/workqueue.c:#check_flush_dependency
    
    [ Upstream commit 86dfdd8288907f03c18b7fb462e0e232c4f98d89 ]
    
    In the commit aee2424246f9 ("RDMA/iwcm: Fix a use-after-free related to
    destroying CM IDs"), the function flush_workqueue is invoked to flush the
    work queue iwcm_wq.
    
    But at that time, the work queue iwcm_wq was created via the function
    alloc_ordered_workqueue without the flag WQ_MEM_RECLAIM.
    
    Because the current process is trying to flush the whole iwcm_wq, if
    iwcm_wq doesn't have the flag WQ_MEM_RECLAIM, verify that the current
    process is not reclaiming memory or running on a workqueue which doesn't
    have the flag WQ_MEM_RECLAIM as that can break forward-progress guarantee
    leading to a deadlock.
    
    The call trace is as below:
    
    [  125.350876][ T1430] Call Trace:
    [  125.356281][ T1430]  <TASK>
    [ 125.361285][ T1430] ? __warn (kernel/panic.c:693)
    [ 125.367640][ T1430] ? check_flush_dependency (kernel/workqueue.c:3706 (discriminator 9))
    [ 125.375689][ T1430] ? report_bug (lib/bug.c:180 lib/bug.c:219)
    [ 125.382505][ T1430] ? handle_bug (arch/x86/kernel/traps.c:239)
    [ 125.388987][ T1430] ? exc_invalid_op (arch/x86/kernel/traps.c:260 (discriminator 1))
    [ 125.395831][ T1430] ? asm_exc_invalid_op (arch/x86/include/asm/idtentry.h:621)
    [ 125.403125][ T1430] ? check_flush_dependency (kernel/workqueue.c:3706 (discriminator 9))
    [ 125.410984][ T1430] ? check_flush_dependency (kernel/workqueue.c:3706 (discriminator 9))
    [ 125.418764][ T1430] __flush_workqueue (kernel/workqueue.c:3970)
    [ 125.426021][ T1430] ? __pfx___might_resched (kernel/sched/core.c:10151)
    [ 125.433431][ T1430] ? destroy_cm_id (drivers/infiniband/core/iwcm.c:375) iw_cm
    [ 125.441209][ T1430] ? __pfx___flush_workqueue (kernel/workqueue.c:3910)
    [ 125.473900][ T1430] ? _raw_spin_lock_irqsave (arch/x86/include/asm/atomic.h:107 include/linux/atomic/atomic-arch-fallback.h:2170 include/linux/atomic/atomic-instrumented.h:1302 include/asm-generic/qspinlock.h:111 include/linux/spinlock.h:187 include/linux/spinlock_api_smp.h:111 kernel/locking/spinlock.c:162)
    [ 125.473909][ T1430] ? __pfx__raw_spin_lock_irqsave (kernel/locking/spinlock.c:161)
    [ 125.482537][ T1430] _destroy_id (drivers/infiniband/core/cma.c:2044) rdma_cm
    [ 125.495072][ T1430] nvme_rdma_free_queue (drivers/nvme/host/rdma.c:656 drivers/nvme/host/rdma.c:650) nvme_rdma
    [ 125.505827][ T1430] nvme_rdma_reset_ctrl_work (drivers/nvme/host/rdma.c:2180) nvme_rdma
    [ 125.505831][ T1430] process_one_work (kernel/workqueue.c:3231)
    [ 125.515122][ T1430] worker_thread (kernel/workqueue.c:3306 kernel/workqueue.c:3393)
    [ 125.515127][ T1430] ? __pfx_worker_thread (kernel/workqueue.c:3339)
    [ 125.531837][ T1430] kthread (kernel/kthread.c:389)
    [ 125.539864][ T1430] ? __pfx_kthread (kernel/kthread.c:342)
    [ 125.550628][ T1430] ret_from_fork (arch/x86/kernel/process.c:147)
    [ 125.558840][ T1430] ? __pfx_kthread (kernel/kthread.c:342)
    [ 125.558844][ T1430] ret_from_fork_asm (arch/x86/entry/entry_64.S:257)
    [  125.566487][ T1430]  </TASK>
    [  125.566488][ T1430] ---[ end trace 0000000000000000 ]---
    
    Fixes: aee2424246f9 ("RDMA/iwcm: Fix a use-after-free related to destroying CM IDs")
    Link: https://patch.msgid.link/r/20240820113336.19860-1-yanjun.zhu@linux.dev
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202408151633.fc01893c-oliver.sang@intel.com
    Tested-by: kernel test robot <oliver.sang@intel.com>
    Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/mad: Improve handling of timed out WRs of mad agent [+ + +]
Author: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Date:   Mon Jul 22 16:33:25 2024 +0530

    RDMA/mad: Improve handling of timed out WRs of mad agent
    
    [ Upstream commit 2a777679b8ccd09a9a65ea0716ef10365179caac ]
    
    Current timeout handler of mad agent acquires/releases mad_agent_priv
    lock for every timed out WRs. This causes heavy locking contention
    when higher no. of WRs are to be handled inside timeout handler.
    
    This leads to softlockup with below trace in some use cases where
    rdma-cm path is used to establish connection between peer nodes
    
    Trace:
    -----
     BUG: soft lockup - CPU#4 stuck for 26s! [kworker/u128:3:19767]
     CPU: 4 PID: 19767 Comm: kworker/u128:3 Kdump: loaded Tainted: G OE
         -------  ---  5.14.0-427.13.1.el9_4.x86_64 #1
     Hardware name: Dell Inc. PowerEdge R740/01YM03, BIOS 2.4.8 11/26/2019
     Workqueue: ib_mad1 timeout_sends [ib_core]
     RIP: 0010:__do_softirq+0x78/0x2ac
     RSP: 0018:ffffb253449e4f98 EFLAGS: 00000246
     RAX: 00000000ffffffff RBX: 0000000000000000 RCX: 000000000000001f
     RDX: 000000000000001d RSI: 000000003d1879ab RDI: fff363b66fd3a86b
     RBP: ffffb253604cbcd8 R08: 0000009065635f3b R09: 0000000000000000
     R10: 0000000000000040 R11: ffffb253449e4ff8 R12: 0000000000000000
     R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000040
     FS:  0000000000000000(0000) GS:ffff8caa1fc80000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007fd9ec9db900 CR3: 0000000891934006 CR4: 00000000007706e0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Call Trace:
      <IRQ>
      ? show_trace_log_lvl+0x1c4/0x2df
      ? show_trace_log_lvl+0x1c4/0x2df
      ? __irq_exit_rcu+0xa1/0xc0
      ? watchdog_timer_fn+0x1b2/0x210
      ? __pfx_watchdog_timer_fn+0x10/0x10
      ? __hrtimer_run_queues+0x127/0x2c0
      ? hrtimer_interrupt+0xfc/0x210
      ? __sysvec_apic_timer_interrupt+0x5c/0x110
      ? sysvec_apic_timer_interrupt+0x37/0x90
      ? asm_sysvec_apic_timer_interrupt+0x16/0x20
      ? __do_softirq+0x78/0x2ac
      ? __do_softirq+0x60/0x2ac
      __irq_exit_rcu+0xa1/0xc0
      sysvec_call_function_single+0x72/0x90
      </IRQ>
      <TASK>
      asm_sysvec_call_function_single+0x16/0x20
     RIP: 0010:_raw_spin_unlock_irq+0x14/0x30
     RSP: 0018:ffffb253604cbd88 EFLAGS: 00000247
     RAX: 000000000001960d RBX: 0000000000000002 RCX: ffff8cad2a064800
     RDX: 000000008020001b RSI: 0000000000000001 RDI: ffff8cad5d39f66c
     RBP: ffff8cad5d39f600 R08: 0000000000000001 R09: 0000000000000000
     R10: ffff8caa443e0c00 R11: ffffb253604cbcd8 R12: ffff8cacb8682538
     R13: 0000000000000005 R14: ffffb253604cbd90 R15: ffff8cad5d39f66c
      cm_process_send_error+0x122/0x1d0 [ib_cm]
      timeout_sends+0x1dd/0x270 [ib_core]
      process_one_work+0x1e2/0x3b0
      ? __pfx_worker_thread+0x10/0x10
      worker_thread+0x50/0x3a0
      ? __pfx_worker_thread+0x10/0x10
      kthread+0xdd/0x100
      ? __pfx_kthread+0x10/0x10
      ret_from_fork+0x29/0x50
      </TASK>
    
    Simplified timeout handler by creating local list of timed out WRs
    and invoke send handler post creating the list. The new method acquires/
    releases lock once to fetch the list and hence helps to reduce locking
    contetiong when processing higher no. of WRs
    
    Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Link: https://lore.kernel.org/r/20240722110325.195085-1-saravanan.vajravel@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rtrs-clt: Reset cid to con_num - 1 to stay in bounds [+ + +]
Author: Md Haris Iqbal <haris.iqbal@ionos.com>
Date:   Wed Aug 21 13:22:12 2024 +0200

    RDMA/rtrs-clt: Reset cid to con_num - 1 to stay in bounds
    
    [ Upstream commit 3e4289b29e216a55d08a89e126bc0b37cbad9f38 ]
    
    In the function init_conns(), after the create_con() and create_cm() for
    loop if something fails. In the cleanup for loop after the destroy tag, we
    access out of bound memory because cid is set to clt_path->s.con_num.
    
    This commits resets the cid to clt_path->s.con_num - 1, to stay in bounds
    in the cleanup loop later.
    
    Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality")
    Signed-off-by: Md Haris Iqbal <haris.iqbal@ionos.com>
    Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
    Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@ionos.com>
    Link: https://patch.msgid.link/20240821112217.41827-7-haris.iqbal@ionos.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rtrs-srv: Avoid null pointer deref during path establishment [+ + +]
Author: Md Haris Iqbal <haris.iqbal@ionos.com>
Date:   Wed Aug 21 13:22:14 2024 +0200

    RDMA/rtrs-srv: Avoid null pointer deref during path establishment
    
    [ Upstream commit d0e62bf7b575fbfe591f6f570e7595dd60a2f5eb ]
    
    For RTRS path establishment, RTRS client initiates and completes con_num
    of connections. After establishing all its connections, the information
    is exchanged between the client and server through the info_req message.
    During this exchange, it is essential that all connections have been
    established, and the state of the RTRS srv path is CONNECTED.
    
    So add these sanity checks, to make sure we detect and abort process in
    error scenarios to avoid null pointer deref.
    
    Signed-off-by: Md Haris Iqbal <haris.iqbal@ionos.com>
    Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
    Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@ionos.com>
    Link: https://patch.msgid.link/20240821112217.41827-9-haris.iqbal@ionos.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rtrs: Reset hb_missed_cnt after receiving other traffic from peer [+ + +]
Author: Jack Wang <jinpu.wang@ionos.com>
Date:   Wed Aug 21 13:22:10 2024 +0200

    RDMA/rtrs: Reset hb_missed_cnt after receiving other traffic from peer
    
    [ Upstream commit 3258cbbd86deaa2675e1799bc3d18bd1ef472641 ]
    
    Reset hb_missed_cnt after receiving traffic from other peer, so
    hb is more robust again high load on host or network.
    
    Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality")
    Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
    Signed-off-by: Md Haris Iqbal <haris.iqbal@ionos.com>
    Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@ionos.com>
    Link: https://patch.msgid.link/20240821112217.41827-5-haris.iqbal@ionos.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rxe: Fix seg fault in rxe_comp_queue_pkt [+ + +]
Author: Bob Pearson <rpearsonhpe@gmail.com>
Date:   Fri Mar 29 09:55:04 2024 -0500

    RDMA/rxe: Fix seg fault in rxe_comp_queue_pkt
    
    commit 2b23b6097303ed0ba5f4bc036a1c07b6027af5c6 upstream.
    
    In rxe_comp_queue_pkt() an incoming response packet skb is enqueued to the
    resp_pkts queue and then a decision is made whether to run the completer
    task inline or schedule it. Finally the skb is dereferenced to bump a 'hw'
    performance counter. This is wrong because if the completer task is
    already running in a separate thread it may have already processed the skb
    and freed it which can cause a seg fault.  This has been observed
    infrequently in testing at high scale.
    
    This patch fixes this by changing the order of enqueuing the packet until
    after the counter is accessed.
    
    Link: https://lore.kernel.org/r/20240329145513.35381-4-rpearsonhpe@gmail.com
    Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
    Fixes: 0b1e5b99a48b ("IB/rxe: Add port protocol stats")
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    [Sherry: bp to fix CVE-2024-38544. Fix conflict due to missing commit:
    dccb23f6c312 ("RDMA/rxe: Split rxe_run_task() into two subroutines")
    which is not necessary to backport]
    Signed-off-by: Sherry Yang <sherry.yang@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
remoteproc: imx_rproc: Correct ddr alias for i.MX8M [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Jul 19 16:36:11 2024 +0800

    remoteproc: imx_rproc: Correct ddr alias for i.MX8M
    
    [ Upstream commit c901f817792822eda9cec23814a4621fa3e66695 ]
    
    The DDR Alias address should be 0x40000000 according to RM, so correct
    it.
    
    Fixes: 4ab8f9607aad ("remoteproc: imx_rproc: support i.MX8MQ/M")
    Reported-by: Terry Lv <terry.lv@nxp.com>
    Reviewed-by: Iuliana Prodan <iuliana.prodan@nxp.com>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Link: https://lore.kernel.org/r/20240719-imx_rproc-v2-1-10d0268c7eb1@nxp.com
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

remoteproc: imx_rproc: Initialize workqueue earlier [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Jul 19 16:36:13 2024 +0800

    remoteproc: imx_rproc: Initialize workqueue earlier
    
    [ Upstream commit 858e57c1d3dd7b92cc0fa692ba130a0a5d57e49d ]
    
    Initialize workqueue before requesting mailbox channel, otherwise if
    mailbox interrupt comes before workqueue ready, the imx_rproc_rx_callback
    will trigger issue.
    
    Fixes: 2df7062002d0 ("remoteproc: imx_proc: enable virtio/mailbox")
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Link: https://lore.kernel.org/r/20240719-imx_rproc-v2-3-10d0268c7eb1@nxp.com
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

remoteproc: imx_rproc: Use imx specific hook for find_loaded_rsc_table [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Jul 19 16:36:12 2024 +0800

    remoteproc: imx_rproc: Use imx specific hook for find_loaded_rsc_table
    
    [ Upstream commit e954a1bd16102abc800629f9900715d8ec4c3130 ]
    
    If there is a resource table device tree node, use the address as
    the resource table address, otherwise use the address(where
    .resource_table section loaded) inside the Cortex-M elf file.
    
    And there is an update in NXP SDK that Resource Domain Control(RDC)
    enabled to protect TCM, linux not able to write the TCM space when
    updating resource table status and cause kernel dump. So use the address
    from device tree could avoid kernel dump.
    
    Note: NXP M4 SDK not check resource table update, so it does not matter
    use whether resource table address specified in elf file or in device
    tree. But to reflect the fact that if people specific resource table
    address in device tree, it means people are aware and going to use it,
    not the address specified in elf file.
    
    Reviewed-by: Iuliana Prodan <iuliana.prodan@nxp.com>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Link: https://lore.kernel.org/r/20240719-imx_rproc-v2-2-10d0268c7eb1@nxp.com
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Remove *.orig pattern from .gitignore [+ + +]
Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date:   Mon Jul 29 18:57:38 2024 +0300

    Remove *.orig pattern from .gitignore
    
    commit 76be4f5a784533c71afbbb1b8f2963ef9e2ee258 upstream.
    
    Commit 3f1b0e1f2875 (".gitignore update") added *.orig and *.rej
    patterns to .gitignore in v2.6.23. The commit message didn't give a
    rationale. Later on, commit 1f5d3a6b6532 ("Remove *.rej pattern from
    .gitignore") removed the *.rej pattern in v2.6.26, on the rationale that
    *.rej files indicated something went really wrong and should not be
    ignored.
    
    The *.rej files are now shown by `git status`, which helps located
    conflicts when applying patches and lowers the probability that they
    will go unnoticed. It is however still easy to overlook the *.orig files
    which slowly polute the source tree. That's not as big of a deal as not
    noticing a conflict, but it's still not nice.
    
    Drop the *.orig pattern from .gitignore to avoid this and help keep the
    source tree clean.
    
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    [masahiroy@kernel.org:
    I do not have a strong opinion about this. Perhaps some people may have
    a different opinion.
    
    If you are someone who wants to ignore *.orig, it is likely you would
    want to do so across all projects. Then, $XDG_CONFIG_HOME/git/ignore
    would be more suitable for your needs. gitignore(5) suggests, "Patterns
    which a user wants Git to ignore in all situations generally go into a
    file specified by core.excludesFile in the user's ~/.gitconfig".
    
    Please note that you cannot do the opposite; if *.orig is ignored by
    the project's .gitignore, you cannot override the decision because
    $XDG_CONFIG_HOME/git/ignore has a lower priority.
    
    If *.orig is sitting on the fence, I'd leave it to the users. ]
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
reset: berlin: fix OF node leak in probe() error path [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun Aug 25 16:14:24 2024 +0200

    reset: berlin: fix OF node leak in probe() error path
    
    [ Upstream commit 5f58a88cc91075be38cec69b7cb70aaa4ba69e8b ]
    
    Driver is leaking OF node reference on memory allocation failure.
    Acquire the OF node reference after memory allocation to fix this and
    keep it simple.
    
    Fixes: aed6f3cadc86 ("reset: berlin: convert to a platform driver")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20240825-reset-cleanup-scoped-v1-1-03f6d834f8c0@linaro.org
    Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

reset: k210: fix OF node leak in probe() error path [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun Aug 25 16:14:25 2024 +0200

    reset: k210: fix OF node leak in probe() error path
    
    [ Upstream commit b14e40f5dc7cd0dd7e958010e6ca9ad32ff2ddad ]
    
    Driver is leaking OF node reference on memory allocation failure.
    Acquire the OF node reference after memory allocation to fix this and
    keep it simple.
    
    Fixes: 5a2308da9f60 ("riscv: Add Canaan Kendryte K210 reset controller")
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20240825-reset-cleanup-scoped-v1-2-03f6d834f8c0@linaro.org
    Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
resource: fix region_intersects() vs add_memory_driver_managed() [+ + +]
Author: Huang Ying <ying.huang@intel.com>
Date:   Fri Sep 6 11:07:11 2024 +0800

    resource: fix region_intersects() vs add_memory_driver_managed()
    
    commit b4afe4183ec77f230851ea139d91e5cf2644c68b upstream.
    
    On a system with CXL memory, the resource tree (/proc/iomem) related to
    CXL memory may look like something as follows.
    
    490000000-50fffffff : CXL Window 0
      490000000-50fffffff : region0
        490000000-50fffffff : dax0.0
          490000000-50fffffff : System RAM (kmem)
    
    Because drivers/dax/kmem.c calls add_memory_driver_managed() during
    onlining CXL memory, which makes "System RAM (kmem)" a descendant of "CXL
    Window X".  This confuses region_intersects(), which expects all "System
    RAM" resources to be at the top level of iomem_resource.  This can lead to
    bugs.
    
    For example, when the following command line is executed to write some
    memory in CXL memory range via /dev/mem,
    
     $ dd if=data of=/dev/mem bs=$((1 << 10)) seek=$((0x490000000 >> 10)) count=1
     dd: error writing '/dev/mem': Bad address
     1+0 records in
     0+0 records out
     0 bytes copied, 0.0283507 s, 0.0 kB/s
    
    the command fails as expected.  However, the error code is wrong.  It
    should be "Operation not permitted" instead of "Bad address".  More
    seriously, the /dev/mem permission checking in devmem_is_allowed() passes
    incorrectly.  Although the accessing is prevented later because ioremap()
    isn't allowed to map system RAM, it is a potential security issue.  During
    command executing, the following warning is reported in the kernel log for
    calling ioremap() on system RAM.
    
     ioremap on RAM at 0x0000000490000000 - 0x0000000490000fff
     WARNING: CPU: 2 PID: 416 at arch/x86/mm/ioremap.c:216 __ioremap_caller.constprop.0+0x131/0x35d
     Call Trace:
      memremap+0xcb/0x184
      xlate_dev_mem_ptr+0x25/0x2f
      write_mem+0x94/0xfb
      vfs_write+0x128/0x26d
      ksys_write+0xac/0xfe
      do_syscall_64+0x9a/0xfd
      entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    The details of command execution process are as follows.  In the above
    resource tree, "System RAM" is a descendant of "CXL Window 0" instead of a
    top level resource.  So, region_intersects() will report no System RAM
    resources in the CXL memory region incorrectly, because it only checks the
    top level resources.  Consequently, devmem_is_allowed() will return 1
    (allow access via /dev/mem) for CXL memory region incorrectly.
    Fortunately, ioremap() doesn't allow to map System RAM and reject the
    access.
    
    So, region_intersects() needs to be fixed to work correctly with the
    resource tree with "System RAM" not at top level as above.  To fix it, if
    we found a unmatched resource in the top level, we will continue to search
    matched resources in its descendant resources.  So, we will not miss any
    matched resources in resource tree anymore.
    
    In the new implementation, an example resource tree
    
    |------------- "CXL Window 0" ------------|
    |-- "System RAM" --|
    
    will behave similar as the following fake resource tree for
    region_intersects(, IORESOURCE_SYSTEM_RAM, ),
    
    |-- "System RAM" --||-- "CXL Window 0a" --|
    
    Where "CXL Window 0a" is part of the original "CXL Window 0" that
    isn't covered by "System RAM".
    
    Link: https://lkml.kernel.org/r/20240906030713.204292-2-ying.huang@intel.com
    Fixes: c221c0b0308f ("device-dax: "Hotplug" persistent memory for use like normal RAM")
    Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Jonathan Cameron <jonathan.cameron@huawei.com>
    Cc: Dave Jiang <dave.jiang@intel.com>
    Cc: Alison Schofield <alison.schofield@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "arm64: dts: qcom: sm8250: switch UFS QMP PHY to new style of bindings" [+ + +]
Author: Sumit Semwal <sumit.semwal@linaro.org>
Date:   Thu Oct 3 20:05:32 2024 +0530

    Revert "arm64: dts: qcom: sm8250: switch UFS QMP PHY to new style of bindings"
    
    This reverts commit cf9c7b34b90b622254b236a9a43737b6059a1c14.
    
    This commit breaks UFS on RB5 in the 6.1 LTS kernels. The original patch
    author suggests that this is not a stable kernel patch, hence reverting
    it.
    
    This was reported during testing with 6.1.103 / 5.15.165 LTS kernels
    merged in the respective Android Common Kernel branches.
    
    Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "dm: requeue IO if mapping table not yet available" [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Fri Sep 13 15:05:18 2024 +0200

    Revert "dm: requeue IO if mapping table not yet available"
    
    [ Upstream commit c8691cd0fc11197515ed148de0780d927bfca38b ]
    
    This reverts commit fa247089de9936a46e290d4724cb5f0b845600f5.
    
    The following sequence of commands causes a livelock - there will be
    workqueue process looping and consuming 100% CPU:
    
    dmsetup create --notable test
    truncate -s 1MiB testdata
    losetup /dev/loop0 testdata
    dmsetup load test --table '0 2048 linear /dev/loop0 0'
    dd if=/dev/zero of=/dev/dm-0 bs=16k count=1 conv=fdatasync
    
    The livelock is caused by the commit fa247089de99. The commit claims that
    it fixes a race condition, however, it is unknown what the actual race
    condition is and what program is involved in the race condition.
    
    When the inactive table is loaded, the nodes /dev/dm-0 and
    /sys/block/dm-0 are created. /dev/dm-0 has zero size at this point. When
    the device is suspended and resumed, the nodes /dev/mapper/test and
    /dev/disk/* are created.
    
    If some program opens a block device before it is created by dmsetup or
    lvm, the program is buggy, so dm could just report an error as it used to
    do before.
    
    Reported-by: Zdenek Kabelac <zkabelac@redhat.com>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Fixes: fa247089de99 ("dm: requeue IO if mapping table not yet available")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "media: tuners: fix error return code of hybrid_tuner_request_state()" [+ + +]
Author: Roman Smirnov <r.smirnov@omp.ru>
Date:   Tue Jul 16 12:10:40 2024 +0300

    Revert "media: tuners: fix error return code of hybrid_tuner_request_state()"
    
    commit e25cc4be4616fcf5689622b3226d648aab253cdb upstream.
    
    This reverts commit b9302fa7ed979e84b454e4ca92192cf485a4ed41.
    
    As Fedor Pchelkin pointed out, this commit violates the
    convention of using the macro return value, which causes errors.
    For example, in functions tda18271_attach(), xc5000_attach(),
    simple_tuner_attach().
    
    Link: https://lore.kernel.org/linux-media/20240424202031.syigrtrtipbq5f2l@fpc/
    Suggested-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Signed-off-by: Roman Smirnov <r.smirnov@omp.ru>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "usb: yurex: Replace snprintf() with the safer scnprintf() variant" [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Mon Oct 7 11:39:47 2024 +0200

    Revert "usb: yurex: Replace snprintf() with the safer scnprintf() variant"
    
    commit 71c717cd8a2e180126932cc6851ff21c1d04d69a upstream.
    
    This reverts commit 86b20af11e84c26ae3fde4dcc4f490948e3f8035.
    
    This patch leads to passing 0 to simple_read_from_buffer()
    as a fifth argument, turning the read method into a nop.
    The change is fundamentally flawed, as it breaks the driver.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20241007094004.242122-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "wifi: cfg80211: check wiphy mutex is held for wdev mutex" [+ + +]
Author: Ping-Ke Shih <pkshih@realtek.com>
Date:   Thu Sep 26 08:30:17 2024 +0800

    Revert "wifi: cfg80211: check wiphy mutex is held for wdev mutex"
    
    This reverts commit 89795eeba6d13b5ba432425dd43c34c66f2cebde which is
    commmit 1474bc87fe57deac726cc10203f73daa6c3212f7 upstream.
    
    The reverted commit is based on implementation of wiphy locking that isn't
    planned to redo on a stable kernel, so revert it to avoid warning:
    
     WARNING: CPU: 0 PID: 9 at net/wireless/core.h:231 disconnect_work+0xb8/0x144 [cfg80211]
     CPU: 0 PID: 9 Comm: kworker/0:1 Not tainted 6.6.51-00141-ga1649b6f8ed6 #7
     Hardware name: Freescale i.MX6 SoloX (Device Tree)
     Workqueue: events disconnect_work [cfg80211]
      unwind_backtrace from show_stack+0x10/0x14
      show_stack from dump_stack_lvl+0x58/0x70
      dump_stack_lvl from __warn+0x70/0x1c0
      __warn from warn_slowpath_fmt+0x16c/0x294
      warn_slowpath_fmt from disconnect_work+0xb8/0x144 [cfg80211]
      disconnect_work [cfg80211] from process_one_work+0x204/0x620
      process_one_work from worker_thread+0x1b0/0x474
      worker_thread from kthread+0x10c/0x12c
      kthread from ret_from_fork+0x14/0x24
    
    Reported-by: petter@technux.se
    Closes: https://lore.kernel.org/linux-wireless/9e98937d781c990615ef27ee0c858ff9@technux.se/T/#t
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
riscv: define ILLEGAL_POINTER_VALUE for 64bit [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Sat Jul 6 01:02:10 2024 +0800

    riscv: define ILLEGAL_POINTER_VALUE for 64bit
    
    commit 5c178472af247c7b50f962495bb7462ba453b9fb upstream.
    
    This is used in poison.h for poison pointer offset. Based on current
    SV39, SV48 and SV57 vm layout, 0xdead000000000000 is a proper value
    that is not mappable, this can avoid potentially turning an oops to
    an expolit.
    
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Fixes: fbe934d69eb7 ("RISC-V: Build Infrastructure")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240705170210.3236-1-jszhang@kernel.org
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

riscv: Fix fp alignment bug in perf_callchain_user() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Mon Jul 8 11:28:46 2024 +0800

    riscv: Fix fp alignment bug in perf_callchain_user()
    
    [ Upstream commit 22ab08955ea13be04a8efd20cc30890e0afaa49c ]
    
    The standard RISC-V calling convention said:
            "The stack grows downward and the stack pointer is always
            kept 16-byte aligned".
    
    So perf_callchain_user() should check whether 16-byte aligned for fp.
    
    Link: https://riscv.org/wp-content/uploads/2015/01/riscv-calling.pdf
    
    Fixes: dbeb90b0c1eb ("riscv: Add perf callchain support")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Cc: Björn Töpel <bjorn@kernel.org>
    Link: https://lore.kernel.org/r/20240708032847.2998158-2-ruanjinjie@huawei.com
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtc: at91sam9: fix OF node leak in probe() error path [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun Aug 25 20:31:03 2024 +0200

    rtc: at91sam9: fix OF node leak in probe() error path
    
    commit 73580e2ee6adfb40276bd420da3bb1abae204e10 upstream.
    
    Driver is leaking an OF node reference obtained from
    of_parse_phandle_with_fixed_args().
    
    Fixes: 43e112bb3dea ("rtc: at91sam9: make use of syscon/regmap to access GPBR registers")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20240825183103.102904-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rtnetlink: Add bulk registration helpers for rtnetlink message handlers. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Oct 8 11:47:32 2024 -0700

    rtnetlink: Add bulk registration helpers for rtnetlink message handlers.
    
    [ Upstream commit 07cc7b0b942bf55ef1a471470ecda8d2a6a6541f ]
    
    Before commit addf9b90de22 ("net: rtnetlink: use rcu to free rtnl message
    handlers"), once rtnl_msg_handlers[protocol] was allocated, the following
    rtnl_register_module() for the same protocol never failed.
    
    However, after the commit, rtnl_msg_handler[protocol][msgtype] needs to
    be allocated in each rtnl_register_module(), so each call could fail.
    
    Many callers of rtnl_register_module() do not handle the returned error,
    and we need to add many error handlings.
    
    To handle that easily, let's add wrapper functions for bulk registration
    of rtnetlink message handlers.
    
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: d51705614f66 ("mctp: Handle error of rtnl_register_module().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/cpum_sf: Remove WARN_ON_ONCE statements [+ + +]
Author: Thomas Richter <tmricht@linux.ibm.com>
Date:   Wed Jul 10 12:23:47 2024 +0200

    s390/cpum_sf: Remove WARN_ON_ONCE statements
    
    [ Upstream commit b495e710157606889f2d8bdc62aebf2aa02f67a7 ]
    
    Remove WARN_ON_ONCE statements. These have not triggered in the
    past.
    
    Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
    Acked-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/facility: Disable compile time optimization for decompressor code [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Wed Sep 4 11:39:24 2024 +0200

    s390/facility: Disable compile time optimization for decompressor code
    
    [ Upstream commit 0147addc4fb72a39448b8873d8acdf3a0f29aa65 ]
    
    Disable compile time optimizations of test_facility() for the
    decompressor. The decompressor should not contain any optimized code
    depending on the architecture level set the kernel image is compiled
    for to avoid unexpected operation exceptions.
    
    Add a __DECOMPRESSOR check to test_facility() to enforce that
    facilities are always checked during runtime for the decompressor.
    
    Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/mm: Add cond_resched() to cmm_alloc/free_pages() [+ + +]
Author: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Date:   Mon Sep 2 14:02:19 2024 +0200

    s390/mm: Add cond_resched() to cmm_alloc/free_pages()
    
    [ Upstream commit 131b8db78558120f58c5dc745ea9655f6b854162 ]
    
    Adding/removing large amount of pages at once to/from the CMM balloon
    can result in rcu_sched stalls or workqueue lockups, because of busy
    looping w/o cond_resched().
    
    Prevent this by adding a cond_resched(). cmm_free_pages() holds a
    spin_lock while looping, so it cannot be added directly to the existing
    loop. Instead, introduce a wrapper function that operates on maximum 256
    pages at once, and add it there.
    
    Signed-off-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scripts: kconfig: merge_config: config files: add a trailing newline [+ + +]
Author: Anders Roxell <anders.roxell@linaro.org>
Date:   Mon Aug 5 11:22:34 2024 +0200

    scripts: kconfig: merge_config: config files: add a trailing newline
    
    [ Upstream commit 33330bcf031818e60a816db0cfd3add9eecc3b28 ]
    
    When merging files without trailing newlines at the end of the file, two
    config fragments end up at the same row if file1.config doens't have a
    trailing newline at the end of the file.
    
    file1.config "CONFIG_1=y"
    file2.config "CONFIG_2=y"
    ./scripts/kconfig/merge_config.sh -m .config file1.config file2.config
    
    This will generate a .config looking like this.
    cat .config
    ...
    CONFIG_1=yCONFIG_2=y"
    
    Making sure so we add a newline at the end of every config file that is
    passed into the script.
    
    Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: aacraid: Rearrange order of struct aac_srb_unit [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Thu Jul 11 14:57:37 2024 -0700

    scsi: aacraid: Rearrange order of struct aac_srb_unit
    
    [ Upstream commit 6e5860b0ad4934baee8c7a202c02033b2631bb44 ]
    
    struct aac_srb_unit contains struct aac_srb, which contains struct sgmap,
    which ends in a (currently) "fake" (1-element) flexible array.  Converting
    this to a flexible array is needed so that runtime bounds checking won't
    think the array is fixed size (i.e. under CONFIG_FORTIFY_SOURCE=y and/or
    CONFIG_UBSAN_BOUNDS=y), as other parts of aacraid use struct sgmap as a
    flexible array.
    
    It is not legal to have a flexible array in the middle of a structure, so
    it either needs to be split up or rearranged so that it is at the end of
    the structure. Luckily, struct aac_srb_unit, which is exclusively
    consumed/updated by aac_send_safw_bmic_cmd(), does not depend on member
    ordering.
    
    The values set in the on-stack struct aac_srb_unit instance "srbu" by the
    only two callers, aac_issue_safw_bmic_identify() and
    aac_get_safw_ciss_luns(), do not contain anything in srbu.srb.sgmap.sg, and
    they both implicitly initialize srbu.srb.sgmap.count to 0 during
    memset(). For example:
    
            memset(&srbu, 0, sizeof(struct aac_srb_unit));
    
            srbcmd = &srbu.srb;
            srbcmd->flags   = cpu_to_le32(SRB_DataIn);
            srbcmd->cdb[0]  = CISS_REPORT_PHYSICAL_LUNS;
            srbcmd->cdb[1]  = 2; /* extended reporting */
            srbcmd->cdb[8]  = (u8)(datasize >> 8);
            srbcmd->cdb[9]  = (u8)(datasize);
    
            rcode = aac_send_safw_bmic_cmd(dev, &srbu, phys_luns, datasize);
    
    During aac_send_safw_bmic_cmd(), a separate srb is mapped into DMA, and has
    srbu.srb copied into it:
    
            srb = fib_data(fibptr);
            memcpy(srb, &srbu->srb, sizeof(struct aac_srb));
    
    Only then is srb.sgmap.count written and srb->sg populated:
    
            srb->count              = cpu_to_le32(xfer_len);
    
            sg64 = (struct sgmap64 *)&srb->sg;
            sg64->count             = cpu_to_le32(1);
            sg64->sg[0].addr[1]     = cpu_to_le32(upper_32_bits(addr));
            sg64->sg[0].addr[0]     = cpu_to_le32(lower_32_bits(addr));
            sg64->sg[0].count       = cpu_to_le32(xfer_len);
    
    But this is happening in the DMA memory, not in srbu.srb. An attempt to
    copy the changes back to srbu does happen:
    
            /*
             * Copy the updated data for other dumping or other usage if
             * needed
             */
            memcpy(&srbu->srb, srb, sizeof(struct aac_srb));
    
    But this was never correct: the sg64 (3 u32s) overlap of srb.sg (2 u32s)
    always meant that srbu.srb would have held truncated information and any
    attempt to walk srbu.srb.sg.sg based on the value of srbu.srb.sg.count
    would result in attempting to parse past the end of srbu.srb.sg.sg[0] into
    srbu.srb_reply.
    
    After getting a reply from hardware, the reply is copied into
    srbu.srb_reply:
    
            srb_reply = (struct aac_srb_reply *)fib_data(fibptr);
            memcpy(&srbu->srb_reply, srb_reply, sizeof(struct aac_srb_reply));
    
    This has always been fixed-size, so there's no issue here. It is worth
    noting that the two callers _never check_ srbu contents -- neither
    srbu.srb nor srbu.srb_reply is examined. (They depend on the mapped
    xfer_buf instead.)
    
    Therefore, the ordering of members in struct aac_srb_unit does not matter,
    and the flexible array member can moved to the end.
    
    (Additionally, the two memcpy()s that update srbu could be entirely
    removed as they are never consumed, but I left that as-is.)
    
    Signed-off-by: Kees Cook <kees@kernel.org>
    Link: https://lore.kernel.org/r/20240711215739.208776-1-kees@kernel.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: elx: libefc: Fix potential use after free in efc_nport_vport_del() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Thu Aug 15 14:29:05 2024 +0300

    scsi: elx: libefc: Fix potential use after free in efc_nport_vport_del()
    
    [ Upstream commit 2e4b02fad094976763af08fec2c620f4f8edd9ae ]
    
    The kref_put() function will call nport->release if the refcount drops to
    zero.  The nport->release release function is _efc_nport_free() which frees
    "nport".  But then we dereference "nport" on the next line which is a use
    after free.  Re-order these lines to avoid the use after free.
    
    Fixes: fcd427303eb9 ("scsi: elx: libefc: SLI and FC PORT state machine interfaces")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/b666ab26-6581-4213-9a3d-32a9147f0399@stanley.mountain
    Reviewed-by: Daniel Wagner <dwagner@suse.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: lpfc: Fix overflow build issue [+ + +]
Author: Sherry Yang <sherry.yang@oracle.com>
Date:   Tue Aug 20 23:51:31 2024 -0700

    scsi: lpfc: Fix overflow build issue
    
    [ Upstream commit 3417c9574e368f0330637505f00d3814ca8854d2 ]
    
    Build failed while enabling "CONFIG_GCOV_KERNEL=y" and
    "CONFIG_GCOV_PROFILE_ALL=y" with following error:
    
    BUILDSTDERR: drivers/scsi/lpfc/lpfc_bsg.c: In function 'lpfc_get_cgnbuf_info':
    BUILDSTDERR: ./include/linux/fortify-string.h:114:33: error: '__builtin_memcpy' accessing 18446744073709551615 bytes at offsets 0 and 0 overlaps 9223372036854775807 bytes at offset -9223372036854775808 [-Werror=restrict]
    BUILDSTDERR:   114 | #define __underlying_memcpy     __builtin_memcpy
    BUILDSTDERR:       |                                 ^
    BUILDSTDERR: ./include/linux/fortify-string.h:637:9: note: in expansion of macro '__underlying_memcpy'
    BUILDSTDERR:   637 |         __underlying_##op(p, q, __fortify_size);                        \
    BUILDSTDERR:       |         ^~~~~~~~~~~~~
    BUILDSTDERR: ./include/linux/fortify-string.h:682:26: note: in expansion of macro '__fortify_memcpy_chk'
    BUILDSTDERR:   682 | #define memcpy(p, q, s)  __fortify_memcpy_chk(p, q, s,                  \
    BUILDSTDERR:       |                          ^~~~~~~~~~~~~~~~~~~~
    BUILDSTDERR: drivers/scsi/lpfc/lpfc_bsg.c:5468:9: note: in expansion of macro 'memcpy'
    BUILDSTDERR:  5468 |         memcpy(cgn_buff, cp, cinfosz);
    BUILDSTDERR:       |         ^~~~~~
    
    This happens from the commit 06bb7fc0feee ("kbuild: turn on -Wrestrict by
    default"). Address this issue by using size_t type.
    
    Signed-off-by: Sherry Yang <sherry.yang@oracle.com>
    Link: https://lore.kernel.org/r/20240821065131.1180791-1-sherry.yang@oracle.com
    Reviewed-by: Justin Tee <justin.tee@broadcom.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: mac_scsi: Disallow bus errors during PDMA send [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Wed Aug 7 13:36:28 2024 +1000

    scsi: mac_scsi: Disallow bus errors during PDMA send
    
    commit 5551bc30e4a69ad86d0d008e2f56cd59b6583476 upstream.
    
    SD cards can produce write latency spikes on the order of a hundred
    milliseconds. If the target firmware does not hide that latency during DATA
    IN and OUT phases it can cause the PDMA circuitry to raise a processor bus
    fault which in turn leads to an unreliable byte count and a DMA overrun.
    
    The Last Byte Sent flag is used to detect the overrun but this mechanism is
    unreliable on some systems. Instead, set a DID_ERROR result whenever there
    is a bus fault during a PDMA send, unless the cause was a phase mismatch.
    
    Cc: stable@vger.kernel.org # 5.15+
    Reported-and-tested-by: Stan Johnson <userm57@yahoo.com>
    Fixes: 7c1f3e3447a1 ("scsi: mac_scsi: Treat Last Byte Sent time-out as failure")
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Link: https://lore.kernel.org/r/cc38df687ace2c4ffc375a683b2502fc476b600d.1723001788.git.fthain@linux-m68k.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: mac_scsi: Refactor polling loop [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Wed Aug 7 13:36:28 2024 +1000

    scsi: mac_scsi: Refactor polling loop
    
    commit 5545c3165cbc98615fe65a44f41167cbb557e410 upstream.
    
    Before the error handling can be revised, some preparation is needed.
    Refactor the polling loop with a new function, macscsi_wait_for_drq().
    This function will gain more call sites in the next patch.
    
    Cc: stable@vger.kernel.org # 5.15+
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Link: https://lore.kernel.org/r/6a5ffabb4290c0d138c6d285fda8fa3902e926f0.1723001788.git.fthain@linux-m68k.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: mac_scsi: Revise printk(KERN_DEBUG ...) messages [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Wed Aug 7 13:36:28 2024 +1000

    scsi: mac_scsi: Revise printk(KERN_DEBUG ...) messages
    
    commit 5ec4f820cb9766e4583df947150a6febce8da794 upstream.
    
    After a bus fault, capture and log the chip registers immediately, if the
    NDEBUG_PSEUDO_DMA macro is defined. Remove some printk(KERN_DEBUG ...)
    messages that aren't needed any more.  Don't skip the debug message when
    bytes == 0. Show all of the byte counters in the debug messages.
    
    Cc: stable@vger.kernel.org # 5.15+
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Link: https://lore.kernel.org/r/7573c79f4e488fc00af2b8a191e257ca945e0409.1723001788.git.fthain@linux-m68k.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: NCR5380: Add SCp members to struct NCR5380_cmd [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Fri Feb 18 11:50:36 2022 -0800

    scsi: NCR5380: Add SCp members to struct NCR5380_cmd
    
    [ Upstream commit ff1269cb3d978655fb4f61f87d08a46af9854567 ]
    
    This is necessary for the eventual removal of SCp from struct scsi_cmnd.
    
    Link: https://lore.kernel.org/r/20220218195117.25689-9-bvanassche@acm.org
    Cc: Michael Schmitz <schmitzmic@gmail.com>
    Cc: Ondrej Zary <linux@zary.sk>
    Suggested-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 5768718da941 ("scsi: NCR5380: Check for phase match during PDMA fixup")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: NCR5380: Check for phase match during PDMA fixup [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Wed Aug 7 13:36:28 2024 +1000

    scsi: NCR5380: Check for phase match during PDMA fixup
    
    [ Upstream commit 5768718da9417331803fc4bc090544c2a93b88dc ]
    
    It's not an error for a target to change the bus phase during a transfer.
    Unfortunately, the FLAG_DMA_FIXUP workaround does not allow for that -- a
    phase change produces a DRQ timeout error and the device borken flag will
    be set.
    
    Check the phase match bit during FLAG_DMA_FIXUP processing. Don't forget to
    decrement the command residual. While we are here, change shost_printk()
    into scmd_printk() for better consistency with other DMA error messages.
    
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Fixes: 55181be8ced1 ("ncr5380: Replace redundant flags with FLAG_NO_DMA_FIXUP")
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Link: https://lore.kernel.org/r/99dc7d1f4c825621b5b120963a69f6cd3e9ca659.1723001788.git.fthain@linux-m68k.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: smartpqi: correct stream detection [+ + +]
Author: Mahesh Rajashekhara <mahesh.rajashekhara@microchip.com>
Date:   Tue Aug 27 13:54:56 2024 -0500

    scsi: smartpqi: correct stream detection
    
    [ Upstream commit 4c76114932d1d6fad2e72823e7898a3c960cf2a7 ]
    
    Correct stream detection by initializing the structure
    pqi_scsi_dev_raid_map_data to 0s.
    
    When the OS issues SCSI READ commands, the driver erroneously considers
    them as SCSI WRITES. If they are identified as sequential IOs, the driver
    then submits those requests via the RAID path instead of the AIO path.
    
    The 'is_write' flag might be set for SCSI READ commands also.  The driver
    may interpret SCSI READ commands as SCSI WRITE commands, resulting in IOs
    being submitted through the RAID path.
    
    Note: This does not cause data corruption.
    
    Reviewed-by: Scott Benesh <scott.benesh@microchip.com>
    Reviewed-by: Scott Teel <scott.teel@microchip.com>
    Reviewed-by: Mike McGowen <mike.mcgowen@microchip.com>
    Signed-off-by: Mahesh Rajashekhara <mahesh.rajashekhara@microchip.com>
    Signed-off-by: Don Brace <don.brace@microchip.com>
    Link: https://lore.kernel.org/r/20240827185501.692804-3-don.brace@microchip.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sctp: ensure sk_state is set to CLOSED if hashing fails in sctp_listen_start [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Mon Oct 7 12:25:11 2024 -0400

    sctp: ensure sk_state is set to CLOSED if hashing fails in sctp_listen_start
    
    [ Upstream commit 4d5c70e6155d5eae198bade4afeab3c1b15073b6 ]
    
    If hashing fails in sctp_listen_start(), the socket remains in the
    LISTENING state, even though it was not added to the hash table.
    This can lead to a scenario where a socket appears to be listening
    without actually being accessible.
    
    This patch ensures that if the hashing operation fails, the sk_state
    is set back to CLOSED before returning an error.
    
    Note that there is no need to undo the autobind operation if hashing
    fails, as the bind port can still be used for next listen() call on
    the same socket.
    
    Fixes: 76c6d988aeb3 ("sctp: add sock_reuseport for the sock in __sctp_hash_endpoint")
    Reported-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sctp: set sk_state back to CLOSED if autobind fails in sctp_listen_start [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Mon Sep 30 16:49:51 2024 -0400

    sctp: set sk_state back to CLOSED if autobind fails in sctp_listen_start
    
    [ Upstream commit 8beee4d8dee76b67c75dc91fd8185d91e845c160 ]
    
    In sctp_listen_start() invoked by sctp_inet_listen(), it should set the
    sk_state back to CLOSED if sctp_autobind() fails due to whatever reason.
    
    Otherwise, next time when calling sctp_inet_listen(), if sctp_sk(sk)->reuse
    is already set via setsockopt(SCTP_REUSE_PORT), sctp_sk(sk)->bind_hash will
    be dereferenced as sk_state is LISTENING, which causes a crash as bind_hash
    is NULL.
    
      KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
      RIP: 0010:sctp_inet_listen+0x7f0/0xa20 net/sctp/socket.c:8617
      Call Trace:
       <TASK>
       __sys_listen_socket net/socket.c:1883 [inline]
       __sys_listen+0x1b7/0x230 net/socket.c:1894
       __do_sys_listen net/socket.c:1902 [inline]
    
    Fixes: 5e8f3f703ae4 ("sctp: simplify sctp listening code")
    Reported-by: syzbot+f4e0f821e3a3b7cee51d@syzkaller.appspotmail.com
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Link: https://patch.msgid.link/a93e655b3c153dc8945d7a812e6d8ab0d52b7aa0.1727729391.git.lucien.xin@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/bpf: Fix C++ compile error from missing _Bool type [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 29 02:24:20 2024 -0700

    selftests/bpf: Fix C++ compile error from missing _Bool type
    
    [ Upstream commit aa95073fd290b5b3e45f067fa22bb25e59e1ff7c ]
    
    While building, bpftool makes a skeleton from test_core_extern.c, which
    itself includes <stdbool.h> and uses the 'bool' type. However, the skeleton
    test_core_extern.skel.h generated *does not* include <stdbool.h> or use the
    'bool' type, instead using the C-only '_Bool' type. Compiling test_cpp.cpp
    with g++ 12.3 for mips64el/musl-libc then fails with error:
    
      In file included from test_cpp.cpp:9:
      test_core_extern.skel.h:45:17: error: '_Bool' does not name a type
         45 |                 _Bool CONFIG_BOOL;
            |                 ^~~~~
    
    This was likely missed previously because glibc uses a GNU extension for
    <stdbool.h> with C++ (#define _Bool bool), not supported by musl libc.
    
    Normally, a C fragment would include <stdbool.h> and use the 'bool' type,
    and thus cleanly work after import by C++. The ideal fix would be for
    'bpftool gen skeleton' to output the correct type/include supporting C++,
    but in the meantime add a conditional define as above.
    
    Fixes: 7c8dce4b1661 ("bpftool: Make skeleton C code compilable with C++ compiler")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/6fc1dd28b8bda49e51e4f610bdc9d22f4455632d.1722244708.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix compile error from rlim_t in sk_storage_map.c [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:29 2024 -0700

    selftests/bpf: Fix compile error from rlim_t in sk_storage_map.c
    
    [ Upstream commit d393f9479d4aaab0fa4c3caf513f28685e831f13 ]
    
    Cast 'rlim_t' argument to match expected type of printf() format and avoid
    compile errors seen building for mips64el/musl-libc:
    
      In file included from map_tests/sk_storage_map.c:20:
      map_tests/sk_storage_map.c: In function 'test_sk_storage_map_stress_free':
      map_tests/sk_storage_map.c:414:56: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'rlim_t' {aka 'long long unsigned int'} [-Werror=format=]
        414 |                 CHECK(err, "setrlimit(RLIMIT_NOFILE)", "rlim_new:%lu errno:%d",
            |                                                        ^~~~~~~~~~~~~~~~~~~~~~~
        415 |                       rlim_new.rlim_cur, errno);
            |                       ~~~~~~~~~~~~~~~~~
            |                               |
            |                               rlim_t {aka long long unsigned int}
      ./test_maps.h:12:24: note: in definition of macro 'CHECK'
         12 |                 printf(format);                                         \
            |                        ^~~~~~
      map_tests/sk_storage_map.c:414:68: note: format string is defined here
        414 |                 CHECK(err, "setrlimit(RLIMIT_NOFILE)", "rlim_new:%lu errno:%d",
            |                                                                  ~~^
            |                                                                    |
            |                                                                    long unsigned int
            |                                                                  %llu
      cc1: all warnings being treated as errors
    
    Fixes: 51a0e301a563 ("bpf: Add BPF_MAP_TYPE_SK_STORAGE test to test_maps")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/1e00a1fa7acf91b4ca135c4102dc796d518bad86.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix compiling core_reloc.c with musl-libc [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:42 2024 -0700

    selftests/bpf: Fix compiling core_reloc.c with musl-libc
    
    [ Upstream commit debfa4f628f271f72933bf38d581cc53cfe1def5 ]
    
    The type 'loff_t' is a GNU extension and not exposed by the musl 'fcntl.h'
    header unless _GNU_SOURCE is defined. Add this definition to fix errors
    seen compiling for mips64el/musl-libc:
    
      In file included from tools/testing/selftests/bpf/prog_tests/core_reloc.c:4:
      ./bpf_testmod/bpf_testmod.h:10:9: error: unknown type name 'loff_t'
         10 |         loff_t off;
            |         ^~~~~~
      ./bpf_testmod/bpf_testmod.h:16:9: error: unknown type name 'loff_t'
         16 |         loff_t off;
            |         ^~~~~~
    
    Fixes: 6bcd39d366b6 ("selftests/bpf: Add CO-RE relocs selftest relying on kernel module BTF")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/11c3af75a7eb6bcb7ad9acfae6a6f470c572eb82.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix compiling flow_dissector.c with musl-libc [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:40 2024 -0700

    selftests/bpf: Fix compiling flow_dissector.c with musl-libc
    
    [ Upstream commit 5e4c43bcb85973243d7274e0058b6e8f5810e4f7 ]
    
    The GNU version of 'struct tcphdr' has members 'doff', 'source' and 'dest',
    which are not exposed by musl libc headers unless _GNU_SOURCE is defined.
    
    Add this definition to fix errors seen compiling for mips64el/musl-libc:
    
      flow_dissector.c:118:30: error: 'struct tcphdr' has no member named 'doff'
        118 |                         .tcp.doff = 5,
            |                              ^~~~
      flow_dissector.c:119:30: error: 'struct tcphdr' has no member named 'source'
        119 |                         .tcp.source = 80,
            |                              ^~~~~~
      flow_dissector.c:120:30: error: 'struct tcphdr' has no member named 'dest'
        120 |                         .tcp.dest = 8080,
            |                              ^~~~
    
    Fixes: ae173a915785 ("selftests/bpf: support BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/8f7ab21a73f678f9cebd32b26c444a686e57414d.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix compiling kfree_skb.c with musl-libc [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:39 2024 -0700

    selftests/bpf: Fix compiling kfree_skb.c with musl-libc
    
    [ Upstream commit bae9a5ce7d3a9b3a9e07b31ab9e9c58450e3e9fd ]
    
    The GNU version of 'struct tcphdr' with member 'doff' is not exposed by
    musl headers unless _GNU_SOURCE is defined. Add this definition to fix
    errors seen compiling for mips64el/musl-libc:
    
      In file included from kfree_skb.c:2:
      kfree_skb.c: In function 'on_sample':
      kfree_skb.c:45:30: error: 'struct tcphdr' has no member named 'doff'
         45 |         if (CHECK(pkt_v6->tcp.doff != 5, "check_tcp",
            |                              ^
    
    Fixes: 580d656d80cf ("selftests/bpf: Add kfree_skb raw_tp test")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/e2d8cedc790959c10d6822a51f01a7a3616bea1b.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix compiling tcp_rtt.c with musl-libc [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:41 2024 -0700

    selftests/bpf: Fix compiling tcp_rtt.c with musl-libc
    
    [ Upstream commit 18826fb0b79c3c3cd1fe765d85f9c6f1a902c722 ]
    
    The GNU version of 'struct tcp_info' in 'netinet/tcp.h' is not exposed by
    musl headers unless _GNU_SOURCE is defined.
    
    Add this definition to fix errors seen compiling for mips64el/musl-libc:
    
      tcp_rtt.c: In function 'wait_for_ack':
      tcp_rtt.c:24:25: error: storage size of 'info' isn't known
         24 |         struct tcp_info info;
            |                         ^~~~
      tcp_rtt.c:24:25: error: unused variable 'info' [-Werror=unused-variable]
      cc1: all warnings being treated as errors
    
    Fixes: 1f4f80fed217 ("selftests/bpf: test_progs: convert test_tcp_rtt")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/f2329767b15df206f08a5776d35a47c37da855ae.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix error compiling bpf_iter_setsockopt.c with musl libc [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:30 2024 -0700

    selftests/bpf: Fix error compiling bpf_iter_setsockopt.c with musl libc
    
    [ Upstream commit 7b10f0c227ce3fa055d601f058dc411092a62a78 ]
    
    Existing code calls getsockname() with a 'struct sockaddr_in6 *' argument
    where a 'struct sockaddr *' argument is declared, yielding compile errors
    when building for mips64el/musl-libc:
    
      bpf_iter_setsockopt.c: In function 'get_local_port':
      bpf_iter_setsockopt.c:98:30: error: passing argument 2 of 'getsockname' from incompatible pointer type [-Werror=incompatible-pointer-types]
         98 |         if (!getsockname(fd, &addr, &addrlen))
            |                              ^~~~~
            |                              |
            |                              struct sockaddr_in6 *
      In file included from .../netinet/in.h:10,
                       from .../arpa/inet.h:9,
                       from ./test_progs.h:17,
                       from bpf_iter_setsockopt.c:5:
      .../sys/socket.h:391:23: note: expected 'struct sockaddr * restrict' but argument is of type 'struct sockaddr_in6 *'
        391 | int getsockname (int, struct sockaddr *__restrict, socklen_t *__restrict);
            |                       ^
      cc1: all warnings being treated as errors
    
    This compiled under glibc only because the argument is declared to be a
    "funky" transparent union which includes both types above. Explicitly cast
    the argument to allow compiling for both musl and glibc.
    
    Fixes: eed92afdd14c ("bpf: selftest: Test batching and bpf_(get|set)sockopt in bpf tcp iter")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Geliang Tang <geliang@kernel.org>
    Link: https://lore.kernel.org/bpf/f41def0f17b27a23b1709080e4e3f37f4cc11ca9.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix error compiling test_lru_map.c [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 29 02:24:19 2024 -0700

    selftests/bpf: Fix error compiling test_lru_map.c
    
    [ Upstream commit cacf2a5a78cd1f5f616eae043ebc6f024104b721 ]
    
    Although the post-increment in macro 'CPU_SET(next++, &cpuset)' seems safe,
    the sequencing can raise compile errors, so move the increment outside the
    macro. This avoids an error seen using gcc 12.3.0 for mips64el/musl-libc:
    
      In file included from test_lru_map.c:11:
      test_lru_map.c: In function 'sched_next_online':
      test_lru_map.c:129:29: error: operation on 'next' may be undefined [-Werror=sequence-point]
        129 |                 CPU_SET(next++, &cpuset);
            |                             ^
      cc1: all warnings being treated as errors
    
    Fixes: 3fbfadce6012 ("bpf: Fix test_lru_sanity5() in test_lru_map.c")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/22993dfb11ccf27925a626b32672fd3324cb76c4.1722244708.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix errors compiling cg_storage_multi.h with musl libc [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:46 2024 -0700

    selftests/bpf: Fix errors compiling cg_storage_multi.h with musl libc
    
    [ Upstream commit 730561d3c08d4a327cceaabf11365958a1c00cec ]
    
    Remove a redundant include of '<asm/types.h>', whose needed definitions are
    already included (via '<linux/types.h>') in cg_storage_multi_egress_only.c,
    cg_storage_multi_isolated.c, and cg_storage_multi_shared.c. This avoids
    redefinition errors seen compiling for mips64el/musl-libc like:
    
      In file included from progs/cg_storage_multi_egress_only.c:13:
      In file included from progs/cg_storage_multi.h:6:
      In file included from /usr/mips64el-linux-gnuabi64/include/asm/types.h:23:
      /usr/include/asm-generic/int-l64.h:29:25: error: typedef redefinition with different types ('long' vs 'long long')
         29 | typedef __signed__ long __s64;
            |                         ^
      /usr/include/asm-generic/int-ll64.h:30:44: note: previous definition is here
         30 | __extension__ typedef __signed__ long long __s64;
            |                                            ^
    
    Fixes: 9e5bd1f7633b ("selftests/bpf: Test CGROUP_STORAGE map can't be used by multiple progs")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/4f4702e9f6115b7f84fea01b2326ca24c6df7ba8.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Fix missing ARRAY_SIZE() definition in bench.c [+ + +]
Author: Tony Ambardar <tony.ambardar@gmail.com>
Date:   Mon Jul 22 22:54:34 2024 -0700

    selftests/bpf: Fix missing ARRAY_SIZE() definition in bench.c
    
    [ Upstream commit d44c93fc2f5a0c47b23fa03d374e45259abd92d2 ]
    
    Add a "bpf_util.h" include to avoid the following error seen compiling for
    mips64el with musl libc:
    
      bench.c: In function 'find_benchmark':
      bench.c:590:25: error: implicit declaration of function 'ARRAY_SIZE' [-Werror=implicit-function-declaration]
        590 |         for (i = 0; i < ARRAY_SIZE(benchs); i++) {
            |                         ^~~~~~~~~~
      cc1: all warnings being treated as errors
    
    Fixes: 8e7c2a023ac0 ("selftests/bpf: Add benchmark runner infrastructure")
    Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/bc4dde77dfcd17a825d8f28f72f3292341966810.1721713597.git.tony.ambardar@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Support SOCK_STREAM in unix_inet_redir_to_connected() [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Sat Jul 13 21:41:39 2024 +0200

    selftests/bpf: Support SOCK_STREAM in unix_inet_redir_to_connected()
    
    [ Upstream commit 1b0ad43177c097d38b967b99c2b71d8be28b0223 ]
    
    Function ignores the AF_UNIX socket type argument, SOCK_DGRAM is hardcoded.
    Fix to respect the argument provided.
    
    Fixes: 75e0e27db6cf ("selftest/bpf: Change udp to inet in some function names")
    Suggested-by: Jakub Sitnicki <jakub@cloudflare.com>
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Jakub Sitnicki <jakub@cloudflare.com>
    Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
    Link: https://lore.kernel.org/bpf/20240713200218.2140950-3-mhal@rbox.co
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/mm: fix charge_reserved_hugetlb.sh test [+ + +]
Author: David Hildenbrand <david@redhat.com>
Date:   Wed Aug 21 14:31:15 2024 +0200

    selftests/mm: fix charge_reserved_hugetlb.sh test
    
    [ Upstream commit c41a701d18efe6b8aa402efab16edbaba50c9548 ]
    
    Currently, running the charge_reserved_hugetlb.sh selftest we can
    sometimes observe something like:
    
      $ ./charge_reserved_hugetlb.sh -cgroup-v2
      ...
      write_result is 0
      After write:
      hugetlb_usage=0
      reserved_usage=10485760
      killing write_to_hugetlbfs
      Received 2.
      Deleting the memory
      Detach failure: Invalid argument
      umount: /mnt/huge: target is busy.
    
    Both cases are issues in the test.
    
    While the unmount error seems to be racy, it will make the test fail:
            $ ./run_vmtests.sh -t hugetlb
            ...
            # [FAIL]
            not ok 10 charge_reserved_hugetlb.sh -cgroup-v2 # exit=32
    
    The issue is that we are not waiting for the write_to_hugetlbfs process to
    quit.  So it might still have a hugetlbfs file open, about which umount is
    not happy.  Fix that by making "killall" wait for the process to quit.
    
    The other error ("Detach failure: Invalid argument") does not seem to
    result in a test error, but is misleading.  Turns out write_to_hugetlbfs.c
    unconditionally tries to cleanup using shmdt(), even when we only
    mmap()'ed a hugetlb file.  Even worse, shmaddr is never even set for the
    SHM case.  Fix that as well.
    
    With this change it seems to work as expected.
    
    Link: https://lkml.kernel.org/r/20240821123115.2068812-1-david@redhat.com
    Fixes: 29750f71a9b4 ("hugetlb_cgroup: add hugetlb_cgroup reservation tests")
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reported-by: Mario Casquero <mcasquer@redhat.com>
    Reviewed-by: Mina Almasry <almasrymina@google.com>
    Tested-by: Mario Casquero <mcasquer@redhat.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/net: give more time to udpgro bg processes to complete startup [+ + +]
Author: Adrien Thierry <athierry@redhat.com>
Date:   Tue Nov 1 14:48:08 2022 -0400

    selftests/net: give more time to udpgro bg processes to complete startup
    
    [ Upstream commit cdb525ca92b196f8916102b62431aa0d9a644ff2 ]
    
    In some conditions, background processes in udpgro don't have enough
    time to set up the sockets. When foreground processes start, this
    results in the test failing with "./udpgso_bench_tx: sendmsg: Connection
    refused". For instance, this happens from time to time on a Qualcomm
    SA8540P SoC running CentOS Stream 9.
    
    To fix this, increase the time given to background processes to
    complete the startup before foreground processes start.
    
    Signed-off-by: Adrien Thierry <athierry@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 9d851dd4dab6 ("selftests: net: Remove executable bits from library scripts")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/net: synchronize udpgro tests' tx and rx connection [+ + +]
Author: Lucas Karpinski <lkarpins@redhat.com>
Date:   Tue Nov 14 10:11:31 2023 -0500

    selftests/net: synchronize udpgro tests' tx and rx connection
    
    [ Upstream commit 3bdd9fd29cb0f136b307559a19c107210ad5c314 ]
    
    The sockets used by udpgso_bench_tx aren't always ready when
    udpgso_bench_tx transmits packets. This issue is more prevalent in -rt
    kernels, but can occur in both. Replace the hacky sleep calls with a
    function that checks whether the ports in the namespace are ready for
    use.
    
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Lucas Karpinski <lkarpins@redhat.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 9d851dd4dab6 ("selftests: net: Remove executable bits from library scripts")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: breakpoints: use remaining time to check if suspend succeed [+ + +]
Author: Yifei Liu <yifei.l.liu@oracle.com>
Date:   Mon Sep 30 15:40:25 2024 -0700

    selftests: breakpoints: use remaining time to check if suspend succeed
    
    [ Upstream commit c66be905cda24fb782b91053b196bd2e966f95b7 ]
    
    step_after_suspend_test fails with device busy error while
    writing to /sys/power/state to start suspend. The test believes
    it failed to enter suspend state with
    
    $ sudo ./step_after_suspend_test
    TAP version 13
    Bail out! Failed to enter Suspend state
    
    However, in the kernel message, I indeed see the system get
    suspended and then wake up later.
    
    [611172.033108] PM: suspend entry (s2idle)
    [611172.044940] Filesystems sync: 0.006 seconds
    [611172.052254] Freezing user space processes
    [611172.059319] Freezing user space processes completed (elapsed 0.001 seconds)
    [611172.067920] OOM killer disabled.
    [611172.072465] Freezing remaining freezable tasks
    [611172.080332] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
    [611172.089724] printk: Suspending console(s) (use no_console_suspend to debug)
    [611172.117126] serial 00:03: disabled
    some other hardware get reconnected
    [611203.136277] OOM killer enabled.
    [611203.140637] Restarting tasks ...
    [611203.141135] usb 1-8.1: USB disconnect, device number 7
    [611203.141755] done.
    [611203.155268] random: crng reseeded on system resumption
    [611203.162059] PM: suspend exit
    
    After investigation, I noticed that for the code block
    if (write(power_state_fd, "mem", strlen("mem")) != strlen("mem"))
            ksft_exit_fail_msg("Failed to enter Suspend state\n");
    
    The write will return -1 and errno is set to 16 (device busy).
    It should be caused by the write function is not successfully returned
    before the system suspend and the return value get messed when waking up.
    As a result, It may be better to check the time passed of those few
    instructions to determine whether the suspend is executed correctly for
    it is pretty hard to execute those few lines for 5 seconds.
    
    The timer to wake up the system is set to expire after 5 seconds and
    no re-arm. If the timer remaining time is 0 second and 0 nano secomd,
    it means the timer expired and wake the system up. Otherwise, the system
    could be considered to enter the suspend state failed if there is any
    remaining time.
    
    After appling this patch, the test would not fail for it believes the
    system does not go to suspend by mistake. It now could continue to the
    rest part of the test after suspend.
    
    Fixes: bfd092b8c272 ("selftests: breakpoint: add step_after_suspend_test")
    Reported-by: Sinadin Shan <sinadin.shan@oracle.com>
    Signed-off-by: Yifei Liu <yifei.l.liu@oracle.com>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: net: more strict check in net_helper [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Feb 12 11:19:23 2024 +0100

    selftests: net: more strict check in net_helper
    
    commit a71d0908e32f3dd41e355d83eeadd44d94811fd6 upstream.
    
    The helper waiting for a listener port can match any socket whose
    hexadecimal representation of source or destination addresses
    matches that of the given port.
    
    Additionally, any socket state is accepted.
    
    All the above can let the helper return successfully before the
    relevant listener is actually ready, with unexpected results.
    
    So far I could not find any related failure in the netdev CI, but
    the next patch is going to make the critical event more easily
    reproducible.
    
    Address the issue matching the port hex only vs the relevant socket
    field and additionally checking the socket state for TCP sockets.
    
    Fixes: 3bdd9fd29cb0 ("selftests/net: synchronize udpgro tests' tx and rx connection")
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Link: https://lore.kernel.org/r/192b3dbc443d953be32991d1b0ca432bd4c65008.1707731086.git.pabeni@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: net: Remove executable bits from library scripts [+ + +]
Author: Benjamin Poirier <bpoirier@nvidia.com>
Date:   Wed Jan 31 09:08:46 2024 -0500

    selftests: net: Remove executable bits from library scripts
    
    [ Upstream commit 9d851dd4dab63e95c1911a2fa847796d1ec5d58d ]
    
    setup_loopback.sh and net_helper.sh are meant to be sourced from other
    scripts, not executed directly. Therefore, remove the executable bits from
    those files' permissions.
    
    This change is similar to commit 49078c1b80b6 ("selftests: forwarding:
    Remove executable bits from lib.sh")
    
    Fixes: 7d1575014a63 ("selftests/net: GRO coalesce test")
    Fixes: 3bdd9fd29cb0 ("selftests/net: synchronize udpgro tests' tx and rx connection")
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Benjamin Poirier <bpoirier@nvidia.com>
    Link: https://lore.kernel.org/r/20240131140848.360618-4-bpoirier@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: vDSO: fix ELF hash table entry size for s390x [+ + +]
Author: Jens Remus <jremus@linux.ibm.com>
Date:   Wed Sep 11 10:50:14 2024 +0200

    selftests: vDSO: fix ELF hash table entry size for s390x
    
    [ Upstream commit 14be4e6f35221c4731b004553ecf7cbc6dc1d2d8 ]
    
    The vDSO self tests fail on s390x for a vDSO linked with the GNU linker
    ld as follows:
    
      # ./vdso_test_gettimeofday
      Floating point exception (core dumped)
    
    On s390x the ELF hash table entries are 64 bits instead of 32 bits in
    size (see Glibc sysdeps/unix/sysv/linux/s390/bits/elfclass.h).
    
    Fixes: 40723419f407 ("kselftest: Enable vDSO test on non x86 platforms")
    Reported-by: Heiko Carstens <hca@linux.ibm.com>
    Tested-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Jens Remus <jremus@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: vDSO: fix vDSO name for powerpc [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Fri Aug 30 14:28:35 2024 +0200

    selftests: vDSO: fix vDSO name for powerpc
    
    [ Upstream commit 59eb856c3ed9b3552befd240c0c339f22eed3fa1 ]
    
    Following error occurs when running vdso_test_correctness on powerpc:
    
    ~ # ./vdso_test_correctness
    [WARN]  failed to find vDSO
    [SKIP]  No vDSO, so skipping clock_gettime() tests
    [SKIP]  No vDSO, so skipping clock_gettime64() tests
    [RUN]   Testing getcpu...
    [OK]    CPU 0: syscall: cpu 0, node 0
    
    On powerpc, vDSO is neither called linux-vdso.so.1 nor linux-gate.so.1
    but linux-vdso32.so.1 or linux-vdso64.so.1.
    
    Also search those two names before giving up.
    
    Fixes: c7e5789b24d3 ("kselftest: Move test_vdso to the vDSO test suite")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: vDSO: fix vDSO symbols lookup for powerpc64 [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Fri Aug 30 14:28:37 2024 +0200

    selftests: vDSO: fix vDSO symbols lookup for powerpc64
    
    [ Upstream commit ba83b3239e657469709d15dcea5f9b65bf9dbf34 ]
    
    On powerpc64, following tests fail locating vDSO functions:
    
      ~ # ./vdso_test_abi
      TAP version 13
      1..16
      # [vDSO kselftest] VDSO_VERSION: LINUX_2.6.15
      # Couldn't find __kernel_gettimeofday
      ok 1 # SKIP __kernel_gettimeofday
      # clock_id: CLOCK_REALTIME
      # Couldn't find __kernel_clock_gettime
      ok 2 # SKIP __kernel_clock_gettime CLOCK_REALTIME
      # Couldn't find __kernel_clock_getres
      ok 3 # SKIP __kernel_clock_getres CLOCK_REALTIME
      ...
      # Couldn't find __kernel_time
      ok 16 # SKIP __kernel_time
      # Totals: pass:0 fail:0 xfail:0 xpass:0 skip:16 error:0
    
      ~ # ./vdso_test_getrandom
      __kernel_getrandom is missing!
    
      ~ # ./vdso_test_gettimeofday
      Could not find __kernel_gettimeofday
    
      ~ # ./vdso_test_getcpu
      Could not find __kernel_getcpu
    
    On powerpc64, as shown below by readelf, vDSO functions symbols have
    type NOTYPE, so also accept that type when looking for symbols.
    
    $ powerpc64-linux-gnu-readelf -a arch/powerpc/kernel/vdso/vdso64.so.dbg
    ELF Header:
      Magic:   7f 45 4c 46 02 02 01 00 00 00 00 00 00 00 00 00
      Class:                             ELF64
      Data:                              2's complement, big endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              DYN (Shared object file)
      Machine:                           PowerPC64
      Version:                           0x1
    ...
    
    Symbol table '.dynsym' contains 12 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
         0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
         1: 0000000000000524    84 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
         2: 00000000000005f0    36 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
         3: 0000000000000578    68 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
         4: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.6.15
         5: 00000000000006c0    48 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
         6: 0000000000000614   172 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
         7: 00000000000006f0    84 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
         8: 000000000000047c    84 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
         9: 0000000000000454    12 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
        10: 00000000000004d0    84 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
        11: 00000000000005bc    52 NOTYPE  GLOBAL DEFAULT    8 __[...]@@LINUX_2.6.15
    
    Symbol table '.symtab' contains 56 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
    ...
        45: 0000000000000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.6.15
        46: 00000000000006c0    48 NOTYPE  GLOBAL DEFAULT    8 __kernel_getcpu
        47: 0000000000000524    84 NOTYPE  GLOBAL DEFAULT    8 __kernel_clock_getres
        48: 00000000000005f0    36 NOTYPE  GLOBAL DEFAULT    8 __kernel_get_tbfreq
        49: 000000000000047c    84 NOTYPE  GLOBAL DEFAULT    8 __kernel_gettimeofday
        50: 0000000000000614   172 NOTYPE  GLOBAL DEFAULT    8 __kernel_sync_dicache
        51: 00000000000006f0    84 NOTYPE  GLOBAL DEFAULT    8 __kernel_getrandom
        52: 0000000000000454    12 NOTYPE  GLOBAL DEFAULT    8 __kernel_sigtram[...]
        53: 0000000000000578    68 NOTYPE  GLOBAL DEFAULT    8 __kernel_time
        54: 00000000000004d0    84 NOTYPE  GLOBAL DEFAULT    8 __kernel_clock_g[...]
        55: 00000000000005bc    52 NOTYPE  GLOBAL DEFAULT    8 __kernel_get_sys[...]
    
    Fixes: 98eedc3a9dbf ("Document the vDSO and add a reference parser")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: vDSO: fix vdso_config for powerpc [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Fri Aug 30 14:28:36 2024 +0200

    selftests: vDSO: fix vdso_config for powerpc
    
    [ Upstream commit 7d297c419b08eafa69ce27243ee9bbecab4fcaa4 ]
    
    Running vdso_test_correctness on powerpc64 gives the following warning:
    
      ~ # ./vdso_test_correctness
      Warning: failed to find clock_gettime64 in vDSO
    
    This is because vdso_test_correctness was built with VDSO_32BIT defined.
    
    __powerpc__ macro is defined on both powerpc32 and powerpc64 so
    __powerpc64__ needs to be checked first in vdso_config.h
    
    Fixes: 693f5ca08ca0 ("kselftest: Extend vDSO selftest")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: vDSO: fix vdso_config for s390 [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Wed Sep 11 10:50:15 2024 +0200

    selftests: vDSO: fix vdso_config for s390
    
    [ Upstream commit a6e23fb8d3c0e3904da70beaf5d7e840a983c97f ]
    
    Running vdso_test_correctness on s390x (aka s390 64 bit) emits a warning:
    
    Warning: failed to find clock_gettime64 in vDSO
    
    This is caused by the "#elif defined (__s390__)" check in vdso_config.h
    which the defines VDSO_32BIT.
    
    If __s390x__ is defined also __s390__ is defined. Therefore the correct
    check must make sure that only __s390__ is defined.
    
    Therefore add the missing !defined(__s390x__). Also use common
    __s390x__ define instead of __s390X__.
    
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Fixes: 693f5ca08ca0 ("kselftest: Extend vDSO selftest")
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selinux,smack: don't bypass permissions check in inode_setsecctx hook [+ + +]
Author: Scott Mayhew <smayhew@redhat.com>
Date:   Wed Aug 28 15:51:29 2024 -0400

    selinux,smack: don't bypass permissions check in inode_setsecctx hook
    
    commit 76a0e79bc84f466999fa501fce5bf7a07641b8a7 upstream.
    
    Marek Gresko reports that the root user on an NFS client is able to
    change the security labels on files on an NFS filesystem that is
    exported with root squashing enabled.
    
    The end of the kerneldoc comment for __vfs_setxattr_noperm() states:
    
     *  This function requires the caller to lock the inode's i_mutex before it
     *  is executed. It also assumes that the caller will make the appropriate
     *  permission checks.
    
    nfsd_setattr() does do permissions checking via fh_verify() and
    nfsd_permission(), but those don't do all the same permissions checks
    that are done by security_inode_setxattr() and its related LSM hooks do.
    
    Since nfsd_setattr() is the only consumer of security_inode_setsecctx(),
    simplest solution appears to be to replace the call to
    __vfs_setxattr_noperm() with a call to __vfs_setxattr_locked().  This
    fixes the above issue and has the added benefit of causing nfsd to
    recall conflicting delegations on a file when a client tries to change
    its security label.
    
    Cc: stable@kernel.org
    Reported-by: Marek Gresko <marek.gresko@protonmail.com>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218809
    Signed-off-by: Scott Mayhew <smayhew@redhat.com>
    Tested-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Reviewed-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Acked-by: Casey Schaufler <casey@schaufler-ca.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    [Shivani: Modified to apply on v5.15.y-v6.1.y]
    Signed-off-by: Shivani Agarwal <shivani.agarwal@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
signal: Replace BUG_ON()s [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Mon Jun 10 18:42:34 2024 +0200

    signal: Replace BUG_ON()s
    
    [ Upstream commit 7f8af7bac5380f2d95a63a6f19964e22437166e1 ]
    
    These really can be handled gracefully without killing the machine.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Reviewed-by: Oleg Nesterov <oleg@redhat.com>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
slip: make slhc_remember() more robust against malicious packets [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Oct 9 09:11:32 2024 +0000

    slip: make slhc_remember() more robust against malicious packets
    
    [ Upstream commit 7d3fce8cbe3a70a1c7c06c9b53696be5d5d8dd5c ]
    
    syzbot found that slhc_remember() was missing checks against
    malicious packets [1].
    
    slhc_remember() only checked the size of the packet was at least 20,
    which is not good enough.
    
    We need to make sure the packet includes the IPv4 and TCP header
    that are supposed to be carried.
    
    Add iph and th pointers to make the code more readable.
    
    [1]
    
    BUG: KMSAN: uninit-value in slhc_remember+0x2e8/0x7b0 drivers/net/slip/slhc.c:666
      slhc_remember+0x2e8/0x7b0 drivers/net/slip/slhc.c:666
      ppp_receive_nonmp_frame+0xe45/0x35e0 drivers/net/ppp/ppp_generic.c:2455
      ppp_receive_frame drivers/net/ppp/ppp_generic.c:2372 [inline]
      ppp_do_recv+0x65f/0x40d0 drivers/net/ppp/ppp_generic.c:2212
      ppp_input+0x7dc/0xe60 drivers/net/ppp/ppp_generic.c:2327
      pppoe_rcv_core+0x1d3/0x720 drivers/net/ppp/pppoe.c:379
      sk_backlog_rcv+0x13b/0x420 include/net/sock.h:1113
      __release_sock+0x1da/0x330 net/core/sock.c:3072
      release_sock+0x6b/0x250 net/core/sock.c:3626
      pppoe_sendmsg+0x2b8/0xb90 drivers/net/ppp/pppoe.c:903
      sock_sendmsg_nosec net/socket.c:729 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:744
      ____sys_sendmsg+0x903/0xb60 net/socket.c:2602
      ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2656
      __sys_sendmmsg+0x3c1/0x960 net/socket.c:2742
      __do_sys_sendmmsg net/socket.c:2771 [inline]
      __se_sys_sendmmsg net/socket.c:2768 [inline]
      __x64_sys_sendmmsg+0xbc/0x120 net/socket.c:2768
      x64_sys_call+0xb6e/0x3ba0 arch/x86/include/generated/asm/syscalls_64.h:308
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:4091 [inline]
      slab_alloc_node mm/slub.c:4134 [inline]
      kmem_cache_alloc_node_noprof+0x6bf/0xb80 mm/slub.c:4186
      kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:587
      __alloc_skb+0x363/0x7b0 net/core/skbuff.c:678
      alloc_skb include/linux/skbuff.h:1322 [inline]
      sock_wmalloc+0xfe/0x1a0 net/core/sock.c:2732
      pppoe_sendmsg+0x3a7/0xb90 drivers/net/ppp/pppoe.c:867
      sock_sendmsg_nosec net/socket.c:729 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:744
      ____sys_sendmsg+0x903/0xb60 net/socket.c:2602
      ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2656
      __sys_sendmmsg+0x3c1/0x960 net/socket.c:2742
      __do_sys_sendmmsg net/socket.c:2771 [inline]
      __se_sys_sendmmsg net/socket.c:2768 [inline]
      __x64_sys_sendmmsg+0xbc/0x120 net/socket.c:2768
      x64_sys_call+0xb6e/0x3ba0 arch/x86/include/generated/asm/syscalls_64.h:308
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 0 UID: 0 PID: 5460 Comm: syz.2.33 Not tainted 6.12.0-rc2-syzkaller-00006-g87d6aab2389e #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    
    Fixes: b5451d783ade ("slip: Move the SLIP drivers")
    Reported-by: syzbot+2ada1bc857496353be5a@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/670646db.050a0220.3f80e.0027.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241009091132.2136321-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso [+ + +]
Author: Jiawei Ye <jiawei.ye@foxmail.com>
Date:   Mon Sep 2 08:47:26 2024 +0000

    smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso
    
    [ Upstream commit 2749749afa071f8a0e405605de9da615e771a7ce ]
    
    In the `smk_set_cipso` function, the `skp->smk_netlabel.attr.mls.cat`
    field is directly assigned to a new value without using the appropriate
    RCU pointer assignment functions. According to RCU usage rules, this is
    illegal and can lead to unpredictable behavior, including data
    inconsistencies and impossible-to-diagnose memory corruption issues.
    
    This possible bug was identified using a static analysis tool developed
    by myself, specifically designed to detect RCU-related issues.
    
    To address this, the assignment is now done using rcu_assign_pointer(),
    which ensures that the pointer assignment is done safely, with the
    necessary memory barriers and synchronization. This change prevents
    potential RCU dereference issues by ensuring that the `cat` field is
    safely updated while still adhering to RCU's requirements.
    
    Fixes: 0817534ff9ea ("smackfs: Fix use-after-free in netlbl_catmap_walk()")
    Signed-off-by: Jiawei Ye <jiawei.ye@foxmail.com>
    Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc: versatile: integrator: fix OF node leak in probe() error path [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun Aug 25 20:05:22 2024 +0200

    soc: versatile: integrator: fix OF node leak in probe() error path
    
    commit 874c5b601856adbfda10846b9770a6c66c41e229 upstream.
    
    Driver is leaking OF node reference obtained from
    of_find_matching_node().
    
    Fixes: f956a785a282 ("soc: move SoC driver for the ARM Integrator")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/20240825-soc-dev-fixes-v1-1-ff4b35abed83@linaro.org
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

soc: versatile: realview: fix memory leak during device remove [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun Aug 25 20:05:23 2024 +0200

    soc: versatile: realview: fix memory leak during device remove
    
    [ Upstream commit 1c4f26a41f9d052f334f6ae629e01f598ed93508 ]
    
    If device is unbound, the memory allocated for soc_dev_attr should be
    freed to prevent leaks.
    
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/20240825-soc-dev-fixes-v1-2-ff4b35abed83@linaro.org
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Stable-dep-of: c774f2564c00 ("soc: versatile: realview: fix soc_dev leak during device remove")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: versatile: realview: fix soc_dev leak during device remove [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Sun Aug 25 20:05:24 2024 +0200

    soc: versatile: realview: fix soc_dev leak during device remove
    
    [ Upstream commit c774f2564c0086c23f5269fd4691f233756bf075 ]
    
    If device is unbound, the soc_dev should be unregistered to prevent
    memory leak.
    
    Fixes: a2974c9c1f83 ("soc: add driver for the ARM RealView")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/20240825-soc-dev-fixes-v1-3-ff4b35abed83@linaro.org
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sock_map: Add a cond_resched() in sock_hash_free() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Sep 6 15:44:49 2024 +0000

    sock_map: Add a cond_resched() in sock_hash_free()
    
    [ Upstream commit b1339be951ad31947ae19bc25cb08769bf255100 ]
    
    Several syzbot soft lockup reports all have in common sock_hash_free()
    
    If a map with a large number of buckets is destroyed, we need to yield
    the cpu when needed.
    
    Fixes: 75e68e5bf2c7 ("bpf, sockhash: Synchronize delete from bucket list on map free")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20240906154449.3742932-1-edumazet@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps" [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Date:   Mon Sep 9 18:47:46 2024 +0200

    soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps"
    
    commit 233a95fd574fde1c375c486540a90304a2d2d49f upstream.
    
    This reverts commit ab8d66d132bc8f1992d3eb6cab8d32dda6733c84 because it
    breaks codecs using non-continuous masks in source and sink ports.  The
    commit missed the point that port numbers are not used as indices for
    iterating over prop.sink_ports or prop.source_ports.
    
    Soundwire core and existing codecs expect that the array passed as
    prop.sink_ports and prop.source_ports is continuous.  The port mask still
    might be non-continuous, but that's unrelated.
    
    Reported-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Closes: https://lore.kernel.org/all/b6c75eee-761d-44c8-8413-2a5b34ee2f98@linux.intel.com/
    Fixes: ab8d66d132bc ("soundwire: stream: fix programming slave ports for non-continous port maps")
    Acked-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Tested-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Link: https://lore.kernel.org/r/20240909164746.136629-1-krzysztof.kozlowski@linaro.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
spi: bcm63xx: Enable module autoloading [+ + +]
Author: Liao Chen <liaochen4@huawei.com>
Date:   Sat Aug 31 09:42:31 2024 +0000

    spi: bcm63xx: Enable module autoloading
    
    [ Upstream commit 709df70a20e990d262c473ad9899314039e8ec82 ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded based
    on the alias from of_device_id table.
    
    Signed-off-by: Liao Chen <liaochen4@huawei.com>
    Link: https://patch.msgid.link/20240831094231.795024-1-liaochen4@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: bcm63xx: Fix missing pm_runtime_disable() [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Mon Aug 19 20:33:49 2024 +0800

    spi: bcm63xx: Fix missing pm_runtime_disable()
    
    [ Upstream commit 265697288ec2160ca84707565d6641d46f69b0ff ]
    
    The pm_runtime_disable() is missing in the remove function, fix it
    by using devm_pm_runtime_enable(), so the pm_runtime_disable() in
    the probe error path can also be removed.
    
    Fixes: 2d13f2ff6073 ("spi: bcm63xx-spi: fix pm_runtime")
    Cc: stable@vger.kernel.org # v5.13+
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Suggested-by: Jonas Gorski <jonas.gorski@gmail.com>
    Link: https://patch.msgid.link/20240819123349.4020472-3-ruanjinjie@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: bcm63xx: Fix module autoloading [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Mon Aug 19 20:33:48 2024 +0800

    spi: bcm63xx: Fix module autoloading
    
    commit 909f34f2462a99bf876f64c5c61c653213e32fce upstream.
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded
    based on the alias from platform_device_id table.
    
    Fixes: 44d8fb30941d ("spi/bcm63xx: move register definitions into the driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Reviewed-by: Jonas Gorski <jonas.gorski@gmail.com>
    Link: https://patch.msgid.link/20240819123349.4020472-2-ruanjinjie@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: lpspi: release requested DMA channels [+ + +]
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date:   Tue Nov 9 11:31:34 2021 +0100

    spi: lpspi: release requested DMA channels
    
    [ Upstream commit f02bff30114f385d53ae3e45141db602923bca5d ]
    
    The requested DMA channels are never released. Do this in .remove as well
    as in .probe. spi_register_controller() can return -EPROBE_DEFER if
    cs-gpios are not probed yet.
    
    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Link: https://lore.kernel.org/r/20211109103134.184216-1-alexander.stein@ew.tq-group.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 3b577de206d5 ("spi: spi-fsl-lpspi: Undo runtime PM changes at driver exit time")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: lpspi: Silence error message upon deferred probe [+ + +]
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date:   Mon Nov 8 15:55:23 2021 +0100

    spi: lpspi: Silence error message upon deferred probe
    
    [ Upstream commit 12f62a857c83b2efcbf8d9961aacd352bf81ad3d ]
    
    Do not print error messages with error code -517. Silences the following
    errors upon on imx8qm:
    fsl_lpspi 5a000000.spi: spi_register_controller error: -517
    fsl_lpspi 5a010000.spi: spi_register_controller error: -517
    fsl_lpspi 5a020000.spi: spi_register_controller error: -517
    
    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Link: https://lore.kernel.org/r/20211108145523.1797609-1-alexander.stein@ew.tq-group.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 3b577de206d5 ("spi: spi-fsl-lpspi: Undo runtime PM changes at driver exit time")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: lpspi: Simplify some error message [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Fri Aug 5 23:39:19 2022 +0200

    spi: lpspi: Simplify some error message
    
    commit 0df874c6712d9aa8f43c50ec887a21f7b86fc917 upstream.
    
    dev_err_probe() already prints the error code in a human readable way, so
    there is no need to duplicate it as a numerical value at the end of the
    message.
    
    Fixes: 12f62a857c83 ("spi: lpspi: Silence error message upon deferred probe")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Acked-By: Alexander Stein <alexander.stein@ew.tq-group.com>
    Link: https://lore.kernel.org/r/253543c462b765eca40ba54c66f4e3fdf4acdeb7.1659735546.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: nxp-fspi: fix the KASAN report out-of-bounds bug [+ + +]
Author: Han Xu <han.xu@nxp.com>
Date:   Wed Sep 11 16:11:45 2024 -0500

    spi: nxp-fspi: fix the KASAN report out-of-bounds bug
    
    commit 2a8787c1cdc7be24fdd8953ecd1a8743a1006235 upstream.
    
    Change the memcpy length to fix the out-of-bounds issue when writing the
    data that is not 4 byte aligned to TX FIFO.
    
    To reproduce the issue, write 3 bytes data to NOR chip.
    
    dd if=3b of=/dev/mtd0
    [   36.926103] ==================================================================
    [   36.933409] BUG: KASAN: slab-out-of-bounds in nxp_fspi_exec_op+0x26ec/0x2838
    [   36.940514] Read of size 4 at addr ffff00081037c2a0 by task dd/455
    [   36.946721]
    [   36.948235] CPU: 3 UID: 0 PID: 455 Comm: dd Not tainted 6.11.0-rc5-gc7b0e37c8434 #1070
    [   36.956185] Hardware name: Freescale i.MX8QM MEK (DT)
    [   36.961260] Call trace:
    [   36.963723]  dump_backtrace+0x90/0xe8
    [   36.967414]  show_stack+0x18/0x24
    [   36.970749]  dump_stack_lvl+0x78/0x90
    [   36.974451]  print_report+0x114/0x5cc
    [   36.978151]  kasan_report+0xa4/0xf0
    [   36.981670]  __asan_report_load_n_noabort+0x1c/0x28
    [   36.986587]  nxp_fspi_exec_op+0x26ec/0x2838
    [   36.990800]  spi_mem_exec_op+0x8ec/0xd30
    [   36.994762]  spi_mem_no_dirmap_read+0x190/0x1e0
    [   36.999323]  spi_mem_dirmap_write+0x238/0x32c
    [   37.003710]  spi_nor_write_data+0x220/0x374
    [   37.007932]  spi_nor_write+0x110/0x2e8
    [   37.011711]  mtd_write_oob_std+0x154/0x1f0
    [   37.015838]  mtd_write_oob+0x104/0x1d0
    [   37.019617]  mtd_write+0xb8/0x12c
    [   37.022953]  mtdchar_write+0x224/0x47c
    [   37.026732]  vfs_write+0x1e4/0x8c8
    [   37.030163]  ksys_write+0xec/0x1d0
    [   37.033586]  __arm64_sys_write+0x6c/0x9c
    [   37.037539]  invoke_syscall+0x6c/0x258
    [   37.041327]  el0_svc_common.constprop.0+0x160/0x22c
    [   37.046244]  do_el0_svc+0x44/0x5c
    [   37.049589]  el0_svc+0x38/0x78
    [   37.052681]  el0t_64_sync_handler+0x13c/0x158
    [   37.057077]  el0t_64_sync+0x190/0x194
    [   37.060775]
    [   37.062274] Allocated by task 455:
    [   37.065701]  kasan_save_stack+0x2c/0x54
    [   37.069570]  kasan_save_track+0x20/0x3c
    [   37.073438]  kasan_save_alloc_info+0x40/0x54
    [   37.077736]  __kasan_kmalloc+0xa0/0xb8
    [   37.081515]  __kmalloc_noprof+0x158/0x2f8
    [   37.085563]  mtd_kmalloc_up_to+0x120/0x154
    [   37.089690]  mtdchar_write+0x130/0x47c
    [   37.093469]  vfs_write+0x1e4/0x8c8
    [   37.096901]  ksys_write+0xec/0x1d0
    [   37.100332]  __arm64_sys_write+0x6c/0x9c
    [   37.104287]  invoke_syscall+0x6c/0x258
    [   37.108064]  el0_svc_common.constprop.0+0x160/0x22c
    [   37.112972]  do_el0_svc+0x44/0x5c
    [   37.116319]  el0_svc+0x38/0x78
    [   37.119401]  el0t_64_sync_handler+0x13c/0x158
    [   37.123788]  el0t_64_sync+0x190/0x194
    [   37.127474]
    [   37.128977] The buggy address belongs to the object at ffff00081037c2a0
    [   37.128977]  which belongs to the cache kmalloc-8 of size 8
    [   37.141177] The buggy address is located 0 bytes inside of
    [   37.141177]  allocated 3-byte region [ffff00081037c2a0, ffff00081037c2a3)
    [   37.153465]
    [   37.154971] The buggy address belongs to the physical page:
    [   37.160559] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x89037c
    [   37.168596] flags: 0xbfffe0000000000(node=0|zone=2|lastcpupid=0x1ffff)
    [   37.175149] page_type: 0xfdffffff(slab)
    [   37.179021] raw: 0bfffe0000000000 ffff000800002500 dead000000000122 0000000000000000
    [   37.186788] raw: 0000000000000000 0000000080800080 00000001fdffffff 0000000000000000
    [   37.194553] page dumped because: kasan: bad access detected
    [   37.200144]
    [   37.201647] Memory state around the buggy address:
    [   37.206460]  ffff00081037c180: fa fc fc fc fa fc fc fc fa fc fc fc fa fc fc fc
    [   37.213701]  ffff00081037c200: fa fc fc fc 05 fc fc fc 03 fc fc fc 02 fc fc fc
    [   37.220946] >ffff00081037c280: 06 fc fc fc 03 fc fc fc fc fc fc fc fc fc fc fc
    [   37.228186]                                ^
    [   37.232473]  ffff00081037c300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [   37.239718]  ffff00081037c380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [   37.246962] ==================================================================
    [   37.254394] Disabling lock debugging due to kernel taint
    0+1 records in
    0+1 records out
    3 bytes copied, 0.335911 s, 0.0 kB/s
    
    Fixes: a5356aef6a90 ("spi: spi-mem: Add driver for NXP FlexSPI controller")
    Cc: stable@kernel.org
    Signed-off-by: Han Xu <han.xu@nxp.com>
    Link: https://patch.msgid.link/20240911211146.3337068-1-han.xu@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Aug 14 17:45:12 2024 +0300

    spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ
    
    [ Upstream commit 7781f1d120fec8624fc654eda900fc8748262082 ]
    
    0 is incorrect error code when failed to parse and map IRQ.
    Replace OF specific old API for IRQ retrieval with a generic
    one to fix this issue.
    
    Fixes: 0f245463b01e ("spi: ppc4xx: handle irq_of_parse_and_map() errors")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://patch.msgid.link/20240814144525.2648450-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: ppc4xx: handle irq_of_parse_and_map() errors [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Wed Jul 24 16:40:47 2024 +0800

    spi: ppc4xx: handle irq_of_parse_and_map() errors
    
    [ Upstream commit 0f245463b01ea254ae90e1d0389e90b0e7d8dc75 ]
    
    Zero and negative number is not a valid IRQ for in-kernel code and the
    irq_of_parse_and_map() function returns zero on error.  So this check for
    valid IRQs should only accept values > 0.
    
    Fixes: 44dab88e7cc9 ("spi: add spi_ppc4xx driver")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Link: https://patch.msgid.link/20240724084047.1506084-1-make24@iscas.ac.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: s3c64xx: fix timeout counters in flush_fifo [+ + +]
Author: Ben Dooks <ben.dooks@codethink.co.uk>
Date:   Tue Sep 24 14:40:08 2024 +0100

    spi: s3c64xx: fix timeout counters in flush_fifo
    
    [ Upstream commit 68a16708d2503b6303d67abd43801e2ca40c208d ]
    
    In the s3c64xx_flush_fifo() code, the loops counter is post-decremented
    in the do { } while(test && loops--) condition. This means the loops is
    left at the unsigned equivalent of -1 if the loop times out. The test
    after will never pass as if tests for loops == 0.
    
    Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
    Fixes: 230d42d422e7 ("spi: Add s3c64xx SPI Controller driver")
    Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://patch.msgid.link/20240924134009.116247-2-ben.dooks@codethink.co.uk
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spi-fsl-lpspi: Undo runtime PM changes at driver exit time [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Fri Sep 6 10:12:51 2024 +0800

    spi: spi-fsl-lpspi: Undo runtime PM changes at driver exit time
    
    [ Upstream commit 3b577de206d52dbde9428664b6d823d35a803d75 ]
    
    It's important to undo pm_runtime_use_autosuspend() with
    pm_runtime_dont_use_autosuspend() at driver exit time unless driver
    initially enabled pm_runtime with devm_pm_runtime_enable()
    (which handles it for you).
    
    Hence, call pm_runtime_dont_use_autosuspend() at driver exit time
    to fix it.
    
    Fixes: 944c01a889d9 ("spi: lpspi: enable runtime pm for lpspi")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Link: https://patch.msgid.link/20240906021251.610462-1-ruanjinjie@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spi-imx: Fix pm_runtime_set_suspended() with runtime pm enabled [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Mon Sep 23 12:00:13 2024 +0800

    spi: spi-imx: Fix pm_runtime_set_suspended() with runtime pm enabled
    
    [ Upstream commit b6e05ba0844139dde138625906015c974c86aa93 ]
    
    It is not valid to call pm_runtime_set_suspended() for devices
    with runtime PM enabled because it returns -EAGAIN if it is enabled
    already and working. So, call pm_runtime_disable() before to fix it.
    
    Fixes: 43b6bf406cd0 ("spi: imx: fix runtime pm support for !CONFIG_PM")
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Link: https://patch.msgid.link/20240923040015.3009329-2-ruanjinjie@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: Add an entry for elgin,jg10309-01 [+ + +]
Author: Fabio Estevam <festevam@gmail.com>
Date:   Wed Aug 28 15:00:56 2024 -0300

    spi: spidev: Add an entry for elgin,jg10309-01
    
    [ Upstream commit 5f3eee1eef5d0edd23d8ac0974f56283649a1512 ]
    
    The rv1108-elgin-r1 board has an LCD controlled via SPI in userspace.
    The marking on the LCD is JG10309-01.
    
    Add the "elgin,jg10309-01" compatible string.
    
    Signed-off-by: Fabio Estevam <festevam@gmail.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patch.msgid.link/20240828180057.3167190-2-festevam@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spidev: Add missing spi_device_id for jg10309-01 [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Tue Sep 3 14:32:27 2024 +0200

    spi: spidev: Add missing spi_device_id for jg10309-01
    
    [ Upstream commit 5478a4f7b94414def7b56d2f18bc2ed9b0f3f1f2 ]
    
    When the of_device_id entry for "elgin,jg10309-01" was added, the
    corresponding spi_device_id was forgotten, causing a warning message
    during boot-up:
    
        SPI driver spidev has no spi_device_id for elgin,jg10309-01
    
    Fix module autoloading and shut up the warning by adding the missing
    entry.
    
    Fixes: 5f3eee1eef5d0edd ("spi: spidev: Add an entry for elgin,jg10309-01")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://patch.msgid.link/54bbb9d8a8db7e52d13e266f2d4a9bcd8b42a98a.1725366625.git.geert+renesas@glider.be
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
static_call: Handle module init failure correctly in static_call_del_module() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed Sep 4 11:09:07 2024 +0200

    static_call: Handle module init failure correctly in static_call_del_module()
    
    [ Upstream commit 4b30051c4864234ec57290c3d142db7c88f10d8a ]
    
    Module insertion invokes static_call_add_module() to initialize the static
    calls in a module. static_call_add_module() invokes __static_call_init(),
    which allocates a struct static_call_mod to either encapsulate the built-in
    static call sites of the associated key into it so further modules can be
    added or to append the module to the module chain.
    
    If that allocation fails the function returns with an error code and the
    module core invokes static_call_del_module() to clean up eventually added
    static_call_mod entries.
    
    This works correctly, when all keys used by the module were converted over
    to a module chain before the failure. If not then static_call_del_module()
    causes a #GP as it blindly assumes that key::mods points to a valid struct
    static_call_mod.
    
    The problem is that key::mods is not a individual struct member of struct
    static_call_key, it's part of a union to save space:
    
            union {
                    /* bit 0: 0 = mods, 1 = sites */
                    unsigned long type;
                    struct static_call_mod *mods;
                    struct static_call_site *sites;
            };
    
    key::sites is a pointer to the list of built-in usage sites of the static
    call. The type of the pointer is differentiated by bit 0. A mods pointer
    has the bit clear, the sites pointer has the bit set.
    
    As static_call_del_module() blidly assumes that the pointer is a valid
    static_call_mod type, it fails to check for this failure case and
    dereferences the pointer to the list of built-in call sites, which is
    obviously bogus.
    
    Cure it by checking whether the key has a sites or a mods pointer.
    
    If it's a sites pointer then the key is not to be touched. As the sites are
    walked in the same order as in __static_call_init() the site walk can be
    terminated because all subsequent sites have not been touched by the init
    code due to the error exit.
    
    If it was converted before the allocation fail, then the inner loop which
    searches for a module match will find nothing.
    
    A fail in the second allocation in __static_call_init() is harmless and
    does not require special treatment. The first allocation succeeded and
    converted the key to a module chain. That first entry has mod::mod == NULL
    and mod::next == NULL, so the inner loop of static_call_del_module() will
    neither find a module match nor a module chain. The next site in the walk
    was either already converted, but can't match the module, or it will exit
    the outer loop because it has a static_call_site pointer and not a
    static_call_mod pointer.
    
    Fixes: 9183c3f9ed71 ("static_call: Add inline static call infrastructure")
    Closes: https://lore.kernel.org/all/20230915082126.4187913-1-ruanjinjie@huawei.com
    Reported-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Jinjie Ruan <ruanjinjie@huawei.com>
    Link: https://lore.kernel.org/r/87zfon6b0s.ffs@tglx
    Signed-off-by: Sasha Levin <sashal@kernel.org>

static_call: Replace pointless WARN_ON() in static_call_module_notify() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed Sep 4 11:08:28 2024 +0200

    static_call: Replace pointless WARN_ON() in static_call_module_notify()
    
    [ Upstream commit fe513c2ef0a172a58f158e2e70465c4317f0a9a2 ]
    
    static_call_module_notify() triggers a WARN_ON(), when memory allocation
    fails in __static_call_add_module().
    
    That's not really justified, because the failure case must be correctly
    handled by the well known call chain and the error code is passed
    through to the initiating userspace application.
    
    A memory allocation fail is not a fatal problem, but the WARN_ON() takes
    the machine out when panic_on_warn is set.
    
    Replace it with a pr_warn().
    
    Fixes: 9183c3f9ed71 ("static_call: Add inline static call infrastructure")
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/8734mf7pmb.ffs@tglx
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
stmmac_pci: Fix underflow size in stmmac_rx [+ + +]
Author: Zekun Shen <bruceshenzk@gmail.com>
Date:   Thu Nov 18 16:42:47 2021 -0500

    stmmac_pci: Fix underflow size in stmmac_rx
    
    [ Upstream commit 0f296e782f21dc1c55475a3c107ac68ab09cc1cf ]
    
    This bug report came up when we were testing the device driver
    by fuzzing. It shows that buf1_len can get underflowed and be
    0xfffffffc (4294967292).
    
    This bug is triggerable with a compromised/malfunctioning device.
    We found the bug through QEMU emulation tested the patch with
    emulation. We did NOT test it on real hardware.
    
    Attached is the bug report by fuzzing.
    
    BUG: KASAN: use-after-free in stmmac_napi_poll_rx+0x1c08/0x36e0 [stmmac]
    Read of size 4294967292 at addr ffff888016358000 by task ksoftirqd/0/9
    
    CPU: 0 PID: 9 Comm: ksoftirqd/0 Tainted: G        W         5.6.0 #1
    Call Trace:
     dump_stack+0x76/0xa0
     print_address_description.constprop.0+0x16/0x200
     ? stmmac_napi_poll_rx+0x1c08/0x36e0 [stmmac]
     ? stmmac_napi_poll_rx+0x1c08/0x36e0 [stmmac]
     __kasan_report.cold+0x37/0x7c
     ? stmmac_napi_poll_rx+0x1c08/0x36e0 [stmmac]
     kasan_report+0xe/0x20
     check_memory_region+0x15a/0x1d0
     memcpy+0x20/0x50
     stmmac_napi_poll_rx+0x1c08/0x36e0 [stmmac]
     ? stmmac_suspend+0x850/0x850 [stmmac]
     ? __next_timer_interrupt+0xba/0xf0
     net_rx_action+0x363/0xbd0
     ? call_timer_fn+0x240/0x240
     ? __switch_to_asm+0x40/0x70
     ? napi_busy_loop+0x520/0x520
     ? __schedule+0x839/0x15a0
     __do_softirq+0x18c/0x634
     ? takeover_tasklets+0x5f0/0x5f0
     run_ksoftirqd+0x15/0x20
     smpboot_thread_fn+0x2f1/0x6b0
     ? smpboot_unregister_percpu_thread+0x160/0x160
     ? __kthread_parkme+0x80/0x100
     ? smpboot_unregister_percpu_thread+0x160/0x160
     kthread+0x2b5/0x3b0
     ? kthread_create_on_node+0xd0/0xd0
     ret_from_fork+0x22/0x40
    
    Reported-by: Brendan Dolan-Gavitt <brendandg@nyu.edu>
    Signed-off-by: Zekun Shen <bruceshenzk@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 4c1b56671b68 ("net: stmmac: dwmac4: extend timeout for VLAN Tag register busy bit check")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
SUNRPC: Fix integer overflow in decode_rc_list() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Thu Sep 19 11:50:33 2024 +0300

    SUNRPC: Fix integer overflow in decode_rc_list()
    
    [ Upstream commit 6dbf1f341b6b35bcc20ff95b6b315e509f6c5369 ]
    
    The math in "rc_list->rcl_nrefcalls * 2 * sizeof(uint32_t)" could have an
    integer overflow.  Add bounds checking on rc_list->rcl_nrefcalls to fix
    that.
    
    Fixes: 4aece6a19cf7 ("nfs41: cb_sequence xdr implementation")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: avoid reusing FIN_WAIT2 when trying to find port in connect() process [+ + +]
Author: Jason Xing <kernelxing@tencent.com>
Date:   Fri Aug 23 08:11:52 2024 +0800

    tcp: avoid reusing FIN_WAIT2 when trying to find port in connect() process
    
    [ Upstream commit 0d9e5df4a257afc3a471a82961ace9a22b88295a ]
    
    We found that one close-wait socket was reset by the other side
    due to a new connection reusing the same port which is beyond our
    expectation, so we have to investigate the underlying reason.
    
    The following experiment is conducted in the test environment. We
    limit the port range from 40000 to 40010 and delay the time to close()
    after receiving a fin from the active close side, which can help us
    easily reproduce like what happened in production.
    
    Here are three connections captured by tcpdump:
    127.0.0.1.40002 > 127.0.0.1.9999: Flags [S], seq 2965525191
    127.0.0.1.9999 > 127.0.0.1.40002: Flags [S.], seq 2769915070
    127.0.0.1.40002 > 127.0.0.1.9999: Flags [.], ack 1
    127.0.0.1.40002 > 127.0.0.1.9999: Flags [F.], seq 1, ack 1
    // a few seconds later, within 60 seconds
    127.0.0.1.40002 > 127.0.0.1.9999: Flags [S], seq 2965590730
    127.0.0.1.9999 > 127.0.0.1.40002: Flags [.], ack 2
    127.0.0.1.40002 > 127.0.0.1.9999: Flags [R], seq 2965525193
    // later, very quickly
    127.0.0.1.40002 > 127.0.0.1.9999: Flags [S], seq 2965590730
    127.0.0.1.9999 > 127.0.0.1.40002: Flags [S.], seq 3120990805
    127.0.0.1.40002 > 127.0.0.1.9999: Flags [.], ack 1
    
    As we can see, the first flow is reset because:
    1) client starts a new connection, I mean, the second one
    2) client tries to find a suitable port which is a timewait socket
       (its state is timewait, substate is fin_wait2)
    3) client occupies that timewait port to send a SYN
    4) server finds a corresponding close-wait socket in ehash table,
       then replies with a challenge ack
    5) client sends an RST to terminate this old close-wait socket.
    
    I don't think the port selection algo can choose a FIN_WAIT2 socket
    when we turn on tcp_tw_reuse because on the server side there
    remain unread data. In some cases, if one side haven't call close() yet,
    we should not consider it as expendable and treat it at will.
    
    Even though, sometimes, the server isn't able to call close() as soon
    as possible like what we expect, it can not be terminated easily,
    especially due to a second unrelated connection happening.
    
    After this patch, we can see the expected failure if we start a
    connection when all the ports are occupied in fin_wait2 state:
    "Ncat: Cannot assign requested address."
    
    Reported-by: Jade Dong <jadedong@tencent.com>
    Signed-off-by: Jason Xing <kernelxing@tencent.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240823001152.31004-1-kerneljasonxing@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: check skb is non-NULL in tcp_rto_delta_us() [+ + +]
Author: Josh Hunt <johunt@akamai.com>
Date:   Tue Sep 10 15:08:22 2024 -0400

    tcp: check skb is non-NULL in tcp_rto_delta_us()
    
    [ Upstream commit c8770db2d54437a5f49417ae7b46f7de23d14db6 ]
    
    We have some machines running stock Ubuntu 20.04.6 which is their 5.4.0-174-generic
    kernel that are running ceph and recently hit a null ptr dereference in
    tcp_rearm_rto(). Initially hitting it from the TLP path, but then later we also
    saw it getting hit from the RACK case as well. Here are examples of the oops
    messages we saw in each of those cases:
    
    Jul 26 15:05:02 rx [11061395.780353] BUG: kernel NULL pointer dereference, address: 0000000000000020
    Jul 26 15:05:02 rx [11061395.787572] #PF: supervisor read access in kernel mode
    Jul 26 15:05:02 rx [11061395.792971] #PF: error_code(0x0000) - not-present page
    Jul 26 15:05:02 rx [11061395.798362] PGD 0 P4D 0
    Jul 26 15:05:02 rx [11061395.801164] Oops: 0000 [#1] SMP NOPTI
    Jul 26 15:05:02 rx [11061395.805091] CPU: 0 PID: 9180 Comm: msgr-worker-1 Tainted: G W 5.4.0-174-generic #193-Ubuntu
    Jul 26 15:05:02 rx [11061395.814996] Hardware name: Supermicro SMC 2x26 os-gen8 64C NVME-Y 256G/H12SSW-NTR, BIOS 2.5.V1.2U.NVMe.UEFI 05/09/2023
    Jul 26 15:05:02 rx [11061395.825952] RIP: 0010:tcp_rearm_rto+0xe4/0x160
    Jul 26 15:05:02 rx [11061395.830656] Code: 87 ca 04 00 00 00 5b 41 5c 41 5d 5d c3 c3 49 8b bc 24 40 06 00 00 eb 8d 48 bb cf f7 53 e3 a5 9b c4 20 4c 89 ef e8 0c fe 0e 00 <48> 8b 78 20 48 c1 ef 03 48 89 f8 41 8b bc 24 80 04 00 00 48 f7 e3
    Jul 26 15:05:02 rx [11061395.849665] RSP: 0018:ffffb75d40003e08 EFLAGS: 00010246
    Jul 26 15:05:02 rx [11061395.855149] RAX: 0000000000000000 RBX: 20c49ba5e353f7cf RCX: 0000000000000000
    Jul 26 15:05:02 rx [11061395.862542] RDX: 0000000062177c30 RSI: 000000000000231c RDI: ffff9874ad283a60
    Jul 26 15:05:02 rx [11061395.869933] RBP: ffffb75d40003e20 R08: 0000000000000000 R09: ffff987605e20aa8
    Jul 26 15:05:02 rx [11061395.877318] R10: ffffb75d40003f00 R11: ffffb75d4460f740 R12: ffff9874ad283900
    Jul 26 15:05:02 rx [11061395.884710] R13: ffff9874ad283a60 R14: ffff9874ad283980 R15: ffff9874ad283d30
    Jul 26 15:05:02 rx [11061395.892095] FS: 00007f1ef4a2e700(0000) GS:ffff987605e00000(0000) knlGS:0000000000000000
    Jul 26 15:05:02 rx [11061395.900438] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    Jul 26 15:05:02 rx [11061395.906435] CR2: 0000000000000020 CR3: 0000003e450ba003 CR4: 0000000000760ef0
    Jul 26 15:05:02 rx [11061395.913822] PKRU: 55555554
    Jul 26 15:05:02 rx [11061395.916786] Call Trace:
    Jul 26 15:05:02 rx [11061395.919488]
    Jul 26 15:05:02 rx [11061395.921765] ? show_regs.cold+0x1a/0x1f
    Jul 26 15:05:02 rx [11061395.925859] ? __die+0x90/0xd9
    Jul 26 15:05:02 rx [11061395.929169] ? no_context+0x196/0x380
    Jul 26 15:05:02 rx [11061395.933088] ? ip6_protocol_deliver_rcu+0x4e0/0x4e0
    Jul 26 15:05:02 rx [11061395.938216] ? ip6_sublist_rcv_finish+0x3d/0x50
    Jul 26 15:05:02 rx [11061395.943000] ? __bad_area_nosemaphore+0x50/0x1a0
    Jul 26 15:05:02 rx [11061395.947873] ? bad_area_nosemaphore+0x16/0x20
    Jul 26 15:05:02 rx [11061395.952486] ? do_user_addr_fault+0x267/0x450
    Jul 26 15:05:02 rx [11061395.957104] ? ipv6_list_rcv+0x112/0x140
    Jul 26 15:05:02 rx [11061395.961279] ? __do_page_fault+0x58/0x90
    Jul 26 15:05:02 rx [11061395.965458] ? do_page_fault+0x2c/0xe0
    Jul 26 15:05:02 rx [11061395.969465] ? page_fault+0x34/0x40
    Jul 26 15:05:02 rx [11061395.973217] ? tcp_rearm_rto+0xe4/0x160
    Jul 26 15:05:02 rx [11061395.977313] ? tcp_rearm_rto+0xe4/0x160
    Jul 26 15:05:02 rx [11061395.981408] tcp_send_loss_probe+0x10b/0x220
    Jul 26 15:05:02 rx [11061395.985937] tcp_write_timer_handler+0x1b4/0x240
    Jul 26 15:05:02 rx [11061395.990809] tcp_write_timer+0x9e/0xe0
    Jul 26 15:05:02 rx [11061395.994814] ? tcp_write_timer_handler+0x240/0x240
    Jul 26 15:05:02 rx [11061395.999866] call_timer_fn+0x32/0x130
    Jul 26 15:05:02 rx [11061396.003782] __run_timers.part.0+0x180/0x280
    Jul 26 15:05:02 rx [11061396.008309] ? recalibrate_cpu_khz+0x10/0x10
    Jul 26 15:05:02 rx [11061396.012841] ? native_x2apic_icr_write+0x30/0x30
    Jul 26 15:05:02 rx [11061396.017718] ? lapic_next_event+0x21/0x30
    Jul 26 15:05:02 rx [11061396.021984] ? clockevents_program_event+0x8f/0xe0
    Jul 26 15:05:02 rx [11061396.027035] run_timer_softirq+0x2a/0x50
    Jul 26 15:05:02 rx [11061396.031212] __do_softirq+0xd1/0x2c1
    Jul 26 15:05:02 rx [11061396.035044] do_softirq_own_stack+0x2a/0x40
    Jul 26 15:05:02 rx [11061396.039480]
    Jul 26 15:05:02 rx [11061396.041840] do_softirq.part.0+0x46/0x50
    Jul 26 15:05:02 rx [11061396.046022] __local_bh_enable_ip+0x50/0x60
    Jul 26 15:05:02 rx [11061396.050460] _raw_spin_unlock_bh+0x1e/0x20
    Jul 26 15:05:02 rx [11061396.054817] nf_conntrack_tcp_packet+0x29e/0xbe0 [nf_conntrack]
    Jul 26 15:05:02 rx [11061396.060994] ? get_l4proto+0xe7/0x190 [nf_conntrack]
    Jul 26 15:05:02 rx [11061396.066220] nf_conntrack_in+0xe9/0x670 [nf_conntrack]
    Jul 26 15:05:02 rx [11061396.071618] ipv6_conntrack_local+0x14/0x20 [nf_conntrack]
    Jul 26 15:05:02 rx [11061396.077356] nf_hook_slow+0x45/0xb0
    Jul 26 15:05:02 rx [11061396.081098] ip6_xmit+0x3f0/0x5d0
    Jul 26 15:05:02 rx [11061396.084670] ? ipv6_anycast_cleanup+0x50/0x50
    Jul 26 15:05:02 rx [11061396.089282] ? __sk_dst_check+0x38/0x70
    Jul 26 15:05:02 rx [11061396.093381] ? inet6_csk_route_socket+0x13b/0x200
    Jul 26 15:05:02 rx [11061396.098346] inet6_csk_xmit+0xa7/0xf0
    Jul 26 15:05:02 rx [11061396.102263] __tcp_transmit_skb+0x550/0xb30
    Jul 26 15:05:02 rx [11061396.106701] tcp_write_xmit+0x3c6/0xc20
    Jul 26 15:05:02 rx [11061396.110792] ? __alloc_skb+0x98/0x1d0
    Jul 26 15:05:02 rx [11061396.114708] __tcp_push_pending_frames+0x37/0x100
    Jul 26 15:05:02 rx [11061396.119667] tcp_push+0xfd/0x100
    Jul 26 15:05:02 rx [11061396.123150] tcp_sendmsg_locked+0xc70/0xdd0
    Jul 26 15:05:02 rx [11061396.127588] tcp_sendmsg+0x2d/0x50
    Jul 26 15:05:02 rx [11061396.131245] inet6_sendmsg+0x43/0x70
    Jul 26 15:05:02 rx [11061396.135075] __sock_sendmsg+0x48/0x70
    Jul 26 15:05:02 rx [11061396.138994] ____sys_sendmsg+0x212/0x280
    Jul 26 15:05:02 rx [11061396.143172] ___sys_sendmsg+0x88/0xd0
    Jul 26 15:05:02 rx [11061396.147098] ? __seccomp_filter+0x7e/0x6b0
    Jul 26 15:05:02 rx [11061396.151446] ? __switch_to+0x39c/0x460
    Jul 26 15:05:02 rx [11061396.155453] ? __switch_to_asm+0x42/0x80
    Jul 26 15:05:02 rx [11061396.159636] ? __switch_to_asm+0x5a/0x80
    Jul 26 15:05:02 rx [11061396.163816] __sys_sendmsg+0x5c/0xa0
    Jul 26 15:05:02 rx [11061396.167647] __x64_sys_sendmsg+0x1f/0x30
    Jul 26 15:05:02 rx [11061396.171832] do_syscall_64+0x57/0x190
    Jul 26 15:05:02 rx [11061396.175748] entry_SYSCALL_64_after_hwframe+0x5c/0xc1
    Jul 26 15:05:02 rx [11061396.181055] RIP: 0033:0x7f1ef692618d
    Jul 26 15:05:02 rx [11061396.184893] Code: 28 89 54 24 1c 48 89 74 24 10 89 7c 24 08 e8 ca ee ff ff 8b 54 24 1c 48 8b 74 24 10 41 89 c0 8b 7c 24 08 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 2f 44 89 c7 48 89 44 24 08 e8 fe ee ff ff 48
    Jul 26 15:05:02 rx [11061396.203889] RSP: 002b:00007f1ef4a26aa0 EFLAGS: 00000293 ORIG_RAX: 000000000000002e
    Jul 26 15:05:02 rx [11061396.211708] RAX: ffffffffffffffda RBX: 000000000000084b RCX: 00007f1ef692618d
    Jul 26 15:05:02 rx [11061396.219091] RDX: 0000000000004000 RSI: 00007f1ef4a26b10 RDI: 0000000000000275
    Jul 26 15:05:02 rx [11061396.226475] RBP: 0000000000004000 R08: 0000000000000000 R09: 0000000000000020
    Jul 26 15:05:02 rx [11061396.233859] R10: 0000000000000000 R11: 0000000000000293 R12: 000000000000084b
    Jul 26 15:05:02 rx [11061396.241243] R13: 00007f1ef4a26b10 R14: 0000000000000275 R15: 000055592030f1e8
    Jul 26 15:05:02 rx [11061396.248628] Modules linked in: vrf bridge stp llc vxlan ip6_udp_tunnel udp_tunnel nls_iso8859_1 amd64_edac_mod edac_mce_amd kvm_amd kvm crct10dif_pclmul ghash_clmulni_intel aesni_intel crypto_simd cryptd glue_helper wmi_bmof ipmi_ssif input_leds joydev rndis_host cdc_ether usbnet mii ast drm_vram_helper ttm drm_kms_helper i2c_algo_bit fb_sys_fops syscopyarea sysfillrect sysimgblt ccp mac_hid ipmi_si ipmi_devintf ipmi_msghandler nft_ct sch_fq_codel nf_tables_set nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables nfnetlink ramoops reed_solomon efi_pstore drm ip_tables x_tables autofs4 raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid0 multipath linear mlx5_ib ib_uverbs ib_core raid1 mlx5_core hid_generic pci_hyperv_intf crc32_pclmul tls usbhid ahci mlxfw bnxt_en libahci hid nvme i2c_piix4 nvme_core wmi
    Jul 26 15:05:02 rx [11061396.324334] CR2: 0000000000000020
    Jul 26 15:05:02 rx [11061396.327944] ---[ end trace 68a2b679d1cfb4f1 ]---
    Jul 26 15:05:02 rx [11061396.433435] RIP: 0010:tcp_rearm_rto+0xe4/0x160
    Jul 26 15:05:02 rx [11061396.438137] Code: 87 ca 04 00 00 00 5b 41 5c 41 5d 5d c3 c3 49 8b bc 24 40 06 00 00 eb 8d 48 bb cf f7 53 e3 a5 9b c4 20 4c 89 ef e8 0c fe 0e 00 <48> 8b 78 20 48 c1 ef 03 48 89 f8 41 8b bc 24 80 04 00 00 48 f7 e3
    Jul 26 15:05:02 rx [11061396.457144] RSP: 0018:ffffb75d40003e08 EFLAGS: 00010246
    Jul 26 15:05:02 rx [11061396.462629] RAX: 0000000000000000 RBX: 20c49ba5e353f7cf RCX: 0000000000000000
    Jul 26 15:05:02 rx [11061396.470012] RDX: 0000000062177c30 RSI: 000000000000231c RDI: ffff9874ad283a60
    Jul 26 15:05:02 rx [11061396.477396] RBP: ffffb75d40003e20 R08: 0000000000000000 R09: ffff987605e20aa8
    Jul 26 15:05:02 rx [11061396.484779] R10: ffffb75d40003f00 R11: ffffb75d4460f740 R12: ffff9874ad283900
    Jul 26 15:05:02 rx [11061396.492164] R13: ffff9874ad283a60 R14: ffff9874ad283980 R15: ffff9874ad283d30
    Jul 26 15:05:02 rx [11061396.499547] FS: 00007f1ef4a2e700(0000) GS:ffff987605e00000(0000) knlGS:0000000000000000
    Jul 26 15:05:02 rx [11061396.507886] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    Jul 26 15:05:02 rx [11061396.513884] CR2: 0000000000000020 CR3: 0000003e450ba003 CR4: 0000000000760ef0
    Jul 26 15:05:02 rx [11061396.521267] PKRU: 55555554
    Jul 26 15:05:02 rx [11061396.524230] Kernel panic - not syncing: Fatal exception in interrupt
    Jul 26 15:05:02 rx [11061396.530885] Kernel Offset: 0x1b200000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
    Jul 26 15:05:03 rx [11061396.660181] ---[ end Kernel panic - not syncing: Fatal
     exception in interrupt ]---
    
    After we hit this we disabled TLP by setting tcp_early_retrans to 0 and then hit the crash in the RACK case:
    
    Aug 7 07:26:16 rx [1006006.265582] BUG: kernel NULL pointer dereference, address: 0000000000000020
    Aug 7 07:26:16 rx [1006006.272719] #PF: supervisor read access in kernel mode
    Aug 7 07:26:16 rx [1006006.278030] #PF: error_code(0x0000) - not-present page
    Aug 7 07:26:16 rx [1006006.283343] PGD 0 P4D 0
    Aug 7 07:26:16 rx [1006006.286057] Oops: 0000 [#1] SMP NOPTI
    Aug 7 07:26:16 rx [1006006.289896] CPU: 5 PID: 0 Comm: swapper/5 Tainted: G W 5.4.0-174-generic #193-Ubuntu
    Aug 7 07:26:16 rx [1006006.299107] Hardware name: Supermicro SMC 2x26 os-gen8 64C NVME-Y 256G/H12SSW-NTR, BIOS 2.5.V1.2U.NVMe.UEFI 05/09/2023
    Aug 7 07:26:16 rx [1006006.309970] RIP: 0010:tcp_rearm_rto+0xe4/0x160
    Aug 7 07:26:16 rx [1006006.314584] Code: 87 ca 04 00 00 00 5b 41 5c 41 5d 5d c3 c3 49 8b bc 24 40 06 00 00 eb 8d 48 bb cf f7 53 e3 a5 9b c4 20 4c 89 ef e8 0c fe 0e 00 <48> 8b 78 20 48 c1 ef 03 48 89 f8 41 8b bc 24 80 04 00 00 48 f7 e3
    Aug 7 07:26:16 rx [1006006.333499] RSP: 0018:ffffb42600a50960 EFLAGS: 00010246
    Aug 7 07:26:16 rx [1006006.338895] RAX: 0000000000000000 RBX: 20c49ba5e353f7cf RCX: 0000000000000000
    Aug 7 07:26:16 rx [1006006.346193] RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff92d687ed8160
    Aug 7 07:26:16 rx [1006006.353489] RBP: ffffb42600a50978 R08: 0000000000000000 R09: 00000000cd896dcc
    Aug 7 07:26:16 rx [1006006.360786] R10: ffff92dc3404f400 R11: 0000000000000001 R12: ffff92d687ed8000
    Aug 7 07:26:16 rx [1006006.368084] R13: ffff92d687ed8160 R14: 00000000cd896dcc R15: 00000000cd8fca81
    Aug 7 07:26:16 rx [1006006.375381] FS: 0000000000000000(0000) GS:ffff93158ad40000(0000) knlGS:0000000000000000
    Aug 7 07:26:16 rx [1006006.383632] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    Aug 7 07:26:16 rx [1006006.389544] CR2: 0000000000000020 CR3: 0000003e775ce006 CR4: 0000000000760ee0
    Aug 7 07:26:16 rx [1006006.396839] PKRU: 55555554
    Aug 7 07:26:16 rx [1006006.399717] Call Trace:
    Aug 7 07:26:16 rx [1006006.402335]
    Aug 7 07:26:16 rx [1006006.404525] ? show_regs.cold+0x1a/0x1f
    Aug 7 07:26:16 rx [1006006.408532] ? __die+0x90/0xd9
    Aug 7 07:26:16 rx [1006006.411760] ? no_context+0x196/0x380
    Aug 7 07:26:16 rx [1006006.415599] ? __bad_area_nosemaphore+0x50/0x1a0
    Aug 7 07:26:16 rx [1006006.420392] ? _raw_spin_lock+0x1e/0x30
    Aug 7 07:26:16 rx [1006006.424401] ? bad_area_nosemaphore+0x16/0x20
    Aug 7 07:26:16 rx [1006006.428927] ? do_user_addr_fault+0x267/0x450
    Aug 7 07:26:16 rx [1006006.433450] ? __do_page_fault+0x58/0x90
    Aug 7 07:26:16 rx [1006006.437542] ? do_page_fault+0x2c/0xe0
    Aug 7 07:26:16 rx [1006006.441470] ? page_fault+0x34/0x40
    Aug 7 07:26:16 rx [1006006.445134] ? tcp_rearm_rto+0xe4/0x160
    Aug 7 07:26:16 rx [1006006.449145] tcp_ack+0xa32/0xb30
    Aug 7 07:26:16 rx [1006006.452542] tcp_rcv_established+0x13c/0x670
    Aug 7 07:26:16 rx [1006006.456981] ? sk_filter_trim_cap+0x48/0x220
    Aug 7 07:26:16 rx [1006006.461419] tcp_v6_do_rcv+0xdb/0x450
    Aug 7 07:26:16 rx [1006006.465257] tcp_v6_rcv+0xc2b/0xd10
    Aug 7 07:26:16 rx [1006006.468918] ip6_protocol_deliver_rcu+0xd3/0x4e0
    Aug 7 07:26:16 rx [1006006.473706] ip6_input_finish+0x15/0x20
    Aug 7 07:26:16 rx [1006006.477710] ip6_input+0xa2/0xb0
    Aug 7 07:26:16 rx [1006006.481109] ? ip6_protocol_deliver_rcu+0x4e0/0x4e0
    Aug 7 07:26:16 rx [1006006.486151] ip6_sublist_rcv_finish+0x3d/0x50
    Aug 7 07:26:16 rx [1006006.490679] ip6_sublist_rcv+0x1aa/0x250
    Aug 7 07:26:16 rx [1006006.494779] ? ip6_rcv_finish_core.isra.0+0xa0/0xa0
    Aug 7 07:26:16 rx [1006006.499828] ipv6_list_rcv+0x112/0x140
    Aug 7 07:26:16 rx [1006006.503748] __netif_receive_skb_list_core+0x1a4/0x250
    Aug 7 07:26:16 rx [1006006.509057] netif_receive_skb_list_internal+0x1a1/0x2b0
    Aug 7 07:26:16 rx [1006006.514538] gro_normal_list.part.0+0x1e/0x40
    Aug 7 07:26:16 rx [1006006.519068] napi_complete_done+0x91/0x130
    Aug 7 07:26:16 rx [1006006.523352] mlx5e_napi_poll+0x18e/0x610 [mlx5_core]
    Aug 7 07:26:16 rx [1006006.528481] net_rx_action+0x142/0x390
    Aug 7 07:26:16 rx [1006006.532398] __do_softirq+0xd1/0x2c1
    Aug 7 07:26:16 rx [1006006.536142] irq_exit+0xae/0xb0
    Aug 7 07:26:16 rx [1006006.539452] do_IRQ+0x5a/0xf0
    Aug 7 07:26:16 rx [1006006.542590] common_interrupt+0xf/0xf
    Aug 7 07:26:16 rx [1006006.546421]
    Aug 7 07:26:16 rx [1006006.548695] RIP: 0010:native_safe_halt+0xe/0x10
    Aug 7 07:26:16 rx [1006006.553399] Code: 7b ff ff ff eb bd 90 90 90 90 90 90 e9 07 00 00 00 0f 00 2d 36 2c 50 00 f4 c3 66 90 e9 07 00 00 00 0f 00 2d 26 2c 50 00 fb f4 90 0f 1f 44 00 00 55 48 89 e5 41 55 41 54 53 e8 dd 5e 61 ff 65
    Aug 7 07:26:16 rx [1006006.572309] RSP: 0018:ffffb42600177e70 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffc2
    Aug 7 07:26:16 rx [1006006.580040] RAX: ffffffff8ed08b20 RBX: 0000000000000005 RCX: 0000000000000001
    Aug 7 07:26:16 rx [1006006.587337] RDX: 00000000f48eeca2 RSI: 0000000000000082 RDI: 0000000000000082
    Aug 7 07:26:16 rx [1006006.594635] RBP: ffffb42600177e90 R08: 0000000000000000 R09: 000000000000020f
    Aug 7 07:26:16 rx [1006006.601931] R10: 0000000000100000 R11: 0000000000000000 R12: 0000000000000005
    Aug 7 07:26:16 rx [1006006.609229] R13: ffff93157deb5f00 R14: 0000000000000000 R15: 0000000000000000
    Aug 7 07:26:16 rx [1006006.616530] ? __cpuidle_text_start+0x8/0x8
    Aug 7 07:26:16 rx [1006006.620886] ? default_idle+0x20/0x140
    Aug 7 07:26:16 rx [1006006.624804] arch_cpu_idle+0x15/0x20
    Aug 7 07:26:16 rx [1006006.628545] default_idle_call+0x23/0x30
    Aug 7 07:26:16 rx [1006006.632640] do_idle+0x1fb/0x270
    Aug 7 07:26:16 rx [1006006.636035] cpu_startup_entry+0x20/0x30
    Aug 7 07:26:16 rx [1006006.640126] start_secondary+0x178/0x1d0
    Aug 7 07:26:16 rx [1006006.644218] secondary_startup_64+0xa4/0xb0
    Aug 7 07:26:17 rx [1006006.648568] Modules linked in: vrf bridge stp llc vxlan ip6_udp_tunnel udp_tunnel nls_iso8859_1 nft_ct amd64_edac_mod edac_mce_amd kvm_amd kvm crct10dif_pclmul ghash_clmulni_intel aesni_intel crypto_simd cryptd glue_helper wmi_bmof ipmi_ssif input_leds joydev rndis_host cdc_ether usbnet ast mii drm_vram_helper ttm drm_kms_helper i2c_algo_bit fb_sys_fops syscopyarea sysfillrect sysimgblt ccp mac_hid ipmi_si ipmi_devintf ipmi_msghandler sch_fq_codel nf_tables_set nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables nfnetlink ramoops reed_solomon efi_pstore drm ip_tables x_tables autofs4 raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid0 multipath linear mlx5_ib ib_uverbs ib_core raid1 hid_generic mlx5_core pci_hyperv_intf crc32_pclmul usbhid ahci tls mlxfw bnxt_en hid libahci nvme i2c_piix4 nvme_core wmi [last unloaded: cpuid]
    Aug 7 07:26:17 rx [1006006.726180] CR2: 0000000000000020
    Aug 7 07:26:17 rx [1006006.729718] ---[ end trace e0e2e37e4e612984 ]---
    
    Prior to seeing the first crash and on other machines we also see the warning in
    tcp_send_loss_probe() where packets_out is non-zero, but both transmit and retrans
    queues are empty so we know the box is seeing some accounting issue in this area:
    
    Jul 26 09:15:27 kernel: ------------[ cut here ]------------
    Jul 26 09:15:27 kernel: invalid inflight: 2 state 1 cwnd 68 mss 8988
    Jul 26 09:15:27 kernel: WARNING: CPU: 16 PID: 0 at net/ipv4/tcp_output.c:2605 tcp_send_loss_probe+0x214/0x220
    Jul 26 09:15:27 kernel: Modules linked in: vrf bridge stp llc vxlan ip6_udp_tunnel udp_tunnel nls_iso8859_1 nft_ct amd64_edac_mod edac_mce_amd kvm_amd kvm crct10dif_pclmul ghash_clmulni_intel aesni_intel crypto_simd cryptd glue_helper wmi_bmof ipmi_ssif joydev input_leds rndis_host cdc_ether usbnet mii ast drm_vram_helper ttm drm_kms_he>
    Jul 26 09:15:27 kernel: CPU: 16 PID: 0 Comm: swapper/16 Not tainted 5.4.0-174-generic #193-Ubuntu
    Jul 26 09:15:27 kernel: Hardware name: Supermicro SMC 2x26 os-gen8 64C NVME-Y 256G/H12SSW-NTR, BIOS 2.5.V1.2U.NVMe.UEFI 05/09/2023
    Jul 26 09:15:27 kernel: RIP: 0010:tcp_send_loss_probe+0x214/0x220
    Jul 26 09:15:27 kernel: Code: 08 26 01 00 75 e2 41 0f b6 54 24 12 41 8b 8c 24 c0 06 00 00 45 89 f0 48 c7 c7 e0 b4 20 a7 c6 05 8d 08 26 01 01 e8 4a c0 0f 00 <0f> 0b eb ba 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 55 48 89 e5 41
    Jul 26 09:15:27 kernel: RSP: 0018:ffffb7838088ce00 EFLAGS: 00010286
    Jul 26 09:15:27 kernel: RAX: 0000000000000000 RBX: ffff9b84b5630430 RCX: 0000000000000006
    Jul 26 09:15:27 kernel: RDX: 0000000000000007 RSI: 0000000000000096 RDI: ffff9b8e4621c8c0
    Jul 26 09:15:27 kernel: RBP: ffffb7838088ce18 R08: 0000000000000927 R09: 0000000000000004
    Jul 26 09:15:27 kernel: R10: 0000000000000000 R11: 0000000000000001 R12: ffff9b84b5630000
    Jul 26 09:15:27 kernel: R13: 0000000000000000 R14: 000000000000231c R15: ffff9b84b5630430
    Jul 26 09:15:27 kernel: FS: 0000000000000000(0000) GS:ffff9b8e46200000(0000) knlGS:0000000000000000
    Jul 26 09:15:27 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    Jul 26 09:15:27 kernel: CR2: 000056238cec2380 CR3: 0000003e49ede005 CR4: 0000000000760ee0
    Jul 26 09:15:27 kernel: PKRU: 55555554
    Jul 26 09:15:27 kernel: Call Trace:
    Jul 26 09:15:27 kernel: <IRQ>
    Jul 26 09:15:27 kernel: ? show_regs.cold+0x1a/0x1f
    Jul 26 09:15:27 kernel: ? __warn+0x98/0xe0
    Jul 26 09:15:27 kernel: ? tcp_send_loss_probe+0x214/0x220
    Jul 26 09:15:27 kernel: ? report_bug+0xd1/0x100
    Jul 26 09:15:27 kernel: ? do_error_trap+0x9b/0xc0
    Jul 26 09:15:27 kernel: ? do_invalid_op+0x3c/0x50
    Jul 26 09:15:27 kernel: ? tcp_send_loss_probe+0x214/0x220
    Jul 26 09:15:27 kernel: ? invalid_op+0x1e/0x30
    Jul 26 09:15:27 kernel: ? tcp_send_loss_probe+0x214/0x220
    Jul 26 09:15:27 kernel: tcp_write_timer_handler+0x1b4/0x240
    Jul 26 09:15:27 kernel: tcp_write_timer+0x9e/0xe0
    Jul 26 09:15:27 kernel: ? tcp_write_timer_handler+0x240/0x240
    Jul 26 09:15:27 kernel: call_timer_fn+0x32/0x130
    Jul 26 09:15:27 kernel: __run_timers.part.0+0x180/0x280
    Jul 26 09:15:27 kernel: ? timerqueue_add+0x9b/0xb0
    Jul 26 09:15:27 kernel: ? enqueue_hrtimer+0x3d/0x90
    Jul 26 09:15:27 kernel: ? do_error_trap+0x9b/0xc0
    Jul 26 09:15:27 kernel: ? do_invalid_op+0x3c/0x50
    Jul 26 09:15:27 kernel: ? tcp_send_loss_probe+0x214/0x220
    Jul 26 09:15:27 kernel: ? invalid_op+0x1e/0x30
    Jul 26 09:15:27 kernel: ? tcp_send_loss_probe+0x214/0x220
    Jul 26 09:15:27 kernel: tcp_write_timer_handler+0x1b4/0x240
    Jul 26 09:15:27 kernel: tcp_write_timer+0x9e/0xe0
    Jul 26 09:15:27 kernel: ? tcp_write_timer_handler+0x240/0x240
    Jul 26 09:15:27 kernel: call_timer_fn+0x32/0x130
    Jul 26 09:15:27 kernel: __run_timers.part.0+0x180/0x280
    Jul 26 09:15:27 kernel: ? timerqueue_add+0x9b/0xb0
    Jul 26 09:15:27 kernel: ? enqueue_hrtimer+0x3d/0x90
    Jul 26 09:15:27 kernel: ? recalibrate_cpu_khz+0x10/0x10
    Jul 26 09:15:27 kernel: ? ktime_get+0x3e/0xa0
    Jul 26 09:15:27 kernel: ? native_x2apic_icr_write+0x30/0x30
    Jul 26 09:15:27 kernel: run_timer_softirq+0x2a/0x50
    Jul 26 09:15:27 kernel: __do_softirq+0xd1/0x2c1
    Jul 26 09:15:27 kernel: irq_exit+0xae/0xb0
    Jul 26 09:15:27 kernel: smp_apic_timer_interrupt+0x7b/0x140
    Jul 26 09:15:27 kernel: apic_timer_interrupt+0xf/0x20
    Jul 26 09:15:27 kernel: </IRQ>
    Jul 26 09:15:27 kernel: RIP: 0010:native_safe_halt+0xe/0x10
    Jul 26 09:15:27 kernel: Code: 7b ff ff ff eb bd 90 90 90 90 90 90 e9 07 00 00 00 0f 00 2d 36 2c 50 00 f4 c3 66 90 e9 07 00 00 00 0f 00 2d 26 2c 50 00 fb f4 <c3> 90 0f 1f 44 00 00 55 48 89 e5 41 55 41 54 53 e8 dd 5e 61 ff 65
    Jul 26 09:15:27 kernel: RSP: 0018:ffffb783801cfe70 EFLAGS: 00000246 ORIG_RAX: ffffffffffffff13
    Jul 26 09:15:27 kernel: RAX: ffffffffa6908b20 RBX: 0000000000000010 RCX: 0000000000000001
    Jul 26 09:15:27 kernel: RDX: 000000006fc0c97e RSI: 0000000000000082 RDI: 0000000000000082
    Jul 26 09:15:27 kernel: RBP: ffffb783801cfe90 R08: 0000000000000000 R09: 0000000000000225
    Jul 26 09:15:27 kernel: R10: 0000000000100000 R11: 0000000000000000 R12: 0000000000000010
    Jul 26 09:15:27 kernel: R13: ffff9b8e390b0000 R14: 0000000000000000 R15: 0000000000000000
    Jul 26 09:15:27 kernel: ? __cpuidle_text_start+0x8/0x8
    Jul 26 09:15:27 kernel: ? default_idle+0x20/0x140
    Jul 26 09:15:27 kernel: arch_cpu_idle+0x15/0x20
    Jul 26 09:15:27 kernel: default_idle_call+0x23/0x30
    Jul 26 09:15:27 kernel: do_idle+0x1fb/0x270
    Jul 26 09:15:27 kernel: cpu_startup_entry+0x20/0x30
    Jul 26 09:15:27 kernel: start_secondary+0x178/0x1d0
    Jul 26 09:15:27 kernel: secondary_startup_64+0xa4/0xb0
    Jul 26 09:15:27 kernel: ---[ end trace e7ac822987e33be1 ]---
    
    The NULL ptr deref is coming from tcp_rto_delta_us() attempting to pull an skb
    off the head of the retransmit queue and then dereferencing that skb to get the
    skb_mstamp_ns value via tcp_skb_timestamp_us(skb).
    
    The crash is the same one that was reported a # of years ago here:
    https://lore.kernel.org/netdev/86c0f836-9a7c-438b-d81a-839be45f1f58@gmail.com/T/#t
    
    and the kernel we're running has the fix which was added to resolve this issue.
    
    Unfortunately we've been unsuccessful so far in reproducing this problem in the
    lab and do not have the luxury of pushing out a new kernel to try and test if
    newer kernels resolve this issue at the moment. I realize this is a report
    against both an Ubuntu kernel and also an older 5.4 kernel. I have reported this
    issue to Ubuntu here: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2077657
    however I feel like since this issue has possibly cropped up again it makes
    sense to build in some protection in this path (even on the latest kernel
    versions) since the code in question just blindly assumes there's a valid skb
    without testing if it's NULL b/f it looks at the timestamp.
    
    Given we have seen crashes in this path before and now this case it seems like
    we should protect ourselves for when packets_out accounting is incorrect.
    While we should fix that root cause we should also just make sure the skb
    is not NULL before dereferencing it. Also add a warn once here to capture
    some information if/when the problem case is hit again.
    
    Fixes: e1a10ef7fa87 ("tcp: introduce tcp_rto_delta_us() helper for xmit timer fix")
    Signed-off-by: Josh Hunt <johunt@akamai.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: fix tcp_enter_recovery() to zero retrans_stamp when it's safe [+ + +]
Author: Neal Cardwell <ncardwell@google.com>
Date:   Tue Oct 1 20:05:16 2024 +0000

    tcp: fix tcp_enter_recovery() to zero retrans_stamp when it's safe
    
    [ Upstream commit b41b4cbd9655bcebcce941bef3601db8110335be ]
    
    Fix tcp_enter_recovery() so that if there are no retransmits out then
    we zero retrans_stamp when entering fast recovery. This is necessary
    to fix two buggy behaviors.
    
    Currently a non-zero retrans_stamp value can persist across multiple
    back-to-back loss recovery episodes. This is because we generally only
    clears retrans_stamp if we are completely done with loss recoveries,
    and get to tcp_try_to_open() and find !tcp_any_retrans_done(sk). This
    behavior causes two bugs:
    
    (1) When a loss recovery episode (CA_Loss or CA_Recovery) is followed
    immediately by a new CA_Recovery, the retrans_stamp value can persist
    and can be a time before this new CA_Recovery episode starts. That
    means that timestamp-based undo will be using the wrong retrans_stamp
    (a value that is too old) when comparing incoming TS ecr values to
    retrans_stamp to see if the current fast recovery episode can be
    undone.
    
    (2) If there is a roughly minutes-long sequence of back-to-back fast
    recovery episodes, one after another (e.g. in a shallow-buffered or
    policed bottleneck), where each fast recovery successfully makes
    forward progress and recovers one window of sequence space (but leaves
    at least one retransmit in flight at the end of the recovery),
    followed by several RTOs, then the ETIMEDOUT check may be using the
    wrong retrans_stamp (a value set at the start of the first fast
    recovery in the sequence). This can cause a very premature ETIMEDOUT,
    killing the connection prematurely.
    
    This commit changes the code to zero retrans_stamp when entering fast
    recovery, when this is known to be safe (no retransmits are out in the
    network). That ensures that when starting a fast recovery episode, and
    it is safe to do so, retrans_stamp is set when we send the fast
    retransmit packet. That addresses both bug (1) and bug (2) by ensuring
    that (if no retransmits are out when we start a fast recovery) we use
    the initial fast retransmit of this fast recovery as the time value
    for undo and ETIMEDOUT calculations.
    
    This makes intuitive sense, since the start of a new fast recovery
    episode (in a scenario where no lost packets are out in the network)
    means that the connection has made forward progress since the last RTO
    or fast recovery, and we should thus "restart the clock" used for both
    undo and ETIMEDOUT logic.
    
    Note that if when we start fast recovery there *are* retransmits out
    in the network, there can still be undesirable (1)/(2) issues. For
    example, after this patch we can still have the (1) and (2) problems
    in cases like this:
    
    + round 1: sender sends flight 1
    
    + round 2: sender receives SACKs and enters fast recovery 1,
      retransmits some packets in flight 1 and then sends some new data as
      flight 2
    
    + round 3: sender receives some SACKs for flight 2, notes losses, and
      retransmits some packets to fill the holes in flight 2
    
    + fast recovery has some lost retransmits in flight 1 and continues
      for one or more rounds sending retransmits for flight 1 and flight 2
    
    + fast recovery 1 completes when snd_una reaches high_seq at end of
      flight 1
    
    + there are still holes in the SACK scoreboard in flight 2, so we
      enter fast recovery 2, but some retransmits in the flight 2 sequence
      range are still in flight (retrans_out > 0), so we can't execute the
      new retrans_stamp=0 added here to clear retrans_stamp
    
    It's not yet clear how to fix these remaining (1)/(2) issues in an
    efficient way without breaking undo behavior, given that retrans_stamp
    is currently used for undo and ETIMEDOUT. Perhaps the optimal (but
    expensive) strategy would be to set retrans_stamp to the timestamp of
    the earliest outstanding retransmit when entering fast recovery. But
    at least this commit makes things better.
    
    Note that this does not change the semantics of retrans_stamp; it
    simply makes retrans_stamp accurate in some cases where it was not
    before:
    
    (1) Some loss recovery, followed by an immediate entry into a fast
    recovery, where there are no retransmits out when entering the fast
    recovery.
    
    (2) When a TFO server has a SYNACK retransmit that sets retrans_stamp,
    and then the ACK that completes the 3-way handshake has SACK blocks
    that trigger a fast recovery. In this case when entering fast recovery
    we want to zero out the retrans_stamp from the TFO SYNACK retransmit,
    and set the retrans_stamp based on the timestamp of the fast recovery.
    
    We introduce a tcp_retrans_stamp_cleanup() helper, because this
    two-line sequence already appears in 3 places and is about to appear
    in 2 more as a result of this bug fix patch series. Once this bug fix
    patches series in the net branch makes it into the net-next branch
    we'll update the 3 other call sites to use the new helper.
    
    This is a long-standing issue. The Fixes tag below is chosen to be the
    oldest commit at which the patch will apply cleanly, which is from
    Linux v3.5 in 2012.
    
    Fixes: 1fbc340514fc ("tcp: early retransmit: tcp_enter_recovery()")
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241001200517.2756803-3-ncardwell.sw@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: fix to allow timestamp undo if no retransmits were sent [+ + +]
Author: Neal Cardwell <ncardwell@google.com>
Date:   Tue Oct 1 20:05:15 2024 +0000

    tcp: fix to allow timestamp undo if no retransmits were sent
    
    [ Upstream commit e37ab7373696e650d3b6262a5b882aadad69bb9e ]
    
    Fix the TCP loss recovery undo logic in tcp_packet_delayed() so that
    it can trigger undo even if TSQ prevents a fast recovery episode from
    reaching tcp_retransmit_skb().
    
    Geumhwan Yu <geumhwan.yu@samsung.com> recently reported that after
    this commit from 2019:
    
    commit bc9f38c8328e ("tcp: avoid unconditional congestion window undo
    on SYN retransmit")
    
    ...and before this fix we could have buggy scenarios like the
    following:
    
    + Due to reordering, a TCP connection receives some SACKs and enters a
      spurious fast recovery.
    
    + TSQ prevents all invocations of tcp_retransmit_skb(), because many
      skbs are queued in lower layers of the sending machine's network
      stack; thus tp->retrans_stamp remains 0.
    
    + The connection receives a TCP timestamp ECR value echoing a
      timestamp before the fast recovery, indicating that the fast
      recovery was spurious.
    
    + The connection fails to undo the spurious fast recovery because
      tp->retrans_stamp is 0, and thus tcp_packet_delayed() returns false,
      due to the new logic in the 2019 commit: commit bc9f38c8328e ("tcp:
      avoid unconditional congestion window undo on SYN retransmit")
    
    This fix tweaks the logic to be more similar to the
    tcp_packet_delayed() logic before bc9f38c8328e, except that we take
    care not to be fooled by the FLAG_SYN_ACKED code path zeroing out
    tp->retrans_stamp (the bug noted and fixed by Yuchung in
    bc9f38c8328e).
    
    Note that this returns the high-level behavior of tcp_packet_delayed()
    to again match the comment for the function, which says: "Nothing was
    retransmitted or returned timestamp is less than timestamp of the
    first retransmission." Note that this comment is in the original
    2005-04-16 Linux git commit, so this is evidently long-standing
    behavior.
    
    Fixes: bc9f38c8328e ("tcp: avoid unconditional congestion window undo on SYN retransmit")
    Reported-by: Geumhwan Yu <geumhwan.yu@samsung.com>
    Diagnosed-by: Geumhwan Yu <geumhwan.yu@samsung.com>
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20241001200517.2756803-2-ncardwell.sw@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thermal: int340x: processor_thermal: Set feature mask before proc_thermal_add [+ + +]
Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Date:   Mon Oct 9 12:05:34 2023 -0700

    thermal: int340x: processor_thermal: Set feature mask before proc_thermal_add
    
    [ Upstream commit 6ebc25d8b053a208786295bab58abbb66b39c318 ]
    
    The function proc_thermal_add() adds sysfs entries for power limits.
    
    The feature mask of available features is not present at that time, so
    it cannot be used by proc_thermal_add() to selectively create sysfs
    attributes.
    
    The feature mask is set by proc_thermal_mmio_add(), so modify the code
    to call it before proc_thermal_add() so as to allow the latter to use
    the feature mask.
    
    There is no functional impact with this change.
    
    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    [ rjw: Changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Stable-dep-of: 99ca0b57e49f ("thermal: intel: int340x: processor: Fix warning during module unload")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

thermal: intel: int340x: processor: Fix warning during module unload [+ + +]
Author: Zhang Rui <rui.zhang@intel.com>
Date:   Mon Sep 30 16:17:57 2024 +0800

    thermal: intel: int340x: processor: Fix warning during module unload
    
    [ Upstream commit 99ca0b57e49fb73624eede1c4396d9e3d10ccf14 ]
    
    The processor_thermal driver uses pcim_device_enable() to enable a PCI
    device, which means the device will be automatically disabled on driver
    detach.  Thus there is no need to call pci_disable_device() again on it.
    
    With recent PCI device resource management improvements, e.g. commit
    f748a07a0b64 ("PCI: Remove legacy pcim_release()"), this problem is
    exposed and triggers the warining below.
    
     [  224.010735] proc_thermal_pci 0000:00:04.0: disabling already-disabled device
     [  224.010747] WARNING: CPU: 8 PID: 4442 at drivers/pci/pci.c:2250 pci_disable_device+0xe5/0x100
     ...
     [  224.010844] Call Trace:
     [  224.010845]  <TASK>
     [  224.010847]  ? show_regs+0x6d/0x80
     [  224.010851]  ? __warn+0x8c/0x140
     [  224.010854]  ? pci_disable_device+0xe5/0x100
     [  224.010856]  ? report_bug+0x1c9/0x1e0
     [  224.010859]  ? handle_bug+0x46/0x80
     [  224.010862]  ? exc_invalid_op+0x1d/0x80
     [  224.010863]  ? asm_exc_invalid_op+0x1f/0x30
     [  224.010867]  ? pci_disable_device+0xe5/0x100
     [  224.010869]  ? pci_disable_device+0xe5/0x100
     [  224.010871]  ? kfree+0x21a/0x2b0
     [  224.010873]  pcim_disable_device+0x20/0x30
     [  224.010875]  devm_action_release+0x16/0x20
     [  224.010878]  release_nodes+0x47/0xc0
     [  224.010880]  devres_release_all+0x9f/0xe0
     [  224.010883]  device_unbind_cleanup+0x12/0x80
     [  224.010885]  device_release_driver_internal+0x1ca/0x210
     [  224.010887]  driver_detach+0x4e/0xa0
     [  224.010889]  bus_remove_driver+0x6f/0xf0
     [  224.010890]  driver_unregister+0x35/0x60
     [  224.010892]  pci_unregister_driver+0x44/0x90
     [  224.010894]  proc_thermal_pci_driver_exit+0x14/0x5f0 [processor_thermal_device_pci]
     ...
     [  224.010921] ---[ end trace 0000000000000000 ]---
    
    Remove the excess pci_disable_device() calls.
    
    Fixes: acd65d5d1cf4 ("thermal/drivers/int340x/processor_thermal: Add PCI MMIO based thermal driver")
    Signed-off-by: Zhang Rui <rui.zhang@intel.com>
    Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Link: https://patch.msgid.link/20240930081801.28502-3-rui.zhang@intel.com
    [ rjw: Subject and changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tipc: guard against string buffer overrun [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Thu Aug 1 19:35:37 2024 +0100

    tipc: guard against string buffer overrun
    
    [ Upstream commit 6555a2a9212be6983d2319d65276484f7c5f431a ]
    
    Smatch reports that copying media_name and if_name to name_parts may
    overwrite the destination.
    
     .../bearer.c:166 bearer_name_validate() error: strcpy() 'media_name' too large for 'name_parts->media_name' (32 vs 16)
     .../bearer.c:167 bearer_name_validate() error: strcpy() 'if_name' too large for 'name_parts->if_name' (1010102 vs 16)
    
    This does seem to be the case so guard against this possibility by using
    strscpy() and failing if truncation occurs.
    
    Introduced by commit b97bf3fd8f6a ("[TIPC] Initial merge")
    
    Compile tested only.
    
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240801-tipic-overrun-v2-1-c5b869d1f074@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tomoyo: fallback to realpath if symlink's pathname does not exist [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Wed Sep 25 22:30:59 2024 +0900

    tomoyo: fallback to realpath if symlink's pathname does not exist
    
    commit ada1986d07976d60bed5017aa38b7f7cf27883f7 upstream.
    
    Alfred Agrell found that TOMOYO cannot handle execveat(AT_EMPTY_PATH)
    inside chroot environment where /dev and /proc are not mounted, for
    commit 51f39a1f0cea ("syscalls: implement execveat() system call") missed
    that TOMOYO tries to canonicalize argv[0] when the filename fed to the
    executed program as argv[0] is supplied using potentially nonexistent
    pathname.
    
    Since "/dev/fd/<fd>" already lost symlink information used for obtaining
    that <fd>, it is too late to reconstruct symlink's pathname. Although
    <filename> part of "/dev/fd/<fd>/<filename>" might not be canonicalized,
    TOMOYO cannot use tomoyo_realpath_nofollow() when /dev or /proc is not
    mounted. Therefore, fallback to tomoyo_realpath_from_path() when
    tomoyo_realpath_nofollow() failed.
    
    Reported-by: Alfred Agrell <blubban@gmail.com>
    Closes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1082001
    Fixes: 51f39a1f0cea ("syscalls: implement execveat() system call")
    Cc: stable@vger.kernel.org # v3.19+
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tools/iio: Add memory allocation failure check for trigger_name [+ + +]
Author: Zhu Jun <zhujun2@cmss.chinamobile.com>
Date:   Wed Aug 28 02:31:29 2024 -0700

    tools/iio: Add memory allocation failure check for trigger_name
    
    [ Upstream commit 3c6b818b097dd6932859bcc3d6722a74ec5931c1 ]
    
    Added a check to handle memory allocation failure for `trigger_name`
    and return `-ENOMEM`.
    
    Signed-off-by: Zhu Jun <zhujun2@cmss.chinamobile.com>
    Link: https://patch.msgid.link/20240828093129.3040-1-zhujun2@cmss.chinamobile.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools/x86/kcpuid: Protect against faulty "max subleaf" values [+ + +]
Author: Ahmed S. Darwish <darwi@linutronix.de>
Date:   Thu Jul 18 15:47:44 2024 +0200

    tools/x86/kcpuid: Protect against faulty "max subleaf" values
    
    [ Upstream commit cf96ab1a966b87b09fdd9e8cc8357d2d00776a3a ]
    
    Protect against the kcpuid code parsing faulty max subleaf numbers
    through a min() expression.  Thus, ensuring that max_subleaf will always
    be ≤ MAX_SUBLEAF_NUM.
    
    Use "u32" for the subleaf numbers since kcpuid is compiled with -Wextra,
    which includes signed/unsigned comparisons warnings.
    
    Signed-off-by: Ahmed S. Darwish <darwi@linutronix.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/all/20240718134755.378115-5-darwi@linutronix.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tpm: Clean up TPM space after command failure [+ + +]
Author: Jonathan McDowell <noodles@meta.com>
Date:   Fri Aug 16 12:55:46 2024 +0100

    tpm: Clean up TPM space after command failure
    
    [ Upstream commit e3aaebcbb7c6b403416f442d1de70d437ce313a7 ]
    
    tpm_dev_transmit prepares the TPM space before attempting command
    transmission. However if the command fails no rollback of this
    preparation is done. This can result in transient handles being leaked
    if the device is subsequently closed with no further commands performed.
    
    Fix this by flushing the space in the event of command transmission
    failure.
    
    Fixes: 745b361e989a ("tpm: infrastructure for TPM spaces")
    Signed-off-by: Jonathan McDowell <noodles@meta.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing/hwlat: Fix a race during cpuhp processing [+ + +]
Author: Wei Li <liwei391@huawei.com>
Date:   Tue Sep 24 17:45:14 2024 +0800

    tracing/hwlat: Fix a race during cpuhp processing
    
    commit 2a13ca2e8abb12ee43ada8a107dadca83f140937 upstream.
    
    The cpuhp online/offline processing race also exists in percpu-mode hwlat
    tracer in theory, apply the fix too. That is:
    
        T1                       | T2
        [CPUHP_ONLINE]           | cpu_device_down()
         hwlat_hotplug_workfn()  |
                                 |     cpus_write_lock()
                                 |     takedown_cpu(1)
                                 |     cpus_write_unlock()
        [CPUHP_OFFLINE]          |
            cpus_read_lock()     |
            start_kthread(1)     |
            cpus_read_unlock()   |
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20240924094515.3561410-5-liwei391@huawei.com
    Fixes: ba998f7d9531 ("trace/hwlat: Support hotplug operations")
    Signed-off-by: Wei Li <liwei391@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing/timerlat: Fix a race during cpuhp processing [+ + +]
Author: Wei Li <liwei391@huawei.com>
Date:   Tue Sep 24 17:45:13 2024 +0800

    tracing/timerlat: Fix a race during cpuhp processing
    
    commit 829e0c9f0855f26b3ae830d17b24aec103f7e915 upstream.
    
    There is another found exception that the "timerlat/1" thread was
    scheduled on CPU0, and lead to timer corruption finally:
    
    ```
    ODEBUG: init active (active state 0) object: ffff888237c2e108 object type: hrtimer hint: timerlat_irq+0x0/0x220
    WARNING: CPU: 0 PID: 426 at lib/debugobjects.c:518 debug_print_object+0x7d/0xb0
    Modules linked in:
    CPU: 0 UID: 0 PID: 426 Comm: timerlat/1 Not tainted 6.11.0-rc7+ #45
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
    RIP: 0010:debug_print_object+0x7d/0xb0
    ...
    Call Trace:
     <TASK>
     ? __warn+0x7c/0x110
     ? debug_print_object+0x7d/0xb0
     ? report_bug+0xf1/0x1d0
     ? prb_read_valid+0x17/0x20
     ? handle_bug+0x3f/0x70
     ? exc_invalid_op+0x13/0x60
     ? asm_exc_invalid_op+0x16/0x20
     ? debug_print_object+0x7d/0xb0
     ? debug_print_object+0x7d/0xb0
     ? __pfx_timerlat_irq+0x10/0x10
     __debug_object_init+0x110/0x150
     hrtimer_init+0x1d/0x60
     timerlat_main+0xab/0x2d0
     ? __pfx_timerlat_main+0x10/0x10
     kthread+0xb7/0xe0
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x2d/0x40
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    ```
    
    After tracing the scheduling event, it was discovered that the migration
    of the "timerlat/1" thread was performed during thread creation. Further
    analysis confirmed that it is because the CPU online processing for
    osnoise is implemented through workers, which is asynchronous with the
    offline processing. When the worker was scheduled to create a thread, the
    CPU may has already been removed from the cpu_online_mask during the offline
    process, resulting in the inability to select the right CPU:
    
    T1                       | T2
    [CPUHP_ONLINE]           | cpu_device_down()
    osnoise_hotplug_workfn() |
                             |     cpus_write_lock()
                             |     takedown_cpu(1)
                             |     cpus_write_unlock()
    [CPUHP_OFFLINE]          |
        cpus_read_lock()     |
        start_kthread(1)     |
        cpus_read_unlock()   |
    
    To fix this, skip online processing if the CPU is already offline.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20240924094515.3561410-4-liwei391@huawei.com
    Fixes: c8895e271f79 ("trace/osnoise: Support hotplug operations")
    Signed-off-by: Wei Li <liwei391@huawei.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Have saved_cmdlines arrays all in one allocation [+ + +]
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Tue Feb 20 09:06:14 2024 -0500

    tracing: Have saved_cmdlines arrays all in one allocation
    
    [ Upstream commit 0b18c852cc6fb8284ac0ab97e3e840974a6a8a64 ]
    
    The saved_cmdlines have three arrays for mapping PIDs to COMMs:
    
     - map_pid_to_cmdline[]
     - map_cmdline_to_pid[]
     - saved_cmdlines
    
    The map_pid_to_cmdline[] is PID_MAX_DEFAULT in size and holds the index
    into the other arrays. The map_cmdline_to_pid[] is a mapping back to the
    full pid as it can be larger than PID_MAX_DEFAULT. And the
    saved_cmdlines[] just holds the COMMs associated to the pids.
    
    Currently the map_pid_to_cmdline[] and saved_cmdlines[] are allocated
    together (in reality the saved_cmdlines is just in the memory of the
    rounding of the allocation of the structure as it is always allocated in
    powers of two). The map_cmdline_to_pid[] array is allocated separately.
    
    Since the rounding to a power of two is rather large (it allows for 8000
    elements in saved_cmdlines), also include the map_cmdline_to_pid[] array.
    (This drops it to 6000 by default, which is still plenty for most use
    cases). This saves even more memory as the map_cmdline_to_pid[] array
    doesn't need to be allocated.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20240212174011.068211d9@gandalf.local.home/
    Link: https://lore.kernel.org/linux-trace-kernel/20240220140703.182330529@goodmis.org
    
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: Vincent Donnefort <vdonnefort@google.com>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Mete Durlu <meted@linux.ibm.com>
    Fixes: 44dc5c41b5b1 ("tracing: Fix wasted memory in saved_cmdlines logic")
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tracing: Remove precision vsnprintf() check from print event [+ + +]
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Mon Mar 4 17:43:41 2024 -0500

    tracing: Remove precision vsnprintf() check from print event
    
    [ Upstream commit 5efd3e2aef91d2d812290dcb25b2058e6f3f532c ]
    
    This reverts 60be76eeabb3d ("tracing: Add size check when printing
    trace_marker output"). The only reason the precision check was added
    was because of a bug that miscalculated the write size of the string into
    the ring buffer and it truncated it removing the terminating nul byte. On
    reading the trace it crashed the kernel. But this was due to the bug in
    the code that happened during development and should never happen in
    practice. If anything, the precision can hide bugs where the string in the
    ring buffer isn't nul terminated and it will not be checked.
    
    Link: https://lore.kernel.org/all/C7E7AF1A-D30F-4D18-B8E5-AF1EF58004F5@linux.ibm.com/
    Link: https://lore.kernel.org/linux-trace-kernel/20240227125706.04279ac2@gandalf.local.home
    Link: https://lore.kernel.org/all/20240302111244.3a1674be@gandalf.local.home/
    Link: https://lore.kernel.org/linux-trace-kernel/20240304174341.2a561d9f@gandalf.local.home
    
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Fixes: 60be76eeabb3d ("tracing: Add size check when printing trace_marker output")
    Reported-by: Sachin Sant <sachinp@linux.ibm.com>
    Tested-by: Sachin Sant <sachinp@linux.ibm.com>
    Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tty: rp2: Fix reset with non forgiving PCIe host bridges [+ + +]
Author: Florian Fainelli <florian.fainelli@broadcom.com>
Date:   Fri Sep 6 15:54:33 2024 -0700

    tty: rp2: Fix reset with non forgiving PCIe host bridges
    
    commit f16dd10ba342c429b1e36ada545fb36d4d1f0e63 upstream.
    
    The write to RP2_GLOBAL_CMD followed by an immediate read of
    RP2_GLOBAL_CMD in rp2_reset_asic() is intented to flush out the write,
    however by then the device is already in reset and cannot respond to a
    memory cycle access.
    
    On platforms such as the Raspberry Pi 4 and others using the
    pcie-brcmstb.c driver, any memory access to a device that cannot respond
    is met with a fatal system error, rather than being substituted with all
    1s as is usually the case on PC platforms.
    
    Swapping the delay and the read ensures that the device has finished
    resetting before we attempt to read from it.
    
    Fixes: 7d9f49afa451 ("serial: rp2: New driver for Comtrol RocketPort 2 cards")
    Cc: stable <stable@kernel.org>
    Suggested-by: Jim Quinlan <james.quinlan@broadcom.com>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20240906225435.707837-1-florian.fainelli@broadcom.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
unicode: Don't special case ignorable code points [+ + +]
Author: Gabriel Krisman Bertazi <krisman@suse.de>
Date:   Tue Oct 8 18:43:16 2024 -0400

    unicode: Don't special case ignorable code points
    
    commit 5c26d2f1d3f5e4be3e196526bead29ecb139cf91 upstream.
    
    We don't need to handle them separately. Instead, just let them
    decompose/casefold to themselves.
    
    Signed-off-by: Gabriel Krisman Bertazi <krisman@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
uprobes: fix kernel info leak via "[uprobes]" vma [+ + +]
Author: Oleg Nesterov <oleg@redhat.com>
Date:   Mon Oct 7 19:46:01 2024 +0200

    uprobes: fix kernel info leak via "[uprobes]" vma
    
    commit 34820304cc2cd1804ee1f8f3504ec77813d29c8e upstream.
    
    xol_add_vma() maps the uninitialized page allocated by __create_xol_area()
    into userspace. On some architectures (x86) this memory is readable even
    without VM_READ, VM_EXEC results in the same pgprot_t as VM_EXEC|VM_READ,
    although this doesn't really matter, debugger can read this memory anyway.
    
    Link: https://lore.kernel.org/all/20240929162047.GA12611@redhat.com/
    
    Reported-by: Will Deacon <will@kernel.org>
    Fixes: d4b3b6384f98 ("uprobes/core: Allocate XOL slots for uprobes use")
    Cc: stable@vger.kernel.org
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: appledisplay: close race between probe and completion handler [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Sep 12 14:32:59 2024 +0200

    USB: appledisplay: close race between probe and completion handler
    
    commit 8265d06b7794493d82c5c21a12d7ba43eccc30cb upstream.
    
    There is a small window during probing when IO is running
    but the backlight is not registered. Processing events
    during that time will crash. The completion handler
    needs to check for a backlight before scheduling work.
    
    The bug is as old as the driver.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    CC: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240912123317.1026049-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdnsp: Fix incorrect usb_request status [+ + +]
Author: Pawel Laszczak <pawell@cadence.com>
Date:   Fri Sep 6 06:48:54 2024 +0000

    usb: cdnsp: Fix incorrect usb_request status
    
    commit 1702bec4477cc7d31adb4a760d14d33fac928b7a upstream.
    
    Fix changes incorrect usb_request->status returned during disabling
    endpoints. Before fix the status returned during dequeuing requests
    while disabling endpoint was ECONNRESET.
    Patch change it to ESHUTDOWN.
    
    Patch fixes issue detected during testing UVC gadget.
    During stopping streaming the class starts dequeuing usb requests and
    controller driver returns the -ECONNRESET status. After completion
    requests the class or application "uvc-gadget" try to queue this
    request again. Changing this status to ESHUTDOWN cause that UVC assumes
    that endpoint is disabled, or device is disconnected and stops
    re-queuing usb requests.
    
    Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
    cc: stable@vger.kernel.org
    Signed-off-by: Pawel Laszczak <pawell@cadence.com>
    Reviewed-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/PH7PR07MB9538E8CA7A2096AAF6A3718FDD9E2@PH7PR07MB9538.namprd07.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: chipidea: udc: enable suspend interrupt after usb reset [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Fri Aug 23 15:38:32 2024 +0800

    usb: chipidea: udc: enable suspend interrupt after usb reset
    
    [ Upstream commit e4fdcc10092fb244218013bfe8ff01c55d54e8e4 ]
    
    Currently, suspend interrupt is enabled before pullup enable operation.
    This will cause a suspend interrupt assert right after pullup DP. This
    suspend interrupt is meaningless, so this will ignore such interrupt
    by enable it after usb reset completed.
    
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/20240823073832.1702135-1-xu.yang_2@nxp.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: class: CDC-ACM: fix race between get_serial and set_serial [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Sep 12 16:19:06 2024 +0200

    USB: class: CDC-ACM: fix race between get_serial and set_serial
    
    commit b41c1fa155ba56d125885b0191aabaf3c508d0a3 upstream.
    
    TIOCGSERIAL is an ioctl. Thus it must be atomic. It returns
    two values. Racing with set_serial it can return an inconsistent
    result. The mutex must be taken.
    
    In terms of logic the bug is as old as the driver. In terms of
    code it goes back to the conversion to the get_serial and
    set_serial methods.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Cc: stable <stable@kernel.org>
    Fixes: 99f75a1fcd865 ("cdc-acm: switch to ->[sg]et_serial()")
    Link: https://lore.kernel.org/r/20240912141916.1044393-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: dwc2: Adjust the timing of USB Driver Interrupt Registration in the Crashkernel Scenario [+ + +]
Author: Shawn Shao <shawn.shao@jaguarmicro.com>
Date:   Fri Aug 30 11:17:09 2024 +0800

    usb: dwc2: Adjust the timing of USB Driver Interrupt Registration in the Crashkernel Scenario
    
    [ Upstream commit 4058c39bd176daf11a826802d940d86292a6b02b ]
    
    The issue is that before entering the crash kernel, the DWC USB controller
    did not perform operations such as resetting the interrupt mask bits.
    After entering the crash kernel,before the USB interrupt handler
    registration was completed while loading the DWC USB driver,an GINTSTS_SOF
    interrupt was received.This triggered the misroute_irq process within the
    GIC handling framework,ultimately leading to the misrouting of the
    interrupt,causing it to be handled by the wrong interrupt handler
    and resulting in the issue.
    
    Summary:In a scenario where the kernel triggers a panic and enters
    the crash kernel,it is necessary to ensure that the interrupt mask
    bit is not enabled before the interrupt registration is complete.
    If an interrupt reaches the CPU at this moment,it will certainly
    not be handled correctly,especially in cases where this interrupt
    is reported frequently.
    
    Please refer to the Crashkernel dmesg information as follows
    (the message on line 3 was added before devm_request_irq is
    called by the dwc2_driver_probe function):
    [    5.866837][    T1] dwc2 JMIC0010:01: supply vusb_d not found, using dummy regulator
    [    5.874588][    T1] dwc2 JMIC0010:01: supply vusb_a not found, using dummy regulator
    [    5.882335][    T1] dwc2 JMIC0010:01: before devm_request_irq  irq: [71], gintmsk[0xf300080e], gintsts[0x04200009]
    [    5.892686][    C0] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.0-jmnd1.2_RC #18
    [    5.900327][    C0] Hardware name: CMSS HyperCard4-25G/HyperCard4-25G, BIOS 1.6.4 Jul  8 2024
    [    5.908836][    C0] Call trace:
    [    5.911965][    C0]  dump_backtrace+0x0/0x1f0
    [    5.916308][    C0]  show_stack+0x20/0x30
    [    5.920304][    C0]  dump_stack+0xd8/0x140
    [    5.924387][    C0]  pcie_xxx_handler+0x3c/0x1d8
    [    5.930121][    C0]  __handle_irq_event_percpu+0x64/0x1e0
    [    5.935506][    C0]  handle_irq_event+0x80/0x1d0
    [    5.940109][    C0]  try_one_irq+0x138/0x174
    [    5.944365][    C0]  misrouted_irq+0x134/0x140
    [    5.948795][    C0]  note_interrupt+0x1d0/0x30c
    [    5.953311][    C0]  handle_irq_event+0x13c/0x1d0
    [    5.958001][    C0]  handle_fasteoi_irq+0xd4/0x260
    [    5.962779][    C0]  __handle_domain_irq+0x88/0xf0
    [    5.967555][    C0]  gic_handle_irq+0x9c/0x2f0
    [    5.971985][    C0]  el1_irq+0xb8/0x140
    [    5.975807][    C0]  __setup_irq+0x3dc/0x7cc
    [    5.980064][    C0]  request_threaded_irq+0xf4/0x1b4
    [    5.985015][    C0]  devm_request_threaded_irq+0x80/0x100
    [    5.990400][    C0]  dwc2_driver_probe+0x1b8/0x6b0
    [    5.995178][    C0]  platform_drv_probe+0x5c/0xb0
    [    5.999868][    C0]  really_probe+0xf8/0x51c
    [    6.004125][    C0]  driver_probe_device+0xfc/0x170
    [    6.008989][    C0]  device_driver_attach+0xc8/0xd0
    [    6.013853][    C0]  __driver_attach+0xe8/0x1b0
    [    6.018369][    C0]  bus_for_each_dev+0x7c/0xdc
    [    6.022886][    C0]  driver_attach+0x2c/0x3c
    [    6.027143][    C0]  bus_add_driver+0xdc/0x240
    [    6.031573][    C0]  driver_register+0x80/0x13c
    [    6.036090][    C0]  __platform_driver_register+0x50/0x5c
    [    6.041476][    C0]  dwc2_platform_driver_init+0x24/0x30
    [    6.046774][    C0]  do_one_initcall+0x50/0x25c
    [    6.051291][    C0]  do_initcall_level+0xe4/0xfc
    [    6.055894][    C0]  do_initcalls+0x80/0xa4
    [    6.060064][    C0]  kernel_init_freeable+0x198/0x240
    [    6.065102][    C0]  kernel_init+0x1c/0x12c
    
    Signed-off-by: Shawn Shao <shawn.shao@jaguarmicro.com>
    Link: https://lore.kernel.org/r/20240830031709.134-1-shawn.shao@jaguarmicro.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc2: drd: fix clock gating on USB role switch [+ + +]
Author: Tomas Marek <tomas.marek@elrest.cz>
Date:   Fri Sep 6 07:50:25 2024 +0200

    usb: dwc2: drd: fix clock gating on USB role switch
    
    commit 2c6b6afa59e78bebcb65bbc8a76b3459f139547c upstream.
    
    The dwc2_handle_usb_suspend_intr() function disables gadget clocks in USB
    peripheral mode when no other power-down mode is available (introduced by
    commit 0112b7ce68ea ("usb: dwc2: Update dwc2_handle_usb_suspend_intr function.")).
    However, the dwc2_drd_role_sw_set() USB role update handler attempts to
    read DWC2 registers if the USB role has changed while the USB is in suspend
    mode (when the clocks are gated). This causes the system to hang.
    
    Release the gadget clocks before handling the USB role update.
    
    Fixes: 0112b7ce68ea ("usb: dwc2: Update dwc2_handle_usb_suspend_intr function.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tomas Marek <tomas.marek@elrest.cz>
    Link: https://lore.kernel.org/r/20240906055025.25057-1-tomas.marek@elrest.cz
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: core: Stop processing of pending events if controller is halted [+ + +]
Author: Selvarasu Ganesan <selvarasu.g@samsung.com>
Date:   Tue Sep 17 04:48:09 2024 +0530

    usb: dwc3: core: Stop processing of pending events if controller is halted
    
    commit 0d410e8913f5cffebcca79ffdd596009d4a13a28 upstream.
    
    This commit addresses an issue where events were being processed when
    the controller was in a halted state. To fix this issue by stop
    processing the events as the event count was considered stale or
    invalid when the controller was halted.
    
    Fixes: fc8bb91bc83e ("usb: dwc3: implement runtime PM")
    Cc: stable@kernel.org
    Signed-off-by: Selvarasu Ganesan <selvarasu.g@samsung.com>
    Suggested-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20240916231813.206-1-selvarasu.g@samsung.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: misc: cypress_cy7c63: check for short transfer [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Sep 12 14:54:43 2024 +0200

    USB: misc: cypress_cy7c63: check for short transfer
    
    commit 49cd2f4d747eeb3050b76245a7f72aa99dbd3310 upstream.
    
    As we process the second byte of a control transfer, transfers
    of less than 2 bytes must be discarded.
    
    This bug is as old as the driver.
    
    SIgned-off-by: Oliver Neukum <oneukum@suse.com>
    CC: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240912125449.1030536-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: misc: yurex: fix race between read and write [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Sep 12 15:21:22 2024 +0200

    USB: misc: yurex: fix race between read and write
    
    [ Upstream commit 93907620b308609c72ba4b95b09a6aa2658bb553 ]
    
    The write code path touches the bbu member in a non atomic manner
    without taking the spinlock. Fix it.
    
    The bug is as old as the driver.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    CC: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240912132126.1034743-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

USB: serial: pl2303: add device id for Macrosilicon MS3020 [+ + +]
Author: Junhao Xie <bigfoot@classfun.cn>
Date:   Tue Sep 3 23:06:38 2024 +0800

    USB: serial: pl2303: add device id for Macrosilicon MS3020
    
    commit 7d47d22444bb7dc1b6d768904a22070ef35e1fc0 upstream.
    
    Add the device id for the Macrosilicon MS3020 which is a
    PL2303HXN based device.
    
    Signed-off-by: Junhao Xie <bigfoot@classfun.cn>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: storage: ignore bogus device raised by JieLi BR21 USB sound chip [+ + +]
Author: Icenowy Zheng <uwu@icenowy.me>
Date:   Tue Oct 1 16:34:07 2024 +0800

    usb: storage: ignore bogus device raised by JieLi BR21 USB sound chip
    
    commit a6555cb1cb69db479d0760e392c175ba32426842 upstream.
    
    JieLi tends to use SCSI via USB Mass Storage to implement their own
    proprietary commands instead of implementing another USB interface.
    Enumerating it as a generic mass storage device will lead to a Hardware
    Error sense key get reported.
    
    Ignore this bogus device to prevent appearing a unusable sdX device
    file.
    
    Signed-off-by: Icenowy Zheng <uwu@icenowy.me>
    Cc: stable <stable@kernel.org>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20241001083407.8336-1-uwu@icenowy.me
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: tcpm: Check for port partner validity before consuming it [+ + +]
Author: Badhri Jagan Sridharan <badhri@google.com>
Date:   Thu Oct 3 09:43:39 2024 -0700

    usb: typec: tcpm: Check for port partner validity before consuming it
    
    commit ae11f04b452b5205536e1c02d31f8045eba249dd upstream.
    
    typec_register_partner() does not guarantee partner registration
    to always succeed. In the event of failure, port->partner is set
    to the error value or NULL. Given that port->partner validity is
    not checked, this results in the following crash:
    
    Unable to handle kernel NULL pointer dereference at virtual address xx
     pc : run_state_machine+0x1bc8/0x1c08
     lr : run_state_machine+0x1b90/0x1c08
    ..
     Call trace:
       run_state_machine+0x1bc8/0x1c08
       tcpm_state_machine_work+0x94/0xe4
       kthread_worker_fn+0x118/0x328
       kthread+0x1d0/0x23c
       ret_from_fork+0x10/0x20
    
    To prevent the crash, check for port->partner validity before
    derefencing it in all the call sites.
    
    Cc: stable@vger.kernel.org
    Fixes: c97cd0b4b54e ("usb: typec: tcpm: set initial svdm version based on pd revision")
    Signed-off-by: Badhri Jagan Sridharan <badhri@google.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20240427202812.3435268-1-badhri@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [Sherry: bp to 5.15.y, minor conflicts due to missing commit:
     8203d26905ee ("usb: typec: tcpm: Register USB Power Delivery
    Capabilities"). Ignore the the part
    typec_partner_set_usb_power_delivery() which is not in 5.15.y.]
    Signed-off-by: Sherry Yang <sherry.yang@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: usbtmc: prevent kernel-usb-infoleak [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Sun Sep 8 17:17:41 2024 +0800

    USB: usbtmc: prevent kernel-usb-infoleak
    
    commit 625fa77151f00c1bd00d34d60d6f2e710b3f9aad upstream.
    
    The syzbot reported a kernel-usb-infoleak in usbtmc_write,
    we need to clear the structure before filling fields.
    
    Fixes: 4ddc645f40e9 ("usb: usbtmc: Add ioctl for vendor specific write")
    Reported-and-tested-by: syzbot+9d34f80f841e948c3fdb@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9d34f80f841e948c3fdb
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/tencent_9649AA6EC56EDECCA8A7D106C792D1C66B06@qq.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: xhci: fix loss of data on Cadence xHC [+ + +]
Author: Pawel Laszczak <pawell@cadence.com>
Date:   Thu Sep 5 07:03:28 2024 +0000

    usb: xhci: fix loss of data on Cadence xHC
    
    [ Upstream commit e5fa8db0be3e8757e8641600c518425a4589b85c ]
    
    Streams should flush their TRB cache, re-read TRBs, and start executing
    TRBs from the beginning of the new dequeue pointer after a 'Set TR Dequeue
    Pointer' command.
    
    Cadence controllers may fail to start from the beginning of the dequeue
    TRB as it doesn't clear the Opaque 'RsvdO' field of the stream context
    during 'Set TR Dequeue' command. This stream context area is where xHC
    stores information about the last partially executed TD when a stream
    is stopped. xHC uses this information to resume the transfer where it left
    mid TD, when the stream is restarted.
    
    Patch fixes this by clearing out all RsvdO fields before initializing new
    Stream transfer using a 'Set TR Dequeue Pointer' command.
    
    Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
    cc: stable@vger.kernel.org
    Signed-off-by: Pawel Laszczak <pawell@cadence.com>
    Reviewed-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/PH7PR07MB95386A40146E3EC64086F409DD9D2@PH7PR07MB9538.namprd07.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: xhci: Fix problem with xhci resume from suspend [+ + +]
Author: Jose Alberto Reguero <jose.alberto.reguero@gmail.com>
Date:   Thu Sep 19 20:42:02 2024 +0200

    usb: xhci: Fix problem with xhci resume from suspend
    
    commit d44238d8254a36249d576c96473269dbe500f5e4 upstream.
    
    I have a ASUS PN51 S mini pc that has two xhci devices. One from AMD,
    and other from ASMEDIA. The one from ASMEDIA have problems when resume
    from suspend, and keep broken until unplug the  power cord. I use this
    kernel parameter: xhci-hcd.quirks=128 and then it works ok. I make a
    path to reset only the ASMEDIA xhci.
    
    Signed-off-by: Jose Alberto Reguero <jose.alberto.reguero@gmail.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20240919184202.22249-1-jose.alberto.reguero@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: yurex: Fix inconsistent locking bug in yurex_read() [+ + +]
Author: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Date:   Mon Dec 18 22:36:35 2023 -0800

    usb: yurex: Fix inconsistent locking bug in yurex_read()
    
    commit e7d3b9f28654dbfce7e09f8028210489adaf6a33 upstream.
    
    Unlock before returning on the error path.
    
    Fixes: 86b20af11e84 ("usb: yurex: Replace snprintf() with the safer scnprintf() variant")
    Reported-by: Dan Carpenter <error27@gmail.com>
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/r/202312170252.3udgrIcP-lkp@intel.com/
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Link: https://lore.kernel.org/r/20231219063639.450994-1-harshit.m.mogalapalli@oracle.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: yurex: Replace snprintf() with the safer scnprintf() variant [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Wed Dec 13 16:42:37 2023 +0000

    usb: yurex: Replace snprintf() with the safer scnprintf() variant
    
    [ Upstream commit 86b20af11e84c26ae3fde4dcc4f490948e3f8035 ]
    
    There is a general misunderstanding amongst engineers that {v}snprintf()
    returns the length of the data *actually* encoded into the destination
    array.  However, as per the C99 standard {v}snprintf() really returns
    the length of the data that *would have been* written if there were
    enough space for it.  This misunderstanding has led to buffer-overruns
    in the past.  It's generally considered safer to use the {v}scnprintf()
    variants in their place (or even sprintf() in simple cases).  So let's
    do that.
    
    Whilst we're at it, let's define some magic numbers to increase
    readability and ease of maintenance.
    
    Link: https://lwn.net/Articles/69419/
    Link: https://github.com/KSPP/linux/issues/105
    Cc: Tomoki Sekiyama <tomoki.sekiyama@gmail.com>
    Signed-off-by: Lee Jones <lee@kernel.org>
    Link: https://lore.kernel.org/r/20231213164246.1021885-9-lee@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 93907620b308 ("USB: misc: yurex: fix race between read and write")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usbnet: fix cyclical race on disconnect with work queue [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Sep 19 14:33:42 2024 +0200

    usbnet: fix cyclical race on disconnect with work queue
    
    commit 04e906839a053f092ef53f4fb2d610983412b904 upstream.
    
    The work can submit URBs and the URBs can schedule the work.
    This cycle needs to be broken, when a device is to be stopped.
    Use a flag to do so.
    This is a design issue as old as the driver.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    CC: stable@vger.kernel.org
    Link: https://patch.msgid.link/20240919123525.688065-1-oneukum@suse.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usbnet: ipheth: fix carrier detection in modes 1 and 4 [+ + +]
Author: Foster Snowhill <forst@pen.gy>
Date:   Tue Aug 6 19:28:09 2024 +0200

    usbnet: ipheth: fix carrier detection in modes 1 and 4
    
    [ Upstream commit 67927a1b255d883881be9467508e0af9a5e0be9d ]
    
    Apart from the standard "configurations", "interfaces" and "alternate
    interface settings" in USB, iOS devices also have a notion of
    "modes". In different modes, the device exposes a different set of
    available configurations.
    
    Depending on the iOS version, and depending on the current mode, the
    length and contents of the carrier state control message differs:
    
    * 1 byte (seen on iOS 4.2.1, 8.4):
        * 03: carrier off (mode 0)
        * 04: carrier on (mode 0)
    * 3 bytes (seen on iOS 10.3.4, 15.7.6):
        * 03 03 03: carrier off (mode 0)
        * 04 04 03: carrier on (mode 0)
    * 4 bytes (seen on iOS 16.5, 17.6):
        * 03 03 03 00: carrier off (mode 0)
        * 04 03 03 00: carrier off (mode 1)
        * 06 03 03 00: carrier off (mode 4)
        * 04 04 03 04: carrier on (mode 0 and 1)
        * 06 04 03 04: carrier on (mode 4)
    
    Before this change, the driver always used the first byte of the
    response to determine carrier state.
    
    From this larger sample, the first byte seems to indicate the number of
    available USB configurations in the current mode (with the exception of
    the default mode 0), and in some cases (namely mode 1 and 4) does not
    correlate with the carrier state.
    
    Previous logic erroneously counted `04 03 03 00` as "carrier on" and
    `06 04 03 04` as "carrier off" on iOS versions that support mode 1 and
    mode 4 respectively.
    
    Only modes 0, 1 and 4 expose the USB Ethernet interfaces necessary for
    the ipheth driver.
    
    Check the second byte of the control message where possible, and fall
    back to checking the first byte on older iOS versions.
    
    Signed-off-by: Foster Snowhill <forst@pen.gy>
    Tested-by: Georgi Valkov <gvalkov@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vdpa: Add eventfd for the vdpa callback [+ + +]
Author: Xie Yongji <xieyongji@bytedance.com>
Date:   Thu Mar 23 13:30:40 2023 +0800

    vdpa: Add eventfd for the vdpa callback
    
    [ Upstream commit 5e68470f4e80a4120e9ecec408f6ab4ad386bd4a ]
    
    Add eventfd for the vdpa callback so that user
    can signal it directly instead of triggering the
    callback. It will be used for vhost-vdpa case.
    
    Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
    Message-Id: <20230323053043.35-9-xieyongji@bytedance.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Stable-dep-of: 02e9e9366fef ("vhost_vdpa: assign irq bypass producer token correctly")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vfio/pci: fix potential memory leak in vfio_intx_enable() [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Mon Apr 15 09:50:29 2024 +0800

    vfio/pci: fix potential memory leak in vfio_intx_enable()
    
    commit 82b951e6fbd31d85ae7f4feb5f00ddd4c5d256e2 upstream.
    
    If vfio_irq_ctx_alloc() failed will lead to 'name' memory leak.
    
    Fixes: 18c198c96a81 ("vfio/pci: Create persistent INTx handler")
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Acked-by: Reinette Chatre <reinette.chatre@intel.com>
    Link: https://lore.kernel.org/r/20240415015029.3699844-1-yebin10@huawei.com
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Oleksandr Tymoshenko <ovt@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vfs: fix race between evice_inodes() and find_inode()&iput() [+ + +]
Author: Julian Sun <sunjunchao2870@gmail.com>
Date:   Fri Aug 23 21:07:30 2024 +0800

    vfs: fix race between evice_inodes() and find_inode()&iput()
    
    commit 88b1afbf0f6b221f6c5bb66cc80cd3b38d696687 upstream.
    
    Hi, all
    
    Recently I noticed a bug[1] in btrfs, after digged it into
    and I believe it'a race in vfs.
    
    Let's assume there's a inode (ie ino 261) with i_count 1 is
    called by iput(), and there's a concurrent thread calling
    generic_shutdown_super().
    
    cpu0:                              cpu1:
    iput() // i_count is 1
      ->spin_lock(inode)
      ->dec i_count to 0
      ->iput_final()                    generic_shutdown_super()
        ->__inode_add_lru()               ->evict_inodes()
          // cause some reason[2]           ->if (atomic_read(inode->i_count)) continue;
          // return before                  // inode 261 passed the above check
          // list_lru_add_obj()             // and then schedule out
       ->spin_unlock()
    // note here: the inode 261
    // was still at sb list and hash list,
    // and I_FREEING|I_WILL_FREE was not been set
    
    btrfs_iget()
      // after some function calls
      ->find_inode()
        // found the above inode 261
        ->spin_lock(inode)
       // check I_FREEING|I_WILL_FREE
       // and passed
          ->__iget()
        ->spin_unlock(inode)                // schedule back
                                            ->spin_lock(inode)
                                            // check (I_NEW|I_FREEING|I_WILL_FREE) flags,
                                            // passed and set I_FREEING
    iput()                                  ->spin_unlock(inode)
      ->spin_lock(inode)                      ->evict()
      // dec i_count to 0
      ->iput_final()
        ->spin_unlock()
        ->evict()
    
    Now, we have two threads simultaneously evicting
    the same inode, which may trigger the BUG(inode->i_state & I_CLEAR)
    statement both within clear_inode() and iput().
    
    To fix the bug, recheck the inode->i_count after holding i_lock.
    Because in the most scenarios, the first check is valid, and
    the overhead of spin_lock() can be reduced.
    
    If there is any misunderstanding, please let me know, thanks.
    
    [1]: https://lore.kernel.org/linux-btrfs/000000000000eabe1d0619c48986@google.com/
    [2]: The reason might be 1. SB_ACTIVE was removed or 2. mapping_shrinkable()
    return false when I reproduced the bug.
    
    Reported-by: syzbot+67ba3c42bcbb4665d3ad@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=67ba3c42bcbb4665d3ad
    CC: stable@vger.kernel.org
    Fixes: 63997e98a3be ("split invalidate_inodes()")
    Signed-off-by: Julian Sun <sunjunchao2870@gmail.com>
    Link: https://lore.kernel.org/r/20240823130730.658881-1-sunjunchao2870@gmail.com
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vhost/scsi: null-ptr-dereference in vhost_scsi_get_req() [+ + +]
Author: Haoran Zhang <wh1sper@zju.edu.cn>
Date:   Tue Oct 1 15:14:15 2024 -0500

    vhost/scsi: null-ptr-dereference in vhost_scsi_get_req()
    
    commit 221af82f606d928ccef19a16d35633c63026f1be upstream.
    
    Since commit 3f8ca2e115e5 ("vhost/scsi: Extract common handling code
    from control queue handler") a null pointer dereference bug can be
    triggered when guest sends an SCSI AN request.
    
    In vhost_scsi_ctl_handle_vq(), `vc.target` is assigned with
    `&v_req.tmf.lun[1]` within a switch-case block and is then passed to
    vhost_scsi_get_req() which extracts `vc->req` and `tpg`. However, for
    a `VIRTIO_SCSI_T_AN_*` request, tpg is not required, so `vc.target` is
    set to NULL in this branch. Later, in vhost_scsi_get_req(),
    `vc->target` is dereferenced without being checked, leading to a null
    pointer dereference bug. This bug can be triggered from guest.
    
    When this bug occurs, the vhost_worker process is killed while holding
    `vq->mutex` and the corresponding tpg will remain occupied
    indefinitely.
    
    Below is the KASAN report:
    Oops: general protection fault, probably for non-canonical address
    0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    CPU: 1 PID: 840 Comm: poc Not tainted 6.10.0+ #1
    Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS
    1.16.3-debian-1.16.3-2 04/01/2014
    RIP: 0010:vhost_scsi_get_req+0x165/0x3a0
    Code: 00 fc ff df 48 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 2b 02 00 00
    48 b8 00 00 00 00 00 fc ff df 4d 8b 65 30 4c 89 e2 48 c1 ea 03 <0f> b6
    04 02 4c 89 e2 83 e2 07 38 d0 7f 08 84 c0 0f 85 be 01 00 00
    RSP: 0018:ffff888017affb50 EFLAGS: 00010246
    RAX: dffffc0000000000 RBX: ffff88801b000000 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff888017affcb8
    RBP: ffff888017affb80 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
    R13: ffff888017affc88 R14: ffff888017affd1c R15: ffff888017993000
    FS:  000055556e076500(0000) GS:ffff88806b100000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00000000200027c0 CR3: 0000000010ed0004 CR4: 0000000000370ef0
    Call Trace:
     <TASK>
     ? show_regs+0x86/0xa0
     ? die_addr+0x4b/0xd0
     ? exc_general_protection+0x163/0x260
     ? asm_exc_general_protection+0x27/0x30
     ? vhost_scsi_get_req+0x165/0x3a0
     vhost_scsi_ctl_handle_vq+0x2a4/0xca0
     ? __pfx_vhost_scsi_ctl_handle_vq+0x10/0x10
     ? __switch_to+0x721/0xeb0
     ? __schedule+0xda5/0x5710
     ? __kasan_check_write+0x14/0x30
     ? _raw_spin_lock+0x82/0xf0
     vhost_scsi_ctl_handle_kick+0x52/0x90
     vhost_run_work_list+0x134/0x1b0
     vhost_task_fn+0x121/0x350
    ...
     </TASK>
    ---[ end trace 0000000000000000 ]---
    
    Let's add a check in vhost_scsi_get_req.
    
    Fixes: 3f8ca2e115e5 ("vhost/scsi: Extract common handling code from control queue handler")
    Signed-off-by: Haoran Zhang <wh1sper@zju.edu.cn>
    [whitespace fixes]
    Signed-off-by: Mike Christie <michael.christie@oracle.com>
    Message-Id: <b26d7ddd-b098-4361-88f8-17ca7f90adf7@oracle.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vhost_vdpa: assign irq bypass producer token correctly [+ + +]
Author: Jason Wang <jasowang@redhat.com>
Date:   Fri Aug 16 11:19:00 2024 +0800

    vhost_vdpa: assign irq bypass producer token correctly
    
    [ Upstream commit 02e9e9366fefe461719da5d173385b6685f70319 ]
    
    We used to call irq_bypass_unregister_producer() in
    vhost_vdpa_setup_vq_irq() which is problematic as we don't know if the
    token pointer is still valid or not.
    
    Actually, we use the eventfd_ctx as the token so the life cycle of the
    token should be bound to the VHOST_SET_VRING_CALL instead of
    vhost_vdpa_setup_vq_irq() which could be called by set_status().
    
    Fixing this by setting up irq bypass producer's token when handling
    VHOST_SET_VRING_CALL and un-registering the producer before calling
    vhost_vring_ioctl() to prevent a possible use after free as eventfd
    could have been released in vhost_vring_ioctl(). And such registering
    and unregistering will only be done if DRIVER_OK is set.
    
    Reported-by: Dragos Tatulea <dtatulea@nvidia.com>
    Tested-by: Dragos Tatulea <dtatulea@nvidia.com>
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Fixes: 2cf1ba9a4d15 ("vhost_vdpa: implement IRQ offloading in vhost_vdpa")
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Message-Id: <20240816031900.18013-1-jasowang@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio_console: fix misc probe bugs [+ + +]
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Mon Sep 16 14:16:44 2024 -0400

    virtio_console: fix misc probe bugs
    
    [ Upstream commit b9efbe2b8f0177fa97bfab290d60858900aa196b ]
    
    This fixes the following issue discovered by code review:
    
    after vqs have been created, a buggy device can send an interrupt.
    
    A control vq callback will then try to schedule control_work which has
    not been initialized yet. Similarly for config interrupt.  Further, in
    and out vq callbacks invoke find_port_by_vq which attempts to take
    ports_lock which also has not been initialized.
    
    To fix, init all locks and work before creating vqs.
    
    Message-ID: <ad982e975a6160ad110c623c016041311ca15b4f.1726511547.git.mst@redhat.com>
    Fixes: 17634ba25544 ("virtio: console: Add a new MULTIPORT feature, support for generic ports")
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio_pmem: Check device status before requesting flush [+ + +]
Author: Philip Chen <philipchen@chromium.org>
Date:   Mon Aug 26 21:53:13 2024 +0000

    virtio_pmem: Check device status before requesting flush
    
    [ Upstream commit e25fbcd97cf52c3c9824d44b5c56c19673c3dd50 ]
    
    If a pmem device is in a bad status, the driver side could wait for
    host ack forever in virtio_pmem_flush(), causing the system to hang.
    
    So add a status check in the beginning of virtio_pmem_flush() to return
    early if the device is not activated.
    
    Signed-off-by: Philip Chen <philipchen@chromium.org>
    Message-Id: <20240826215313.2673566-1-philipchen@chromium.org>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Pankaj Gupta <pankaj.gupta.linux@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watchdog: imx_sc_wdt: Don't disable WDT in suspend [+ + +]
Author: Jonas Blixt <jonas.blixt@actia.se>
Date:   Thu Aug 1 14:18:45 2024 +0200

    watchdog: imx_sc_wdt: Don't disable WDT in suspend
    
    [ Upstream commit 2d9d6d300fb0a4ae4431bb308027ac9385746d42 ]
    
    Parts of the suspend and resume chain is left unprotected if we disable
    the WDT here.
    
    >From experiments we can see that the SCU disables and re-enables the WDT
    when we enter and leave suspend to ram. By not touching the WDT here we
    are protected by the WDT all the way to the SCU.
    
    Signed-off-by: Jonas Blixt <jonas.blixt@actia.se>
    CC: Anson Huang <anson.huang@nxp.com>
    Fixes: 986857acbc9a ("watchdog: imx_sc: Add i.MX system controller watchdog support")
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20240801121845.1465765-1-jonas.blixt@actia.se
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: ath11k: fix array out-of-bound access in SoC stats [+ + +]
Author: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
Date:   Thu Jul 4 12:38:11 2024 +0530

    wifi: ath11k: fix array out-of-bound access in SoC stats
    
    [ Upstream commit 69f253e46af98af17e3efa3e5dfa72fcb7d1983d ]
    
    Currently, the ath11k_soc_dp_stats::hal_reo_error array is defined with a
    maximum size of DP_REO_DST_RING_MAX. However, the ath11k_dp_process_rx()
    function access ath11k_soc_dp_stats::hal_reo_error using the REO
    destination SRNG ring ID, which is incorrect. SRNG ring ID differ from
    normal ring ID, and this usage leads to out-of-bounds array access. To fix
    this issue, modify ath11k_dp_process_rx() to use the normal ring ID
    directly instead of the SRNG ring ID to avoid out-of-bounds array access.
    
    Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://patch.msgid.link/20240704070811.4186543-3-quic_periyasa@quicinc.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: fix parameter check in ath9k_init_debug() [+ + +]
Author: Minjie Du <duminjie@vivo.com>
Date:   Wed Jul 12 19:47:40 2023 +0800

    wifi: ath9k: fix parameter check in ath9k_init_debug()
    
    [ Upstream commit 6edb4ba6fb5b946d112259f54f4657f82eb71e89 ]
    
    Make IS_ERR() judge the debugfs_create_dir() function return
    in ath9k_init_debug()
    
    Signed-off-by: Minjie Du <duminjie@vivo.com>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230712114740.13226-1-duminjie@vivo.com
    Stable-dep-of: f6ffe7f01847 ("wifi: ath9k: Remove error checks when creating debugfs entries")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: fix possible integer overflow in ath9k_get_et_stats() [+ + +]
Author: Dmitry Kandybka <d.kandybka@gmail.com>
Date:   Thu Jul 25 14:17:43 2024 +0300

    wifi: ath9k: fix possible integer overflow in ath9k_get_et_stats()
    
    [ Upstream commit 3f66f26703093886db81f0610b97a6794511917c ]
    
    In 'ath9k_get_et_stats()', promote TX stats counters to 'u64'
    to avoid possible integer overflow. Compile tested only.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Signed-off-by: Dmitry Kandybka <d.kandybka@gmail.com>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://patch.msgid.link/20240725111743.14422-1-d.kandybka@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k: Remove error checks when creating debugfs entries [+ + +]
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date:   Mon Aug 5 13:02:22 2024 +0200

    wifi: ath9k: Remove error checks when creating debugfs entries
    
    [ Upstream commit f6ffe7f0184792c2f99aca6ae5b916683973d7d3 ]
    
    We should not be checking the return values from debugfs creation at all: the
    debugfs functions are designed to handle errors of previously called functions
    and just transparently abort the creation of debugfs entries when debugfs is
    disabled. If we check the return value and abort driver initialisation, we break
    the driver if debugfs is disabled (such as when booting with debugfs=off).
    
    Earlier versions of ath9k accidentally did the right thing by checking the
    return value, but only for NULL, not for IS_ERR(). This was "fixed" by the two
    commits referenced below, breaking ath9k with debugfs=off starting from the 6.6
    kernel (as reported in the Bugzilla linked below).
    
    Restore functionality by just getting rid of the return value check entirely.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219122
    Fixes: 1e4134610d93 ("wifi: ath9k: use IS_ERR() with debugfs_create_dir()")
    Fixes: 6edb4ba6fb5b ("wifi: ath9k: fix parameter check in ath9k_init_debug()")
    Reported-by: Daniel Tobias <dan.g.tob@gmail.com>
    Tested-by: Daniel Tobias <dan.g.tob@gmail.com>
    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://patch.msgid.link/20240805110225.19690-1-toke@toke.dk
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath9k_htc: Use __skb_set_length() for resetting urb before resubmit [+ + +]
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date:   Mon Aug 12 16:24:46 2024 +0200

    wifi: ath9k_htc: Use __skb_set_length() for resetting urb before resubmit
    
    [ Upstream commit 94745807f3ebd379f23865e6dab196f220664179 ]
    
    Syzbot points out that skb_trim() has a sanity check on the existing length of
    the skb, which can be uninitialised in some error paths. The intent here is
    clearly just to reset the length to zero before resubmitting, so switch to
    calling __skb_set_length(skb, 0) directly. In addition, __skb_set_length()
    already contains a call to skb_reset_tail_pointer(), so remove the redundant
    call.
    
    The syzbot report came from ath9k_hif_usb_reg_in_cb(), but there's a similar
    usage of skb_trim() in ath9k_hif_usb_rx_cb(), change both while we're at it.
    
    Reported-by: syzbot+98afa303be379af6cdb2@syzkaller.appspotmail.com
    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://patch.msgid.link/20240812142447.12328-1-toke@toke.dk
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: fix two more possible UBSAN-detected off-by-one errors [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Mon Sep 9 12:08:06 2024 +0300

    wifi: cfg80211: fix two more possible UBSAN-detected off-by-one errors
    
    [ Upstream commit 15ea13b1b1fbf6364d4cd568e65e4c8479632999 ]
    
    Although not reproduced in practice, these two cases may be
    considered by UBSAN as off-by-one errors. So fix them in the
    same way as in commit a26a5107bc52 ("wifi: cfg80211: fix UBSAN
    noise in cfg80211_wext_siwscan()").
    
    Fixes: 807f8a8c3004 ("cfg80211/nl80211: add support for scheduled scans")
    Fixes: 5ba63533bbf6 ("cfg80211: fix alignment problem in scan request")
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Link: https://patch.msgid.link/20240909090806.1091956-1-dmantipov@yandex.ru
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: fix UBSAN noise in cfg80211_wext_siwscan() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Thu Sep 5 18:04:00 2024 +0300

    wifi: cfg80211: fix UBSAN noise in cfg80211_wext_siwscan()
    
    [ Upstream commit a26a5107bc52922cf5f67361e307ad66547b51c7 ]
    
    Looking at https://syzkaller.appspot.com/bug?extid=1a3986bbd3169c307819
    and running reproducer with CONFIG_UBSAN_BOUNDS, I've noticed the
    following:
    
    [ T4985] UBSAN: array-index-out-of-bounds in net/wireless/scan.c:3479:25
    [ T4985] index 164 is out of range for type 'struct ieee80211_channel *[]'
    <...skipped...>
    [ T4985] Call Trace:
    [ T4985]  <TASK>
    [ T4985]  dump_stack_lvl+0x1c2/0x2a0
    [ T4985]  ? __pfx_dump_stack_lvl+0x10/0x10
    [ T4985]  ? __pfx__printk+0x10/0x10
    [ T4985]  __ubsan_handle_out_of_bounds+0x127/0x150
    [ T4985]  cfg80211_wext_siwscan+0x11a4/0x1260
    <...the rest is not too useful...>
    
    Even if we do 'creq->n_channels = n_channels' before 'creq->ssids =
    (void *)&creq->channels[n_channels]', UBSAN treats the latter as
    off-by-one error. Fix this by using pointer arithmetic rather than
    an expression with explicit array indexing and use convenient
    'struct_size()' to simplify the math here and in 'kzalloc()' above.
    
    Fixes: 5ba63533bbf6 ("cfg80211: fix alignment problem in scan request")
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Reviewed-by: Kees Cook <kees@kernel.org>
    Link: https://patch.msgid.link/20240905150400.126386-1-dmantipov@yandex.ru
    [fix coding style for multi-line calculation]
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: clear trans->state earlier upon error [+ + +]
Author: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Date:   Sun Aug 25 19:17:01 2024 +0300

    wifi: iwlwifi: clear trans->state earlier upon error
    
    [ Upstream commit 094513f8a2fbddee51b055d8035f995551f98fce ]
    
    When the firmware crashes, we first told the op_mode and only then,
    changed the transport's state. This is a problem if the op_mode's
    nic_error() handler needs to send a host command: it'll see that the
    transport's state still reflects that the firmware is alive.
    
    Today, this has no consequences since we set the STATUS_FW_ERROR bit and
    that will prevent sending host commands. iwl_fw_dbg_stop_restart_recording
    looks at this bit to know not to send a host command for example.
    
    To fix the hibernation, we needed to reset the firmware without having
    an error and checking STATUS_FW_ERROR to see whether the firmware is
    alive will no longer hold, so this change is necessary as well.
    
    Change the flow a bit.
    Change trans->state before calling the op_mode's nic_error() method and
    check trans->state instead of STATUS_FW_ERROR. This will keep the
    current behavior of iwl_fw_dbg_stop_restart_recording upon firmware
    error, and it'll allow us to call iwl_fw_dbg_stop_restart_recording
    safely even if STATUS_FW_ERROR is clear, but yet, the firmware is not
    alive.
    
    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20240825191257.9d7427fbdfd7.Ia056ca57029a382c921d6f7b6a6b28fc480f2f22@changeid
    [I missed this was a dependency for the hibernation fix, changed
     the commit message a bit accordingly]
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: lower message level for FW buffer destination [+ + +]
Author: Benjamin Berg <benjamin.berg@intel.com>
Date:   Sun Aug 25 19:17:13 2024 +0300

    wifi: iwlwifi: lower message level for FW buffer destination
    
    [ Upstream commit f8a129c1e10256c785164ed5efa5d17d45fbd81b ]
    
    An invalid buffer destination is not a problem for the driver and it
    does not make sense to report it with the KERN_ERR message level. As
    such, change the message to use IWL_DEBUG_FW.
    
    Reported-by: Len Brown <lenb@kernel.org>
    Closes: https://lore.kernel.org/r/CAJvTdKkcxJss=DM2sxgv_MR5BeZ4_OC-3ad6tA40TYH2yqHCWw@mail.gmail.com
    Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20240825191257.20abf78f05bc.Ifbcecc2ae9fb40b9698302507dcba8b922c8d856@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mvm: don't wait for tx queues if firmware is dead [+ + +]
Author: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Date:   Sun Aug 25 19:17:04 2024 +0300

    wifi: iwlwifi: mvm: don't wait for tx queues if firmware is dead
    
    [ Upstream commit 3a84454f5204718ca5b4ad2c1f0bf2031e2403d1 ]
    
    There is a WARNING in iwl_trans_wait_tx_queues_empty() (that was
    recently converted from just a message), that can be hit if we
    wait for TX queues to become empty after firmware died. Clearly,
    we can't expect anything from the firmware after it's declared dead.
    
    Don't call iwl_trans_wait_tx_queues_empty() in this case. While it could
    be a good idea to stop the flow earlier, the flush functions do some
    maintenance work that is not related to the firmware, so keep that part
    of the code running even when the firmware is not running.
    
    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20240825191257.a7cbd794cee9.I44a739fbd4ffcc46b83844dd1c7b2eb0c7b270f6@changeid
    [edit commit message]
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mvm: fix iwl_mvm_scan_fits() calculation [+ + +]
Author: Daniel Gabay <daniel.gabay@intel.com>
Date:   Sun Aug 25 19:17:05 2024 +0300

    wifi: iwlwifi: mvm: fix iwl_mvm_scan_fits() calculation
    
    [ Upstream commit d44162280899c3fc2c6700e21e491e71c3c96e3d ]
    
    The calculation should consider also the 6GHz IE's len, fix that.
    In addition, in iwl_mvm_sched_scan_start() the scan_fits helper is
    called only in case non_psc_incldued is true, but it should be called
    regardless, fix that as well.
    
    Signed-off-by: Daniel Gabay <daniel.gabay@intel.com>
    Reviewed-by: Ilan Peer <ilan.peer@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20240825191257.7db825442fd2.I99f4d6587709de02072fd57957ec7472331c6b1d@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mvm: increase the time between ranging measurements [+ + +]
Author: Avraham Stern <avraham.stern@intel.com>
Date:   Mon Jul 29 20:20:12 2024 +0300

    wifi: iwlwifi: mvm: increase the time between ranging measurements
    
    [ Upstream commit 3a7ee94559dfd640604d0265739e86dec73b64e8 ]
    
    The algo running in fw may take a little longer than 5 milliseconds,
    (e.g. measurement on 80MHz while associated). Increase the minimum
    time between measurements to 7 milliseconds.
    
    Fixes: 830aa3e7d1ca ("iwlwifi: mvm: add support for range request command version 13")
    Signed-off-by: Avraham Stern <avraham.stern@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20240729201718.d3f3c26e00d9.I09e951290e8a3d73f147b88166fd9a678d1d69ed@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: mvm: pause TCM when the firmware is stopped [+ + +]
Author: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Date:   Sun Aug 25 19:17:10 2024 +0300

    wifi: iwlwifi: mvm: pause TCM when the firmware is stopped
    
    [ Upstream commit 0668ebc8c2282ca1e7eb96092a347baefffb5fe7 ]
    
    Not doing so will make us send a host command to the transport while the
    firmware is not alive, which will trigger a WARNING.
    
    bad state = 0
    WARNING: CPU: 2 PID: 17434 at drivers/net/wireless/intel/iwlwifi/iwl-trans.c:115 iwl_trans_send_cmd+0x1cb/0x1e0 [iwlwifi]
    RIP: 0010:iwl_trans_send_cmd+0x1cb/0x1e0 [iwlwifi]
    Call Trace:
     <TASK>
     iwl_mvm_send_cmd+0x40/0xc0 [iwlmvm]
     iwl_mvm_config_scan+0x198/0x260 [iwlmvm]
     iwl_mvm_recalc_tcm+0x730/0x11d0 [iwlmvm]
     iwl_mvm_tcm_work+0x1d/0x30 [iwlmvm]
     process_one_work+0x29e/0x640
     worker_thread+0x2df/0x690
     ? rescuer_thread+0x540/0x540
     kthread+0x192/0x1e0
     ? set_kthread_struct+0x90/0x90
     ret_from_fork+0x22/0x30
    
    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20240825191257.5abe71ca1b6b.I97a968cb8be1f24f94652d9b110ecbf6af73f89e@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: use two-phase skb reclamation in ieee80211_do_stop() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Fri Sep 6 15:31:51 2024 +0300

    wifi: mac80211: use two-phase skb reclamation in ieee80211_do_stop()
    
    [ Upstream commit 9d301de12da6e1bb069a9835c38359b8e8135121 ]
    
    Since '__dev_queue_xmit()' should be called with interrupts enabled,
    the following backtrace:
    
    ieee80211_do_stop()
     ...
     spin_lock_irqsave(&local->queue_stop_reason_lock, flags)
     ...
     ieee80211_free_txskb()
      ieee80211_report_used_skb()
       ieee80211_report_ack_skb()
        cfg80211_mgmt_tx_status_ext()
         nl80211_frame_tx_status()
          genlmsg_multicast_netns()
           genlmsg_multicast_netns_filtered()
            nlmsg_multicast_filtered()
             netlink_broadcast_filtered()
              do_one_broadcast()
               netlink_broadcast_deliver()
                __netlink_sendskb()
                 netlink_deliver_tap()
                  __netlink_deliver_tap_skb()
                   dev_queue_xmit()
                    __dev_queue_xmit() ; with IRQS disabled
     ...
     spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags)
    
    issues the warning (as reported by syzbot reproducer):
    
    WARNING: CPU: 2 PID: 5128 at kernel/softirq.c:362 __local_bh_enable_ip+0xc3/0x120
    
    Fix this by implementing a two-phase skb reclamation in
    'ieee80211_do_stop()', where actual work is performed
    outside of a section with interrupts disabled.
    
    Fixes: 5061b0c2b906 ("mac80211: cooperate more with network namespaces")
    Reported-by: syzbot+1a3986bbd3169c307819@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=1a3986bbd3169c307819
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Link: https://patch.msgid.link/20240906123151.351647-1-dmantipov@yandex.ru
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mt76: mt7615: check devm_kasprintf() returned value [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Thu Sep 5 09:47:53 2024 +0800

    wifi: mt76: mt7615: check devm_kasprintf() returned value
    
    commit 5acdc432f832d810e0d638164c393b877291d9b4 upstream.
    
    devm_kasprintf() can return a NULL pointer on failure but this returned
    value is not checked. Fix this lack and check the returned value.
    
    Found by code review.
    
    Cc: stable@vger.kernel.org
    Fixes: 0bb4e9187ea4 ("mt76: mt7615: fix hwmon temp sensor mem use-after-free")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
    Link: https://patch.msgid.link/20240905014753.353271-1-make24@iscas.ac.cn
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mt76: mt7915: fix rx filter setting for bfee functionality [+ + +]
Author: Howard Hsu <howard-yh.hsu@mediatek.com>
Date:   Tue Aug 27 11:30:08 2024 +0200

    wifi: mt76: mt7915: fix rx filter setting for bfee functionality
    
    [ Upstream commit 6ac80fce713e875a316a58975b830720a3e27721 ]
    
    Fix rx filter setting to prevent dropping NDPA frames. Without this
    change, bfee functionality may behave abnormally.
    
    Fixes: e57b7901469f ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets")
    Signed-off-by: Howard Hsu <howard-yh.hsu@mediatek.com>
    Link: https://patch.msgid.link/20240827093011.18621-21-nbd@nbd.name
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mt76: mt7915: hold dev->mt76.mutex while disabling tx worker [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Tue Aug 27 11:30:04 2024 +0200

    wifi: mt76: mt7915: hold dev->mt76.mutex while disabling tx worker
    
    [ Upstream commit 8f7152f10cb434f954aeff85ca1be9cd4d01912b ]
    
    Prevent racing against other functions disabling the same worker
    
    Link: https://patch.msgid.link/20240827093011.18621-17-nbd@nbd.name
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mwifiex: Fix memcpy() field-spanning write warning in mwifiex_cmd_802_11_scan_ext() [+ + +]
Author: Gustavo A. R. Silva <gustavoars@kernel.org>
Date:   Wed Aug 21 15:23:51 2024 -0600

    wifi: mwifiex: Fix memcpy() field-spanning write warning in mwifiex_cmd_802_11_scan_ext()
    
    [ Upstream commit 498365e52bebcbc36a93279fe7e9d6aec8479cee ]
    
    Replace one-element array with a flexible-array member in
    `struct host_cmd_ds_802_11_scan_ext`.
    
    With this, fix the following warning:
    
    elo 16 17:51:58 surfacebook kernel: ------------[ cut here ]------------
    elo 16 17:51:58 surfacebook kernel: memcpy: detected field-spanning write (size 243) of single field "ext_scan->tlv_buffer" at drivers/net/wireless/marvell/mwifiex/scan.c:2239 (size 1)
    elo 16 17:51:58 surfacebook kernel: WARNING: CPU: 0 PID: 498 at drivers/net/wireless/marvell/mwifiex/scan.c:2239 mwifiex_cmd_802_11_scan_ext+0x83/0x90 [mwifiex]
    
    Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Closes: https://lore.kernel.org/linux-hardening/ZsZNgfnEwOcPdCly@black.fi.intel.com/
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Brian Norris <briannorris@chromium.org>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://patch.msgid.link/ZsZa5xRcsLq9D+RX@elsanto
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rtw88: 8822c: Fix reported RX band width [+ + +]
Author: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date:   Tue Jul 23 22:31:36 2024 +0300

    wifi: rtw88: 8822c: Fix reported RX band width
    
    commit a71ed5898dfae68262f79277915d1dfe34586bc6 upstream.
    
    "iw dev wlp2s0 station dump" shows incorrect rx bitrate:
    
    tx bitrate:     866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2
    rx bitrate:     86.7 MBit/s VHT-MCS 9 VHT-NSS 1
    
    This is because the RX band width is calculated incorrectly. Fix the
    calculation according to the phydm_rxsc_2_bw() function from the
    official drivers.
    
    After:
    
    tx bitrate:     866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2
    rx bitrate:     390.0 MBit/s VHT-MCS 9 80MHz VHT-NSS 1
    
    It also works correctly with the AP configured for 20 MHz and 40 MHz.
    
    Tested with RTL8822CE.
    
    Cc: stable@vger.kernel.org
    Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver")
    Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/bca8949b-e2bd-4515-98fd-70d3049a0097@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: rtw88: always wait for both firmware loading attempts [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Fri Jul 26 14:46:57 2024 +0300

    wifi: rtw88: always wait for both firmware loading attempts
    
    [ Upstream commit 0e735a4c6137262bcefe45bb52fde7b1f5fc6c4d ]
    
    In 'rtw_wait_firmware_completion()', always wait for both (regular and
    wowlan) firmware loading attempts. Otherwise if 'rtw_usb_intf_init()'
    has failed in 'rtw_usb_probe()', 'rtw_usb_disconnect()' may issue
    'ieee80211_free_hw()' when one of 'rtw_load_firmware_cb()' (usually
    the wowlan one) is still in progress, causing UAF detected by KASAN.
    
    Fixes: c8e5695eae99 ("rtw88: load wowlan firmware if wowlan is supported")
    Reported-by: syzbot+6c6c08700f9480c41fe3@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6c6c08700f9480c41fe3
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/20240726114657.25396-1-dmantipov@yandex.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rtw88: remove CPT execution branch never used [+ + +]
Author: Dmitry Kandybka <d.kandybka@gmail.com>
Date:   Fri Aug 9 11:53:10 2024 +0300

    wifi: rtw88: remove CPT execution branch never used
    
    [ Upstream commit 77c977327dfaa9ae2e154964cdb89ceb5c7b7cf1 ]
    
    In 'rtw_coex_action_bt_a2dp_pan', 'wl_cpt_test' and 'bt_cpt_test' are
    hardcoded to false, so corresponding 'table_case' and 'tdma_case'
    assignments are never met.
    Also 'rtw_coex_set_rf_para(rtwdev, chip->wl_rf_para_rx[1])' is never
    executed. Assuming that CPT was never fully implemented, remove
    lookalike leftovers. Compile tested only.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 76f631cb401f ("rtw88: coex: update the mechanism for A2DP + PAN")
    
    Signed-off-by: Dmitry Kandybka <d.kandybka@gmail.com>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/20240809085310.10512-1-d.kandybka@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rtw88: select WANT_DEV_COREDUMP [+ + +]
Author: Zong-Zhe Yang <kevin_yang@realtek.com>
Date:   Thu Jul 18 15:06:15 2024 +0800

    wifi: rtw88: select WANT_DEV_COREDUMP
    
    [ Upstream commit 7e989b0c1e33210c07340bf5228aa83ea52515b5 ]
    
    We have invoked device coredump when fw crash.
    Should select WANT_DEV_COREDUMP by ourselves.
    
    Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/20240718070616.42217-1-pkshih@realtek.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param [+ + +]
Author: Jiawei Ye <jiawei.ye@foxmail.com>
Date:   Thu Aug 29 08:17:09 2024 +0000

    wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param
    
    [ Upstream commit 6d7c6ae1efb1ff68bc01d79d94fdf0388f86cdd8 ]
    
    In the `wilc_parse_join_bss_param` function, the TSF field of the `ies`
    structure is accessed after the RCU read-side critical section is
    unlocked. According to RCU usage rules, this is illegal. Reusing this
    pointer can lead to unpredictable behavior, including accessing memory
    that has been updated or causing use-after-free issues.
    
    This possible bug was identified using a static analysis tool developed
    by myself, specifically designed to detect RCU-related issues.
    
    To address this, the TSF value is now stored in a local variable
    `ies_tsf` before the RCU lock is released. The `param->tsf_lo` field is
    then assigned using this local variable, ensuring that the TSF value is
    safely accessed.
    
    Fixes: 205c50306acf ("wifi: wilc1000: fix RCU usage in connect path")
    Signed-off-by: Jiawei Ye <jiawei.ye@foxmail.com>
    Reviewed-by: Alexis Lothoré <alexis.lothore@bootlin.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://patch.msgid.link/tencent_466225AA599BA49627FB26F707EE17BC5407@qq.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/entry: Remove unwanted instrumentation in common_interrupt() [+ + +]
Author: Dmitry Vyukov <dvyukov@google.com>
Date:   Tue Jun 11 09:50:30 2024 +0200

    x86/entry: Remove unwanted instrumentation in common_interrupt()
    
    [ Upstream commit 477d81a1c47a1b79b9c08fc92b5dea3c5143800b ]
    
    common_interrupt() and related variants call kvm_set_cpu_l1tf_flush_l1d(),
    which is neither marked noinstr nor __always_inline.
    
    So compiler puts it out of line and adds instrumentation to it.  Since the
    call is inside of instrumentation_begin/end(), objtool does not warn about
    it.
    
    The manifestation is that KCOV produces spurious coverage in
    kvm_set_cpu_l1tf_flush_l1d() in random places because the call happens when
    preempt count is not yet updated to say that the kernel is in an interrupt.
    
    Mark kvm_set_cpu_l1tf_flush_l1d() as __always_inline and move it out of the
    instrumentation_begin/end() section.  It only calls __this_cpu_write()
    which is already safe to call in noinstr contexts.
    
    Fixes: 6368558c3710 ("x86/entry: Provide IDTENTRY_SYSVEC")
    Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Alexander Potapenko <glider@google.com>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/3f9a1de9e415fcb53d07dc9e19fa8481bb021b1b.1718092070.git.dvyukov@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/fpu: Avoid writing LBR bit to IA32_XSS unless supported [+ + +]
Author: Mitchell Levy <levymitchell0@gmail.com>
Date:   Thu Oct 10 16:57:31 2024 -0700

    x86/fpu: Avoid writing LBR bit to IA32_XSS unless supported
    
    There are two distinct CPU features related to the use of XSAVES and LBR:
    whether LBR is itself supported and whether XSAVES supports LBR. The LBR
    subsystem correctly checks both in intel_pmu_arch_lbr_init(), but the
    XSTATE subsystem does not.
    
    The LBR bit is only removed from xfeatures_mask_independent when LBR is not
    supported by the CPU, but there is no validation of XSTATE support.
    If XSAVES does not support LBR the write to IA32_XSS causes a #GP fault,
    leaving the state of IA32_XSS unchanged, i.e. zero. The fault is handled
    with a warning and the boot continues.
    
    Consequently the next XRSTORS which tries to restore supervisor state fails
    with #GP because the RFBM has zero for all supervisor features, which does
    not match the XCOMP_BV field.
    
    As XFEATURE_MASK_FPSTATE includes supervisor features setting up the FPU
    causes a #GP, which ends up in fpu_reset_from_exception_fixup(). That fails
    due to the same problem resulting in recursive #GPs until the kernel runs
    out of stack space and double faults.
    
    Prevent this by storing the supported independent features in
    fpu_kernel_cfg during XSTATE initialization and use that cached value for
    retrieving the independent feature bits to be written into IA32_XSS.
    
    [ tglx: Massaged change log ]
    
    Fixes: f0dccc9da4c0 ("x86/fpu/xstate: Support dynamic supervisor feature for LBR")
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    [ Mitchell Levy: Backport to 5.15, since struct fpu_config is not
      introduced until 578971f4e228 and feature masks are not included in
      said struct until 1c253ff2287f ]
    Signed-off-by: Mitchell Levy <levymitchell0@gmail.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20240812-xsave-lbr-fix-v3-1-95bac1bf62f4@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/hyperv: Set X86_FEATURE_TSC_KNOWN_FREQ when Hyper-V provides frequency [+ + +]
Author: Michael Kelley <mhklinux@outlook.com>
Date:   Wed Jun 5 19:55:59 2024 -0700

    x86/hyperv: Set X86_FEATURE_TSC_KNOWN_FREQ when Hyper-V provides frequency
    
    [ Upstream commit 8fcc514809de41153b43ccbe1a0cdf7f72b78e7e ]
    
    A Linux guest on Hyper-V gets the TSC frequency from a synthetic MSR, if
    available. In this case, set X86_FEATURE_TSC_KNOWN_FREQ so that Linux
    doesn't unnecessarily do refined TSC calibration when setting up the TSC
    clocksource.
    
    With this change, a message such as this is no longer output during boot
    when the TSC is used as the clocksource:
    
    [    1.115141] tsc: Refined TSC clocksource calibration: 2918.408 MHz
    
    Furthermore, the guest and host will have exactly the same view of the
    TSC frequency, which is important for features such as the TSC deadline
    timer that are emulated by the Hyper-V host.
    
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Roman Kisel <romank@linux.microsoft.com>
    Link: https://lore.kernel.org/r/20240606025559.1631-1-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20240606025559.1631-1-mhklinux@outlook.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/idtentry: Incorporate definitions/declarations of the FRED entries [+ + +]
Author: Xin Li <xin3.li@intel.com>
Date:   Tue Dec 5 02:50:11 2023 -0800

    x86/idtentry: Incorporate definitions/declarations of the FRED entries
    
    [ Upstream commit 90f357208200a941e90e75757123326684d715d0 ]
    
    FRED and IDT can share most of the definitions and declarations so
    that in the majority of cases the actual handler implementation is the
    same.
    
    The differences are the exceptions where FRED stores exception related
    information on the stack and the sysvec implementations as FRED can
    handle irqentry/exit() in the dispatcher instead of having it in each
    handler.
    
    Also add stub defines for vectors which are not used due to Kconfig
    decisions to spare the ifdeffery in the actual FRED dispatch code.
    
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Xin Li <xin3.li@intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Tested-by: Shan Kang <shan.kang@intel.com>
    Link: https://lore.kernel.org/r/20231205105030.8698-23-xin3.li@intel.com
    Stable-dep-of: 477d81a1c47a ("x86/entry: Remove unwanted instrumentation in common_interrupt()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/ioapic: Handle allocation failures gracefully [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Fri Aug 2 18:15:34 2024 +0200

    x86/ioapic: Handle allocation failures gracefully
    
    [ Upstream commit 830802a0fea8fb39d3dc9fb7d6b5581e1343eb1f ]
    
    Breno observed panics when using failslab under certain conditions during
    runtime:
    
       can not alloc irq_pin_list (-1,0,20)
       Kernel panic - not syncing: IO-APIC: failed to add irq-pin. Can not proceed
    
       panic+0x4e9/0x590
       mp_irqdomain_alloc+0x9ab/0xa80
       irq_domain_alloc_irqs_locked+0x25d/0x8d0
       __irq_domain_alloc_irqs+0x80/0x110
       mp_map_pin_to_irq+0x645/0x890
       acpi_register_gsi_ioapic+0xe6/0x150
       hpet_open+0x313/0x480
    
    That's a pointless panic which is a leftover of the historic IO/APIC code
    which panic'ed during early boot when the interrupt allocation failed.
    
    The only place which might justify panic is the PIT/HPET timer_check() code
    which tries to figure out whether the timer interrupt is delivered through
    the IO/APIC. But that code does not require to handle interrupt allocation
    failures. If the interrupt cannot be allocated then timer delivery fails
    and it either panics due to that or falls back to legacy mode.
    
    Cure this by removing the panic wrapper around __add_pin_to_irq_node() and
    making mp_irqdomain_alloc() aware of the failure condition and handle it as
    any other failure in this function gracefully.
    
    Reported-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Breno Leitao <leitao@debian.org>
    Tested-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Link: https://lore.kernel.org/all/ZqfJmUF8sXIyuSHN@gmail.com
    Link: https://lore.kernel.org/all/20240802155440.275200843@linutronix.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/mm: Switch to new Intel CPU model defines [+ + +]
Author: Tony Luck <tony.luck@intel.com>
Date:   Wed Apr 24 11:15:18 2024 -0700

    x86/mm: Switch to new Intel CPU model defines
    
    commit 2eda374e883ad297bd9fe575a16c1dc850346075 upstream.
    
    New CPU #defines encode vendor and family as well as model.
    
    [ dhansen: vertically align 0's in invlpg_miss_ids[] ]
    
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/all/20240424181518.41946-1-tony.luck%40intel.com
    [ Ricardo: I used the old match macro X86_MATCH_INTEL_FAM6_MODEL()
      instead of X86_MATCH_VFM() as in the upstream commit.
      I also kept the ALDERLAKE_N name instead of ATOM_GRACEMONT. Both refer
      to the same CPU model. ]
    Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/sgx: Fix deadlock in SGX NUMA node search [+ + +]
Author: Aaron Lu <aaron.lu@intel.com>
Date:   Thu Sep 5 16:08:54 2024 +0800

    x86/sgx: Fix deadlock in SGX NUMA node search
    
    [ Upstream commit 9c936844010466535bd46ea4ce4656ef17653644 ]
    
    When the current node doesn't have an EPC section configured by firmware
    and all other EPC sections are used up, CPU can get stuck inside the
    while loop that looks for an available EPC page from remote nodes
    indefinitely, leading to a soft lockup. Note how nid_of_current will
    never be equal to nid in that while loop because nid_of_current is not
    set in sgx_numa_mask.
    
    Also worth mentioning is that it's perfectly fine for the firmware not
    to setup an EPC section on a node. While setting up an EPC section on
    each node can enhance performance, it is not a requirement for
    functionality.
    
    Rework the loop to start and end on *a* node that has SGX memory. This
    avoids the deadlock looking for the current SGX-lacking node to show up
    in the loop when it never will.
    
    Fixes: 901ddbb9ecf5 ("x86/sgx: Add a basic NUMA allocation scheme to sgx_alloc_epc_page()")
    Reported-by: "Molina Sabido, Gerardo" <gerardo.molina.sabido@intel.com>
    Signed-off-by: Aaron Lu <aaron.lu@intel.com>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Kai Huang <kai.huang@intel.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
    Tested-by: Zhimin Luo <zhimin.luo@intel.com>
    Link: https://lore.kernel.org/all/20240905080855.1699814-2-aaron.lu%40intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/syscall: Avoid memcpy() for ia32 syscall_get_arguments() [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Mon Jul 8 13:22:06 2024 -0700

    x86/syscall: Avoid memcpy() for ia32 syscall_get_arguments()
    
    [ Upstream commit d19d638b1e6cf746263ef60b7d0dee0204d8216a ]
    
    Modern (fortified) memcpy() prefers to avoid writing (or reading) beyond
    the end of the addressed destination (or source) struct member:
    
    In function ‘fortify_memcpy_chk’,
        inlined from ‘syscall_get_arguments’ at ./arch/x86/include/asm/syscall.h:85:2,
        inlined from ‘populate_seccomp_data’ at kernel/seccomp.c:258:2,
        inlined from ‘__seccomp_filter’ at kernel/seccomp.c:1231:3:
    ./include/linux/fortify-string.h:580:25: error: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Werror=attribute-warning]
      580 |                         __read_overflow2_field(q_size_field, size);
          |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    As already done for x86_64 and compat mode, do not use memcpy() to
    extract syscall arguments from struct pt_regs but rather just perform
    direct assignments. Binary output differences are negligible, and actually
    ends up using less stack space:
    
    -       sub    $0x84,%esp
    +       sub    $0x6c,%esp
    
    and less text size:
    
       text    data     bss     dec     hex filename
      10794     252       0   11046    2b26 gcc-32b/kernel/seccomp.o.stock
      10714     252       0   10966    2ad6 gcc-32b/kernel/seccomp.o.after
    
    Closes: https://lore.kernel.org/lkml/9b69fb14-df89-4677-9c82-056ea9e706f5@gmail.com/
    Reported-by: Mirsad Todorovac <mtodorovac69@gmail.com>
    Signed-off-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
    Tested-by: Mirsad Todorovac <mtodorovac69@gmail.com>
    Link: https://lore.kernel.org/all/20240708202202.work.477-kees%40kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xen/swiotlb: add alignment check for dma buffers [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Fri Sep 13 12:05:02 2024 +0200

    xen/swiotlb: add alignment check for dma buffers
    
    [ Upstream commit 9f40ec84a7976d95c34e7cc070939deb103652b0 ]
    
    When checking a memory buffer to be consecutive in machine memory,
    the alignment needs to be checked, too. Failing to do so might result
    in DMA memory not being aligned according to its requested size,
    leading to error messages like:
    
      4xxx 0000:2b:00.0: enabling device (0140 -> 0142)
      4xxx 0000:2b:00.0: Ring address not aligned
      4xxx 0000:2b:00.0: Failed to initialise service qat_crypto
      4xxx 0000:2b:00.0: Resetting device qat_dev0
      4xxx: probe of 0000:2b:00.0 failed with error -14
    
    Fixes: 9435cce87950 ("xen/swiotlb: Add support for 64KB page granularity")
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xen: use correct end address of kernel for conflict checking [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Sat Aug 3 08:01:22 2024 +0200

    xen: use correct end address of kernel for conflict checking
    
    [ Upstream commit fac1bceeeb04886fc2ee952672e6e6c85ce41dca ]
    
    When running as a Xen PV dom0 the kernel is loaded by the hypervisor
    using a different memory map than that of the host. In order to
    minimize the required changes in the kernel, the kernel adapts its
    memory map to that of the host. In order to do that it is checking
    for conflicts of its load address with the host memory map.
    
    Unfortunately the tested memory range does not include the .brk
    area, which might result in crashes or memory corruption when this
    area does conflict with the memory map of the host.
    
    Fix the test by using the _end label instead of __bss_stop.
    
    Fixes: 808fdb71936c ("xen: check for kernel memory conflicting with memory layout")
    
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfrm: Pass flowi_oif or l3mdev as oif to xfrm_dst_lookup [+ + +]
Author: David Ahern <dsahern@kernel.org>
Date:   Fri Apr 1 12:58:37 2022 -0600

    xfrm: Pass flowi_oif or l3mdev as oif to xfrm_dst_lookup
    
    commit 748b82c23e25310fec54e1eff2cb63936f391b24 upstream.
    
    The commit referenced in the Fixes tag no longer changes the
    flow oif to the l3mdev ifindex. A xfrm use case was expecting
    the flowi_oif to be the VRF if relevant and the change broke
    that test. Update xfrm_bundle_create to pass oif if set and any
    potential flowi_l3mdev if oif is not set.
    
    Fixes: 40867d74c374 ("net: Add l3mdev index to flow struct and avoid oif reset for port devices")
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Signed-off-by: David Ahern <dsahern@kernel.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: Add a quirk for writing ERST in high-low order [+ + +]
Author: Daehwan Jung <dh10.jung@samsung.com>
Date:   Mon Jun 10 20:39:12 2024 +0900

    xhci: Add a quirk for writing ERST in high-low order
    
    [ Upstream commit bc162403e33e1d57e40994977acaf19f1434e460 ]
    
    This quirk is for the controller that has a limitation in supporting
    separate ERSTBA_HI and ERSTBA_LO programming. It's supported when
    the ERSTBA is programmed ERSTBA_HI before ERSTBA_LO. That's because
    the internal initialization of event ring fetches the
    "Event Ring Segment Table Entry" based on the indication of ERSTBA_LO
    written.
    
    Signed-off-by: Daehwan Jung <dh10.jung@samsung.com>
    Link: https://lore.kernel.org/r/1718019553-111939-3-git-send-email-dh10.jung@samsung.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: e5fa8db0be3e ("usb: xhci: fix loss of data on Cadence xHC")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: fix event ring segment table related masks and variables in header [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Feb 2 17:04:55 2023 +0200

    xhci: fix event ring segment table related masks and variables in header
    
    [ Upstream commit 8c1cbec9db1ab044167a7594c88bb5906c9d3ee4 ]
    
    xHC controller can supports up to 1024 interrupters.
    To fit these change the max_interrupters varable from u8 to u16.
    
    Add a separate mask for the reserve and preserve bits [5:0] in the erst
    base register and use it instead of the ERST_PRT_MASK.
    ERSR_PTR_MASK [3:0] is intended for masking bits in the
    event ring dequeue pointer register.
    
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20230202150505.618915-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: e5fa8db0be3e ("usb: xhci: fix loss of data on Cadence xHC")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: Preserve RsvdP bits in ERSTBA register correctly [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Fri Sep 15 17:31:08 2023 +0300

    xhci: Preserve RsvdP bits in ERSTBA register correctly
    
    [ Upstream commit cf97c5e0f7dda2edc15ecd96775fe6c355823784 ]
    
    xhci_add_interrupter() erroneously preserves only the lowest 4 bits when
    writing the ERSTBA register, not the lowest 6 bits.  Fix it.
    
    Migrate the ERST_BASE_RSVDP macro to the modern GENMASK_ULL() syntax to
    avoid a u64 cast.
    
    This was previously fixed by commit 8c1cbec9db1a ("xhci: fix event ring
    segment table related masks and variables in header"), but immediately
    undone by commit b17a57f89f69 ("xhci: Refactor interrupter code for
    initial multi interrupter support.").
    
    Fixes: b17a57f89f69 ("xhci: Refactor interrupter code for initial multi interrupter support.")
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org # v6.3+
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20230915143108.1532163-5-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: e5fa8db0be3e ("usb: xhci: fix loss of data on Cadence xHC")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: Refactor interrupter code for initial multi interrupter support. [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Feb 2 17:04:57 2023 +0200

    xhci: Refactor interrupter code for initial multi interrupter support.
    
    [ Upstream commit b17a57f89f69069458d0a9d9b04281ce48da7ebb ]
    
    xHC supports several interrupters, each with its own mmio register set,
    event ring and MSI/MSI-X vector. Transfers can be assigned different
    interrupters when queued. See xhci 4.17 for details.
    Current driver only supports one interrupter.
    
    Create a xhci_interrupter structure containing an event ring, pointer to
    mmio registers for this interrupter, variables to store registers over s3
    suspend, erst, etc. Add functions to create and free an interrupter, and
    pass an interrupter pointer to functions that deal with events.
    
    Secondary interrupters are also useful without having an interrupt vector.
    One use case is the xHCI audio sideband offloading where a DSP can take
    care of specific audio endpoints.
    
    When all transfer events of an offloaded endpoint can be mapped to a
    separate interrupter event ring the DSP can poll this ring, and we can mask
    these events preventing waking up the CPU.
    
    Only minor functional changes such as clearing some of the interrupter
    registers when freeing the interrupter.
    
    Still create only one primary interrupter.
    
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20230202150505.618915-4-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: e5fa8db0be3e ("usb: xhci: fix loss of data on Cadence xHC")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: remove xhci_test_trb_in_td_math early development check [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Feb 2 17:04:56 2023 +0200

    xhci: remove xhci_test_trb_in_td_math early development check
    
    [ Upstream commit 54f9927dfe2266402a226d5f51d38236bdca0590 ]
    
    Time to remove this test trb in td math check that was added
    in early stage of xhci driver development.
    
    It verified that the size, alignment and boundaries of the event and
    command rings allocated by the driver itself are correct.
    
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20230202150505.618915-3-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: e5fa8db0be3e ("usb: xhci: fix loss of data on Cadence xHC")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: Set quirky xHC PCI hosts to D3 _after_ stopping and freeing them. [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Sep 5 17:32:59 2024 +0300

    xhci: Set quirky xHC PCI hosts to D3 _after_ stopping and freeing them.
    
    commit f81dfa3b57c624c56f2bff171c431bc7f5b558f2 upstream.
    
    PCI xHC host should be stopped and xhci driver memory freed before putting
    host to PCI D3 state during PCI remove callback.
    
    Hosts with XHCI_SPURIOUS_WAKEUP quirk did this the wrong way around
    and set the host to D3 before calling usb_hcd_pci_remove(dev), which will
    access the host to stop it, and then free xhci.
    
    Fixes: f1f6d9a8b540 ("xhci: don't dereference a xhci member after removing xhci")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20240905143300.1959279-12-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xz: cleanup CRC32 edits from 2018 [+ + +]
Author: Lasse Collin <lasse.collin@tukaani.org>
Date:   Sun Jul 21 16:36:24 2024 +0300

    xz: cleanup CRC32 edits from 2018
    
    [ Upstream commit 2ee96abef214550d9e92f5143ee3ac1fd1323e67 ]
    
    In 2018, a dependency on <linux/crc32poly.h> was added to avoid
    duplicating the same constant in multiple files.  Two months later it was
    found to be a bad idea and the definition of CRC32_POLY_LE macro was moved
    into xz_private.h to avoid including <linux/crc32poly.h>.
    
    xz_private.h is a wrong place for it too.  Revert back to the upstream
    version which has the poly in xz_crc32_init() in xz_crc32.c.
    
    Link: https://lkml.kernel.org/r/20240721133633.47721-10-lasse.collin@tukaani.org
    Fixes: faa16bc404d7 ("lib: Use existing define with polynomial")
    Fixes: 242cdad873a7 ("lib/xz: Put CRC32_POLY_LE in xz_private.h")
    Signed-off-by: Lasse Collin <lasse.collin@tukaani.org>
    Reviewed-by: Sam James <sam@gentoo.org>
    Tested-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
    Cc: Krzysztof Kozlowski <krzk@kernel.org>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Joel Stanley <joel@jms.id.au>
    Cc: Albert Ou <aou@eecs.berkeley.edu>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Emil Renner Berthing <emil.renner.berthing@canonical.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Jubin Zhong <zhongjubin@huawei.com>
    Cc: Jules Maselbas <jmaselbas@zdiv.net>
    Cc: Palmer Dabbelt <palmer@dabbelt.com>
    Cc: Paul Walmsley <paul.walmsley@sifive.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: Rui Li <me@lirui.org>
    Cc: Simon Glass <sjg@chromium.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>