Linux 6.1.91

 
9p: explicitly deny setlease attempts [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Tue Mar 19 12:34:45 2024 -0400

    9p: explicitly deny setlease attempts
    
    [ Upstream commit 7a84602297d36617dbdadeba55a2567031e5165b ]
    
    9p is a remote network protocol, and it doesn't support asynchronous
    notifications from the server. Ensure that we don't hand out any leases
    since we can't guarantee they'll be broken when a file's contents
    change.
    
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/realtek: Fix mute led of HP Laptop 15-da3001TU [+ + +]
Author: Aman Dhoot <amandhoot12@gmail.com>
Date:   Mon Apr 22 18:08:23 2024 +0530

    ALSA: hda/realtek: Fix mute led of HP Laptop 15-da3001TU
    
    commit 2d5af3ab9e6f1cf1468b2a5221b5c1f7f46c3333 upstream.
    
    This patch simply add SND_PCI_QUIRK for HP Laptop 15-da3001TU to fixed
    mute led of laptop.
    
    Signed-off-by: Aman Dhoot <amandhoot12@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/CAMTp=B+3NG65Z684xMwHqdXDJhY+DJK-kuSw4adn6xwnG+b5JA@mail.gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda: intel-sdw-acpi: fix usage of device_get_named_child_node() [+ + +]
Author: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date:   Fri Apr 26 10:27:31 2024 -0500

    ALSA: hda: intel-sdw-acpi: fix usage of device_get_named_child_node()
    
    [ Upstream commit c158cf914713efc3bcdc25680c7156c48c12ef6a ]
    
    The documentation for device_get_named_child_node() mentions this
    important point:
    
    "
    The caller is responsible for calling fwnode_handle_put() on the
    returned fwnode pointer.
    "
    
    Add fwnode_handle_put() to avoid a leaked reference.
    
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Fixes: 08c2a4bc9f2a ("ALSA: hda: move Intel SoundWire ACPI scan to dedicated module")
    Message-ID: <20240426152731.38420-1-pierre-louis.bossart@linux.intel.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: line6: Zero-initialize message buffers [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Apr 2 08:36:25 2024 +0200

    ALSA: line6: Zero-initialize message buffers
    
    [ Upstream commit c4e51e424e2c772ce1836912a8b0b87cd61bc9d5 ]
    
    For shutting up spurious KMSAN uninit-value warnings, just replace
    kmalloc() calls with kzalloc() for the buffers used for
    communications.  There should be no real issue with the original code,
    but it's still better to cover.
    
    Reported-by: syzbot+7fb05ccf7b3d2f9617b3@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/r/00000000000084b18706150bcca5@google.com
    Message-ID: <20240402063628.26609-1-tiwai@suse.de>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: 9381/1: kasan: clear stale stack poison [+ + +]
Author: Boy.Wu <boy.wu@mediatek.com>
Date:   Mon Apr 15 05:21:55 2024 +0100

    ARM: 9381/1: kasan: clear stale stack poison
    
    [ Upstream commit c4238686f9093b98bd6245a348bcf059cdce23af ]
    
    We found below OOB crash:
    
    [   33.452494] ==================================================================
    [   33.453513] BUG: KASAN: stack-out-of-bounds in refresh_cpu_vm_stats.constprop.0+0xcc/0x2ec
    [   33.454660] Write of size 164 at addr c1d03d30 by task swapper/0/0
    [   33.455515]
    [   33.455767] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G           O       6.1.25-mainline #1
    [   33.456880] Hardware name: Generic DT based system
    [   33.457555]  unwind_backtrace from show_stack+0x18/0x1c
    [   33.458326]  show_stack from dump_stack_lvl+0x40/0x4c
    [   33.459072]  dump_stack_lvl from print_report+0x158/0x4a4
    [   33.459863]  print_report from kasan_report+0x9c/0x148
    [   33.460616]  kasan_report from kasan_check_range+0x94/0x1a0
    [   33.461424]  kasan_check_range from memset+0x20/0x3c
    [   33.462157]  memset from refresh_cpu_vm_stats.constprop.0+0xcc/0x2ec
    [   33.463064]  refresh_cpu_vm_stats.constprop.0 from tick_nohz_idle_stop_tick+0x180/0x53c
    [   33.464181]  tick_nohz_idle_stop_tick from do_idle+0x264/0x354
    [   33.465029]  do_idle from cpu_startup_entry+0x20/0x24
    [   33.465769]  cpu_startup_entry from rest_init+0xf0/0xf4
    [   33.466528]  rest_init from arch_post_acpi_subsys_init+0x0/0x18
    [   33.467397]
    [   33.467644] The buggy address belongs to stack of task swapper/0/0
    [   33.468493]  and is located at offset 112 in frame:
    [   33.469172]  refresh_cpu_vm_stats.constprop.0+0x0/0x2ec
    [   33.469917]
    [   33.470165] This frame has 2 objects:
    [   33.470696]  [32, 76) 'global_zone_diff'
    [   33.470729]  [112, 276) 'global_node_diff'
    [   33.471294]
    [   33.472095] The buggy address belongs to the physical page:
    [   33.472862] page:3cd72da8 refcount:1 mapcount:0 mapping:00000000 index:0x0 pfn:0x41d03
    [   33.473944] flags: 0x1000(reserved|zone=0)
    [   33.474565] raw: 00001000 ed741470 ed741470 00000000 00000000 00000000 ffffffff 00000001
    [   33.475656] raw: 00000000
    [   33.476050] page dumped because: kasan: bad access detected
    [   33.476816]
    [   33.477061] Memory state around the buggy address:
    [   33.477732]  c1d03c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   33.478630]  c1d03c80: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00 00 00 00
    [   33.479526] >c1d03d00: 00 04 f2 f2 f2 f2 00 00 00 00 00 00 f1 f1 f1 f1
    [   33.480415]                                                ^
    [   33.481195]  c1d03d80: 00 00 00 00 00 00 00 00 00 00 04 f3 f3 f3 f3 f3
    [   33.482088]  c1d03e00: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
    [   33.482978] ==================================================================
    
    We find the root cause of this OOB is that arm does not clear stale stack
    poison in the case of cpuidle.
    
    This patch refer to arch/arm64/kernel/sleep.S to resolve this issue.
    
    From cited commit [1] that explain the problem
    
    Functions which the compiler has instrumented for KASAN place poison on
    the stack shadow upon entry and remove this poison prior to returning.
    
    In the case of cpuidle, CPUs exit the kernel a number of levels deep in
    C code.  Any instrumented functions on this critical path will leave
    portions of the stack shadow poisoned.
    
    If CPUs lose context and return to the kernel via a cold path, we
    restore a prior context saved in __cpu_suspend_enter are forgotten, and
    we never remove the poison they placed in the stack shadow area by
    functions calls between this and the actual exit of the kernel.
    
    Thus, (depending on stackframe layout) subsequent calls to instrumented
    functions may hit this stale poison, resulting in (spurious) KASAN
    splats to the console.
    
    To avoid this, clear any stale poison from the idle thread for a CPU
    prior to bringing a CPU online.
    
    From cited commit [2]
    
    Extend to check for CONFIG_KASAN_STACK
    
    [1] commit 0d97e6d8024c ("arm64: kasan: clear stale stack poison")
    [2] commit d56a9ef84bd0 ("kasan, arm64: unpoison stack only with CONFIG_KASAN_STACK")
    
    Signed-off-by: Boy Wu <boy.wu@mediatek.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Fixes: 5615f69bc209 ("ARM: 9016/2: Initialize the mapping of KASan shadow memory")
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: meson: axg-card: make links nonatomic [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Apr 26 17:29:39 2024 +0200

    ASoC: meson: axg-card: make links nonatomic
    
    [ Upstream commit dcba52ace7d4c12e2c8c273eff55ea03a84c8baf ]
    
    Non atomic operations need to be performed in the trigger callback
    of the TDM interfaces. Those are BEs but what matters is the nonatomic
    flag of the FE in the DPCM context. Just set nonatomic for everything so,
    at least, what is done is clear.
    
    Fixes: 7864a79f37b5 ("ASoC: meson: add axg sound card support")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20240426152946.3078805-3-jbrunet@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: meson: axg-fifo: use FIELD helpers [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Tue Feb 27 16:08:25 2024 +0100

    ASoC: meson: axg-fifo: use FIELD helpers
    
    [ Upstream commit 9e6f39535c794adea6ba802a52c722d193c28124 ]
    
    Use FIELD_GET() and FIELD_PREP() helpers instead of doing it manually.
    
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://msgid.link/r/20240227150826.573581-1-jbrunet@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: b11d26660dff ("ASoC: meson: axg-fifo: use threaded irq to check periods")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: meson: axg-fifo: use threaded irq to check periods [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Apr 26 17:29:38 2024 +0200

    ASoC: meson: axg-fifo: use threaded irq to check periods
    
    [ Upstream commit b11d26660dff8d7430892008616452dc8e5fb0f3 ]
    
    With the AXG audio subsystem, there is a possible random channel shift on
    TDM capture, when the slot number per lane is more than 2, and there is
    more than one lane used.
    
    The problem has been there since the introduction of the axg audio support
    but such scenario is pretty uncommon. This is why there is no loud
    complains about the problem.
    
    Solving the problem require to make the links non-atomic and use the
    trigger() callback to start FEs and BEs in the appropriate order.
    
    This was tried in the past and reverted because it caused the block irq to
    sleep while atomic. However, instead of reverting, the solution is to call
    snd_pcm_period_elapsed() in a non atomic context.
    
    Use the bottom half of a threaded IRQ to do so.
    
    Fixes: 6dc4fa179fb8 ("ASoC: meson: add axg fifo base driver")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20240426152946.3078805-2-jbrunet@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: meson: axg-tdm-interface: manage formatters in trigger [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Apr 26 17:29:40 2024 +0200

    ASoC: meson: axg-tdm-interface: manage formatters in trigger
    
    [ Upstream commit f949ed458ad15a00d41b37c745ebadaef171aaae ]
    
    So far, the formatters have been reset/enabled using the .prepare()
    callback. This was done in this callback because walking the formatters use
    a mutex. A mutex is used because formatter handling require dealing
    possibly slow clock operation.
    
    With the support of non-atomic, .trigger() callback may be used which also
    allows to properly enable and disable formatters on start but also
    pause/resume.
    
    This solve a random shift on TDMIN as well repeated samples on for TDMOUT.
    
    Fixes: d60e4f1e4be5 ("ASoC: meson: add tdm interface driver")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20240426152946.3078805-4-jbrunet@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: meson: cards: select SND_DYNAMIC_MINORS [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Apr 26 15:41:47 2024 +0200

    ASoC: meson: cards: select SND_DYNAMIC_MINORS
    
    [ Upstream commit 6db26f9ea4edd8a17d39ab3c20111e3ccd704aef ]
    
    Amlogic sound cards do create a lot of pcm interfaces, possibly more than
    8. Some pcm interfaces are internal (like DPCM backends and c2c) and not
    exposed to userspace.
    
    Those interfaces still increase the number passed to snd_find_free_minor(),
    which eventually exceeds 8 causing -EBUSY error on card registration if
    CONFIG_SND_DYNAMIC_MINORS=n and the interface is exposed to userspace.
    
    select CONFIG_SND_DYNAMIC_MINORS for Amlogic cards to avoid the problem.
    
    Fixes: 7864a79f37b5 ("ASoC: meson: add axg sound card support")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Link: https://lore.kernel.org/r/20240426134150.3053741-1-jbrunet@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tegra: Fix DSPK 16-bit playback [+ + +]
Author: Sameer Pujar <spujar@nvidia.com>
Date:   Fri Apr 5 10:43:06 2024 +0000

    ASoC: tegra: Fix DSPK 16-bit playback
    
    commit 2e93a29b48a017c777d4fcbfcc51aba4e6a90d38 upstream.
    
    DSPK configuration is wrong for 16-bit playback and this happens because
    the client config is always fixed at 24-bit in hw_params(). Fix this by
    updating the client config to 16-bit for the respective playback.
    
    Fixes: 327ef6470266 ("ASoC: tegra: Add Tegra186 based DSPK driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sameer Pujar <spujar@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://msgid.link/r/20240405104306.551036-1-spujar@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: ti: davinci-mcasp: Fix race condition during probe [+ + +]
Author: Joao Paulo Goncalves <joao.goncalves@toradex.com>
Date:   Wed Apr 17 15:41:38 2024 -0300

    ASoC: ti: davinci-mcasp: Fix race condition during probe
    
    commit d18ca8635db2f88c17acbdf6412f26d4f6aff414 upstream.
    
    When using davinci-mcasp as CPU DAI with simple-card, there are some
    conditions that cause simple-card to finish registering a sound card before
    davinci-mcasp finishes registering all sound components. This creates a
    non-working sound card from userspace with no problem indication apart
    from not being able to play/record audio on a PCM stream. The issue
    arises during simultaneous probe execution of both drivers. Specifically,
    the simple-card driver, awaiting a CPU DAI, proceeds as soon as
    davinci-mcasp registers its DAI. However, this process can lead to the
    client mutex lock (client_mutex in soc-core.c) being held or davinci-mcasp
    being preempted before PCM DMA registration on davinci-mcasp finishes.
    This situation occurs when the probes of both drivers run concurrently.
    Below is the code path for this condition. To solve the issue, defer
    davinci-mcasp CPU DAI registration to the last step in the audio part of
    it. This way, simple-card CPU DAI parsing will be deferred until all
    audio components are registered.
    
    Fail Code Path:
    
    simple-card.c: probe starts
    simple-card.c: simple_dai_link_of: simple_parse_node(..,cpu,..) returns EPROBE_DEFER, no CPU DAI yet
    davinci-mcasp.c: probe starts
    davinci-mcasp.c: devm_snd_soc_register_component() register CPU DAI
    simple-card.c: probes again, finish CPU DAI parsing and call devm_snd_soc_register_card()
    simple-card.c: finish probe
    davinci-mcasp.c: *dma_pcm_platform_register() register PCM  DMA
    davinci-mcasp.c: probe finish
    
    Cc: stable@vger.kernel.org
    Fixes: 9fbd58cf4ab0 ("ASoC: davinci-mcasp: Choose PCM driver based on configured DMA controller")
    Signed-off-by: Joao Paulo Goncalves <joao.goncalves@toradex.com>
    Acked-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
    Reviewed-by: Jai Luthra <j-luthra@ti.com>
    Link: https://lore.kernel.org/r/20240417184138.1104774-1-jpaulo.silvagoncalves@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ata: sata_gemini: Check clk_enable() result [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Wed Apr 3 04:33:49 2024 +0000

    ata: sata_gemini: Check clk_enable() result
    
    [ Upstream commit e85006ae7430aef780cc4f0849692e266a102ec0 ]
    
    The call to clk_enable() in gemini_sata_start_bridge() can fail.
    Add a check to detect such failure.
    
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
blk-iocost: avoid out of bounds shift [+ + +]
Author: Rik van Riel <riel@surriel.com>
Date:   Thu Apr 4 12:32:53 2024 -0400

    blk-iocost: avoid out of bounds shift
    
    [ Upstream commit beaa51b36012fad5a4d3c18b88a617aea7a9b96d ]
    
    UBSAN catches undefined behavior in blk-iocost, where sometimes
    iocg->delay is shifted right by a number that is too large,
    resulting in undefined behavior on some architectures.
    
    [  186.556576] ------------[ cut here ]------------
    UBSAN: shift-out-of-bounds in block/blk-iocost.c:1366:23
    shift exponent 64 is too large for 64-bit type 'u64' (aka 'unsigned long long')
    CPU: 16 PID: 0 Comm: swapper/16 Tainted: G S          E    N 6.9.0-0_fbk700_debug_rc2_kbuilder_0_gc85af715cac0 #1
    Hardware name: Quanta Twin Lakes MP/Twin Lakes Passive MP, BIOS F09_3A23 12/08/2020
    Call Trace:
     <IRQ>
     dump_stack_lvl+0x8f/0xe0
     __ubsan_handle_shift_out_of_bounds+0x22c/0x280
     iocg_kick_delay+0x30b/0x310
     ioc_timer_fn+0x2fb/0x1f80
     __run_timer_base+0x1b6/0x250
    ...
    
    Avoid that undefined behavior by simply taking the
    "delay = 0" branch if the shift is too large.
    
    I am not sure what the symptoms of an undefined value
    delay will be, but I suspect it could be more than a
    little annoying to debug.
    
    Signed-off-by: Rik van Riel <riel@surriel.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Josef Bacik <josef@toxicpanda.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Acked-by: Tejun Heo <tj@kernel.org>
    Link: https://lore.kernel.org/r/20240404123253.0f58010f@imladris.surriel.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
block: fix overflow in blk_ioctl_discard() [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Fri Mar 29 09:23:19 2024 +0800

    block: fix overflow in blk_ioctl_discard()
    
    [ Upstream commit 22d24a544b0d49bbcbd61c8c0eaf77d3c9297155 ]
    
    There is no check for overflow of 'start + len' in blk_ioctl_discard().
    Hung task occurs if submit an discard ioctl with the following param:
      start = 0x80000000000ff000, len = 0x8000000000fff000;
    Add the overflow validation now.
    
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20240329012319.2034550-1-linan666@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: Fix use-after-free bugs caused by sco_sock_timeout [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Thu Apr 25 22:23:45 2024 +0800

    Bluetooth: Fix use-after-free bugs caused by sco_sock_timeout
    
    [ Upstream commit 483bc08181827fc475643272ffb69c533007e546 ]
    
    When the sco connection is established and then, the sco socket
    is releasing, timeout_work will be scheduled to judge whether
    the sco disconnection is timeout. The sock will be deallocated
    later, but it is dereferenced again in sco_sock_timeout. As a
    result, the use-after-free bugs will happen. The root cause is
    shown below:
    
        Cleanup Thread               |      Worker Thread
    sco_sock_release                 |
      sco_sock_close                 |
        __sco_sock_close             |
          sco_sock_set_timer         |
            schedule_delayed_work    |
      sco_sock_kill                  |    (wait a time)
        sock_put(sk) //FREE          |  sco_sock_timeout
                                     |    sock_hold(sk) //USE
    
    The KASAN report triggered by POC is shown below:
    
    [   95.890016] ==================================================================
    [   95.890496] BUG: KASAN: slab-use-after-free in sco_sock_timeout+0x5e/0x1c0
    [   95.890755] Write of size 4 at addr ffff88800c388080 by task kworker/0:0/7
    ...
    [   95.890755] Workqueue: events sco_sock_timeout
    [   95.890755] Call Trace:
    [   95.890755]  <TASK>
    [   95.890755]  dump_stack_lvl+0x45/0x110
    [   95.890755]  print_address_description+0x78/0x390
    [   95.890755]  print_report+0x11b/0x250
    [   95.890755]  ? __virt_addr_valid+0xbe/0xf0
    [   95.890755]  ? sco_sock_timeout+0x5e/0x1c0
    [   95.890755]  kasan_report+0x139/0x170
    [   95.890755]  ? update_load_avg+0xe5/0x9f0
    [   95.890755]  ? sco_sock_timeout+0x5e/0x1c0
    [   95.890755]  kasan_check_range+0x2c3/0x2e0
    [   95.890755]  sco_sock_timeout+0x5e/0x1c0
    [   95.890755]  process_one_work+0x561/0xc50
    [   95.890755]  worker_thread+0xab2/0x13c0
    [   95.890755]  ? pr_cont_work+0x490/0x490
    [   95.890755]  kthread+0x279/0x300
    [   95.890755]  ? pr_cont_work+0x490/0x490
    [   95.890755]  ? kthread_blkcg+0xa0/0xa0
    [   95.890755]  ret_from_fork+0x34/0x60
    [   95.890755]  ? kthread_blkcg+0xa0/0xa0
    [   95.890755]  ret_from_fork_asm+0x11/0x20
    [   95.890755]  </TASK>
    [   95.890755]
    [   95.890755] Allocated by task 506:
    [   95.890755]  kasan_save_track+0x3f/0x70
    [   95.890755]  __kasan_kmalloc+0x86/0x90
    [   95.890755]  __kmalloc+0x17f/0x360
    [   95.890755]  sk_prot_alloc+0xe1/0x1a0
    [   95.890755]  sk_alloc+0x31/0x4e0
    [   95.890755]  bt_sock_alloc+0x2b/0x2a0
    [   95.890755]  sco_sock_create+0xad/0x320
    [   95.890755]  bt_sock_create+0x145/0x320
    [   95.890755]  __sock_create+0x2e1/0x650
    [   95.890755]  __sys_socket+0xd0/0x280
    [   95.890755]  __x64_sys_socket+0x75/0x80
    [   95.890755]  do_syscall_64+0xc4/0x1b0
    [   95.890755]  entry_SYSCALL_64_after_hwframe+0x67/0x6f
    [   95.890755]
    [   95.890755] Freed by task 506:
    [   95.890755]  kasan_save_track+0x3f/0x70
    [   95.890755]  kasan_save_free_info+0x40/0x50
    [   95.890755]  poison_slab_object+0x118/0x180
    [   95.890755]  __kasan_slab_free+0x12/0x30
    [   95.890755]  kfree+0xb2/0x240
    [   95.890755]  __sk_destruct+0x317/0x410
    [   95.890755]  sco_sock_release+0x232/0x280
    [   95.890755]  sock_close+0xb2/0x210
    [   95.890755]  __fput+0x37f/0x770
    [   95.890755]  task_work_run+0x1ae/0x210
    [   95.890755]  get_signal+0xe17/0xf70
    [   95.890755]  arch_do_signal_or_restart+0x3f/0x520
    [   95.890755]  syscall_exit_to_user_mode+0x55/0x120
    [   95.890755]  do_syscall_64+0xd1/0x1b0
    [   95.890755]  entry_SYSCALL_64_after_hwframe+0x67/0x6f
    [   95.890755]
    [   95.890755] The buggy address belongs to the object at ffff88800c388000
    [   95.890755]  which belongs to the cache kmalloc-1k of size 1024
    [   95.890755] The buggy address is located 128 bytes inside of
    [   95.890755]  freed 1024-byte region [ffff88800c388000, ffff88800c388400)
    [   95.890755]
    [   95.890755] The buggy address belongs to the physical page:
    [   95.890755] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88800c38a800 pfn:0xc388
    [   95.890755] head: order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    [   95.890755] anon flags: 0x100000000000840(slab|head|node=0|zone=1)
    [   95.890755] page_type: 0xffffffff()
    [   95.890755] raw: 0100000000000840 ffff888006842dc0 0000000000000000 0000000000000001
    [   95.890755] raw: ffff88800c38a800 000000000010000a 00000001ffffffff 0000000000000000
    [   95.890755] head: 0100000000000840 ffff888006842dc0 0000000000000000 0000000000000001
    [   95.890755] head: ffff88800c38a800 000000000010000a 00000001ffffffff 0000000000000000
    [   95.890755] head: 0100000000000003 ffffea000030e201 ffffea000030e248 00000000ffffffff
    [   95.890755] head: 0000000800000000 0000000000000000 00000000ffffffff 0000000000000000
    [   95.890755] page dumped because: kasan: bad access detected
    [   95.890755]
    [   95.890755] Memory state around the buggy address:
    [   95.890755]  ffff88800c387f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [   95.890755]  ffff88800c388000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [   95.890755] >ffff88800c388080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [   95.890755]                    ^
    [   95.890755]  ffff88800c388100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [   95.890755]  ffff88800c388180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [   95.890755] ==================================================================
    
    Fix this problem by adding a check protected by sco_conn_lock to judget
    whether the conn->hcon is null. Because the conn->hcon will be set to null,
    when the sock is releasing.
    
    Fixes: ba316be1b6a0 ("Bluetooth: schedule SCO timeouts with delayed_work")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: l2cap: fix null-ptr-deref in l2cap_chan_timeout [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Thu May 2 20:57:36 2024 +0800

    Bluetooth: l2cap: fix null-ptr-deref in l2cap_chan_timeout
    
    [ Upstream commit adf0398cee86643b8eacde95f17d073d022f782c ]
    
    There is a race condition between l2cap_chan_timeout() and
    l2cap_chan_del(). When we use l2cap_chan_del() to delete the
    channel, the chan->conn will be set to null. But the conn could
    be dereferenced again in the mutex_lock() of l2cap_chan_timeout().
    As a result the null pointer dereference bug will happen. The
    KASAN report triggered by POC is shown below:
    
    [  472.074580] ==================================================================
    [  472.075284] BUG: KASAN: null-ptr-deref in mutex_lock+0x68/0xc0
    [  472.075308] Write of size 8 at addr 0000000000000158 by task kworker/0:0/7
    [  472.075308]
    [  472.075308] CPU: 0 PID: 7 Comm: kworker/0:0 Not tainted 6.9.0-rc5-00356-g78c0094a146b #36
    [  472.075308] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu4
    [  472.075308] Workqueue: events l2cap_chan_timeout
    [  472.075308] Call Trace:
    [  472.075308]  <TASK>
    [  472.075308]  dump_stack_lvl+0x137/0x1a0
    [  472.075308]  print_report+0x101/0x250
    [  472.075308]  ? __virt_addr_valid+0x77/0x160
    [  472.075308]  ? mutex_lock+0x68/0xc0
    [  472.075308]  kasan_report+0x139/0x170
    [  472.075308]  ? mutex_lock+0x68/0xc0
    [  472.075308]  kasan_check_range+0x2c3/0x2e0
    [  472.075308]  mutex_lock+0x68/0xc0
    [  472.075308]  l2cap_chan_timeout+0x181/0x300
    [  472.075308]  process_one_work+0x5d2/0xe00
    [  472.075308]  worker_thread+0xe1d/0x1660
    [  472.075308]  ? pr_cont_work+0x5e0/0x5e0
    [  472.075308]  kthread+0x2b7/0x350
    [  472.075308]  ? pr_cont_work+0x5e0/0x5e0
    [  472.075308]  ? kthread_blkcg+0xd0/0xd0
    [  472.075308]  ret_from_fork+0x4d/0x80
    [  472.075308]  ? kthread_blkcg+0xd0/0xd0
    [  472.075308]  ret_from_fork_asm+0x11/0x20
    [  472.075308]  </TASK>
    [  472.075308] ==================================================================
    [  472.094860] Disabling lock debugging due to kernel taint
    [  472.096136] BUG: kernel NULL pointer dereference, address: 0000000000000158
    [  472.096136] #PF: supervisor write access in kernel mode
    [  472.096136] #PF: error_code(0x0002) - not-present page
    [  472.096136] PGD 0 P4D 0
    [  472.096136] Oops: 0002 [#1] PREEMPT SMP KASAN NOPTI
    [  472.096136] CPU: 0 PID: 7 Comm: kworker/0:0 Tainted: G    B              6.9.0-rc5-00356-g78c0094a146b #36
    [  472.096136] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu4
    [  472.096136] Workqueue: events l2cap_chan_timeout
    [  472.096136] RIP: 0010:mutex_lock+0x88/0xc0
    [  472.096136] Code: be 08 00 00 00 e8 f8 23 1f fd 4c 89 f7 be 08 00 00 00 e8 eb 23 1f fd 42 80 3c 23 00 74 08 48 88
    [  472.096136] RSP: 0018:ffff88800744fc78 EFLAGS: 00000246
    [  472.096136] RAX: 0000000000000000 RBX: 1ffff11000e89f8f RCX: ffffffff8457c865
    [  472.096136] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffff88800744fc78
    [  472.096136] RBP: 0000000000000158 R08: ffff88800744fc7f R09: 1ffff11000e89f8f
    [  472.096136] R10: dffffc0000000000 R11: ffffed1000e89f90 R12: dffffc0000000000
    [  472.096136] R13: 0000000000000158 R14: ffff88800744fc78 R15: ffff888007405a00
    [  472.096136] FS:  0000000000000000(0000) GS:ffff88806d200000(0000) knlGS:0000000000000000
    [  472.096136] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  472.096136] CR2: 0000000000000158 CR3: 000000000da32000 CR4: 00000000000006f0
    [  472.096136] Call Trace:
    [  472.096136]  <TASK>
    [  472.096136]  ? __die_body+0x8d/0xe0
    [  472.096136]  ? page_fault_oops+0x6b8/0x9a0
    [  472.096136]  ? kernelmode_fixup_or_oops+0x20c/0x2a0
    [  472.096136]  ? do_user_addr_fault+0x1027/0x1340
    [  472.096136]  ? _printk+0x7a/0xa0
    [  472.096136]  ? mutex_lock+0x68/0xc0
    [  472.096136]  ? add_taint+0x42/0xd0
    [  472.096136]  ? exc_page_fault+0x6a/0x1b0
    [  472.096136]  ? asm_exc_page_fault+0x26/0x30
    [  472.096136]  ? mutex_lock+0x75/0xc0
    [  472.096136]  ? mutex_lock+0x88/0xc0
    [  472.096136]  ? mutex_lock+0x75/0xc0
    [  472.096136]  l2cap_chan_timeout+0x181/0x300
    [  472.096136]  process_one_work+0x5d2/0xe00
    [  472.096136]  worker_thread+0xe1d/0x1660
    [  472.096136]  ? pr_cont_work+0x5e0/0x5e0
    [  472.096136]  kthread+0x2b7/0x350
    [  472.096136]  ? pr_cont_work+0x5e0/0x5e0
    [  472.096136]  ? kthread_blkcg+0xd0/0xd0
    [  472.096136]  ret_from_fork+0x4d/0x80
    [  472.096136]  ? kthread_blkcg+0xd0/0xd0
    [  472.096136]  ret_from_fork_asm+0x11/0x20
    [  472.096136]  </TASK>
    [  472.096136] Modules linked in:
    [  472.096136] CR2: 0000000000000158
    [  472.096136] ---[ end trace 0000000000000000 ]---
    [  472.096136] RIP: 0010:mutex_lock+0x88/0xc0
    [  472.096136] Code: be 08 00 00 00 e8 f8 23 1f fd 4c 89 f7 be 08 00 00 00 e8 eb 23 1f fd 42 80 3c 23 00 74 08 48 88
    [  472.096136] RSP: 0018:ffff88800744fc78 EFLAGS: 00000246
    [  472.096136] RAX: 0000000000000000 RBX: 1ffff11000e89f8f RCX: ffffffff8457c865
    [  472.096136] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffff88800744fc78
    [  472.096136] RBP: 0000000000000158 R08: ffff88800744fc7f R09: 1ffff11000e89f8f
    [  472.132932] R10: dffffc0000000000 R11: ffffed1000e89f90 R12: dffffc0000000000
    [  472.132932] R13: 0000000000000158 R14: ffff88800744fc78 R15: ffff888007405a00
    [  472.132932] FS:  0000000000000000(0000) GS:ffff88806d200000(0000) knlGS:0000000000000000
    [  472.132932] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  472.132932] CR2: 0000000000000158 CR3: 000000000da32000 CR4: 00000000000006f0
    [  472.132932] Kernel panic - not syncing: Fatal exception
    [  472.132932] Kernel Offset: disabled
    [  472.132932] ---[ end Kernel panic - not syncing: Fatal exception ]---
    
    Add a check to judge whether the conn is null in l2cap_chan_timeout()
    in order to mitigate the bug.
    
    Fixes: 3df91ea20e74 ("Bluetooth: Revert to mutexes from RCU list")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: msft: fix slab-use-after-free in msft_do_close() [+ + +]
Author: Sungwoo Kim <iam@sung-woo.kim>
Date:   Tue Apr 30 12:20:51 2024 -0400

    Bluetooth: msft: fix slab-use-after-free in msft_do_close()
    
    [ Upstream commit 10f9f426ac6e752c8d87bf4346930ba347aaabac ]
    
    Tying the msft->data lifetime to hdev by freeing it in
    hci_release_dev() to fix the following case:
    
    [use]
    msft_do_close()
      msft = hdev->msft_data;
      if (!msft)                      ...(1) <- passed.
        return;
      mutex_lock(&msft->filter_lock); ...(4) <- used after freed.
    
    [free]
    msft_unregister()
      msft = hdev->msft_data;
      hdev->msft_data = NULL;         ...(2)
      kfree(msft);                    ...(3) <- msft is freed.
    
    ==================================================================
    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+0x8f/0xc30
    kernel/locking/mutex.c:752
    Read of size 8 at addr ffff888106cbbca8 by task kworker/u5:2/309
    
    Fixes: bf6a4e30ffbd ("Bluetooth: disable advertisement filters during suspend")
    Signed-off-by: Sungwoo Kim <iam@sung-woo.kim>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: qca: add missing firmware sanity checks [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Tue Apr 30 19:07:39 2024 +0200

    Bluetooth: qca: add missing firmware sanity checks
    
    commit 2e4edfa1e2bd821a317e7d006517dcf2f3fac68d upstream.
    
    Add the missing sanity checks when parsing the firmware files before
    downloading them to avoid accessing and corrupting memory beyond the
    vmalloced buffer.
    
    Fixes: 83e81961ff7e ("Bluetooth: btqca: Introduce generic QCA ROME support")
    Cc: stable@vger.kernel.org      # 4.10
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: qca: add support for QCA2066 [+ + +]
Author: Tim Jiang <quic_tjiang@quicinc.com>
Date:   Tue Sep 12 17:39:57 2023 +0800

    Bluetooth: qca: add support for QCA2066
    
    [ Upstream commit a7f8dedb4be2cc930a29af24427b885405ecd15d ]
    
    This patch adds support for QCA2066 firmware patch and NVM downloading.
    as the RF performance of QCA2066 SOC chip from different foundries may
    vary. Therefore we use different NVM to configure them based on board ID.
    
    Changes in v2
     - optimize the function qca_generate_hsp_nvm_name
     - remove redundant debug code for function qca_read_fw_board_id
    
    Signed-off-by: Tim Jiang <quic_tjiang@quicinc.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: 32868e126c78 ("Bluetooth: qca: fix invalid device address check")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: qca: fix firmware check error path [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Wed May 1 08:37:40 2024 +0200

    Bluetooth: qca: fix firmware check error path
    
    commit 40d442f969fb1e871da6fca73d3f8aef1f888558 upstream.
    
    A recent commit fixed the code that parses the firmware files before
    downloading them to the controller but introduced a memory leak in case
    the sanity checks ever fail.
    
    Make sure to free the firmware buffer before returning on errors.
    
    Fixes: f905ae0be4b7 ("Bluetooth: qca: add missing firmware sanity checks")
    Cc: stable@vger.kernel.org      # 4.19
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: qca: fix info leak when fetching board id [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Wed May 1 14:34:53 2024 +0200

    Bluetooth: qca: fix info leak when fetching board id
    
    commit 0adcf6be1445ed50bfd4a451a7a782568f270197 upstream.
    
    Add the missing sanity check when fetching the board id to avoid leaking
    slab data when later requesting the firmware.
    
    Fixes: a7f8dedb4be2 ("Bluetooth: qca: add support for QCA2066")
    Cc: stable@vger.kernel.org      # 6.7
    Cc: Tim Jiang <quic_tjiang@quicinc.com>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: qca: fix info leak when fetching fw build id [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Wed May 1 14:34:52 2024 +0200

    Bluetooth: qca: fix info leak when fetching fw build id
    
    commit cda0d6a198e2a7ec6f176c36173a57bdd8af7af2 upstream.
    
    Add the missing sanity checks and move the 255-byte build-id buffer off
    the stack to avoid leaking stack data through debugfs in case the
    build-info reply is malformed.
    
    Fixes: c0187b0bd3e9 ("Bluetooth: btqca: Add support to read FW build version for WCN3991 BTSoC")
    Cc: stable@vger.kernel.org      # 5.12
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: qca: fix NVM configuration parsing [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Tue Apr 30 19:07:40 2024 +0200

    Bluetooth: qca: fix NVM configuration parsing
    
    commit a112d3c72a227f2edbb6d8094472cc6e503e52af upstream.
    
    The NVM configuration files used by WCN3988 and WCN3990/1/8 have two
    sets of configuration tags that are enclosed by a type-length header of
    type four which the current parser fails to account for.
    
    Instead the driver happily parses random data as if it were valid tags,
    something which can lead to the configuration data being corrupted if it
    ever encounters the words 0x0011 or 0x001b.
    
    As is clear from commit b63882549b2b ("Bluetooth: btqca: Fix the NVM
    baudrate tag offcet for wcn3991") the intention has always been to
    process the configuration data also for WCN3991 and WCN3998 which
    encodes the baud rate at a different offset.
    
    Fix the parser so that it can handle the WCN3xxx configuration files,
    which has an enclosing type-length header of type four and two sets of
    TLV tags enclosed by a type-length header of type two and three,
    respectively.
    
    Note that only the first set, which contains the tags the driver is
    currently looking for, will be parsed for now.
    
    With the parser fixed, the software in-band sleep bit will now be set
    for WCN3991 and WCN3998 (as it is for later controllers) and the default
    baud rate 3200000 may be updated by the driver also for WCN3xxx
    controllers.
    
    Notably the deep-sleep feature bit is already set by default in all
    configuration files in linux-firmware.
    
    Fixes: 4219d4686875 ("Bluetooth: btqca: Add wcn3990 firmware download support.")
    Cc: stable@vger.kernel.org      # 4.19
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bna: ensure the copied buf is NUL terminated [+ + +]
Author: Bui Quang Minh <minhquangbui99@gmail.com>
Date:   Wed Apr 24 21:44:19 2024 +0700

    bna: ensure the copied buf is NUL terminated
    
    [ Upstream commit 8c34096c7fdf272fd4c0c37fe411cd2e3ed0ee9f ]
    
    Currently, we allocate a nbytes-sized kernel buffer and copy nbytes from
    userspace to that buffer. Later, we use sscanf on this buffer but we don't
    ensure that the string is terminated inside the buffer, this can lead to
    OOB read when using sscanf. Fix this issue by using memdup_user_nul
    instead of memdup_user.
    
    Fixes: 7afc5dbde091 ("bna: Add debugfs interface.")
    Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
    Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-2-f1f1b53a10f4@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, arm64: Fix incorrect runtime stats [+ + +]
Author: Xu Kuohai <xukuohai@huawei.com>
Date:   Tue Apr 16 14:42:07 2024 +0800

    bpf, arm64: Fix incorrect runtime stats
    
    [ Upstream commit dc7d7447b56bcc9cf79a9c22e4edad200a298e4c ]
    
    When __bpf_prog_enter() returns zero, the arm64 register x20 that stores
    prog start time is not assigned to zero, causing incorrect runtime stats.
    
    To fix it, assign the return value of bpf_prog_enter() to x20 register
    immediately upon its return.
    
    Fixes: efc9909fdce0 ("bpf, arm64: Add bpf trampoline for arm64")
    Reported-by: Ivan Babrou <ivan@cloudflare.com>
    Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Tested-by: Ivan Babrou <ivan@cloudflare.com>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20240416064208.2919073-2-xukuohai@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, kconfig: Fix DEBUG_INFO_BTF_MODULES Kconfig definition [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu Apr 4 15:03:44 2024 -0700

    bpf, kconfig: Fix DEBUG_INFO_BTF_MODULES Kconfig definition
    
    [ Upstream commit 229087f6f1dc2d0c38feba805770f28529980ec0 ]
    
    Turns out that due to CONFIG_DEBUG_INFO_BTF_MODULES not having an
    explicitly specified "menu item name" in Kconfig, it's basically
    impossible to turn it off (see [0]).
    
    This patch fixes the issue by defining menu name for
    CONFIG_DEBUG_INFO_BTF_MODULES, which makes it actually adjustable
    and independent of CONFIG_DEBUG_INFO_BTF, in the sense that one can
    have DEBUG_INFO_BTF=y and DEBUG_INFO_BTF_MODULES=n.
    
    We still keep it as defaulting to Y, of course.
    
    Fixes: 5f9ae91f7c0d ("kbuild: Build kernel module BTFs if BTF is enabled and pahole supports it")
    Reported-by: Vincent Li <vincent.mc.li@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/CAK3+h2xiFfzQ9UXf56nrRRP=p1+iUxGoEP5B+aq9MDT5jLXDSg@mail.gmail.com [0]
    Link: https://lore.kernel.org/bpf/20240404220344.3879270-1-andrii@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, skmsg: Fix NULL pointer dereference in sk_psock_skb_ingress_enqueue [+ + +]
Author: Jason Xing <kernelxing@tencent.com>
Date:   Thu Apr 4 10:10:01 2024 +0800

    bpf, skmsg: Fix NULL pointer dereference in sk_psock_skb_ingress_enqueue
    
    [ Upstream commit 6648e613226e18897231ab5e42ffc29e63fa3365 ]
    
    Fix NULL pointer data-races in sk_psock_skb_ingress_enqueue() which
    syzbot reported [1].
    
    [1]
    BUG: KCSAN: data-race in sk_psock_drop / sk_psock_skb_ingress_enqueue
    
    write to 0xffff88814b3278b8 of 8 bytes by task 10724 on cpu 1:
     sk_psock_stop_verdict net/core/skmsg.c:1257 [inline]
     sk_psock_drop+0x13e/0x1f0 net/core/skmsg.c:843
     sk_psock_put include/linux/skmsg.h:459 [inline]
     sock_map_close+0x1a7/0x260 net/core/sock_map.c:1648
     unix_release+0x4b/0x80 net/unix/af_unix.c:1048
     __sock_release net/socket.c:659 [inline]
     sock_close+0x68/0x150 net/socket.c:1421
     __fput+0x2c1/0x660 fs/file_table.c:422
     __fput_sync+0x44/0x60 fs/file_table.c:507
     __do_sys_close fs/open.c:1556 [inline]
     __se_sys_close+0x101/0x1b0 fs/open.c:1541
     __x64_sys_close+0x1f/0x30 fs/open.c:1541
     do_syscall_64+0xd3/0x1d0
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    read to 0xffff88814b3278b8 of 8 bytes by task 10713 on cpu 0:
     sk_psock_data_ready include/linux/skmsg.h:464 [inline]
     sk_psock_skb_ingress_enqueue+0x32d/0x390 net/core/skmsg.c:555
     sk_psock_skb_ingress_self+0x185/0x1e0 net/core/skmsg.c:606
     sk_psock_verdict_apply net/core/skmsg.c:1008 [inline]
     sk_psock_verdict_recv+0x3e4/0x4a0 net/core/skmsg.c:1202
     unix_read_skb net/unix/af_unix.c:2546 [inline]
     unix_stream_read_skb+0x9e/0xf0 net/unix/af_unix.c:2682
     sk_psock_verdict_data_ready+0x77/0x220 net/core/skmsg.c:1223
     unix_stream_sendmsg+0x527/0x860 net/unix/af_unix.c:2339
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg+0x140/0x180 net/socket.c:745
     ____sys_sendmsg+0x312/0x410 net/socket.c:2584
     ___sys_sendmsg net/socket.c:2638 [inline]
     __sys_sendmsg+0x1e9/0x280 net/socket.c:2667
     __do_sys_sendmsg net/socket.c:2676 [inline]
     __se_sys_sendmsg net/socket.c:2674 [inline]
     __x64_sys_sendmsg+0x46/0x50 net/socket.c:2674
     do_syscall_64+0xd3/0x1d0
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    value changed: 0xffffffff83d7feb0 -> 0x0000000000000000
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 0 PID: 10713 Comm: syz-executor.4 Tainted: G        W          6.8.0-syzkaller-08951-gfe46a7dd189e #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/29/2024
    
    Prior to this, commit 4cd12c6065df ("bpf, sockmap: Fix NULL pointer
    dereference in sk_psock_verdict_data_ready()") fixed one NULL pointer
    similarly due to no protection of saved_data_ready. Here is another
    different caller causing the same issue because of the same reason. So
    we should protect it with sk_callback_lock read lock because the writer
    side in the sk_psock_drop() uses "write_lock_bh(&sk->sk_callback_lock);".
    
    To avoid errors that could happen in future, I move those two pairs of
    lock into the sk_psock_data_ready(), which is suggested by John Fastabend.
    
    Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
    Reported-by: syzbot+aa8c8ec2538929f18f2d@syzkaller.appspotmail.com
    Signed-off-by: Jason Xing <kernelxing@tencent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: John Fastabend <john.fastabend@gmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=aa8c8ec2538929f18f2d
    Link: https://lore.kernel.org/all/20240329134037.92124-1-kerneljasonxing@gmail.com
    Link: https://lore.kernel.org/bpf/20240404021001.94815-1-kerneljasonxing@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Check bloom filter map value size [+ + +]
Author: Andrei Matei <andreimatei1@gmail.com>
Date:   Tue Mar 26 22:42:44 2024 -0400

    bpf: Check bloom filter map value size
    
    [ Upstream commit a8d89feba7e54e691ca7c4efc2a6264fa83f3687 ]
    
    This patch adds a missing check to bloom filter creating, rejecting
    values above KMALLOC_MAX_SIZE. This brings the bloom map in line with
    many other map types.
    
    The lack of this protection can cause kernel crashes for value sizes
    that overflow int's. Such a crash was caught by syzkaller. The next
    patch adds more guard-rails at a lower level.
    
    Signed-off-by: Andrei Matei <andreimatei1@gmail.com>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20240327024245.318299-2-andreimatei1@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix a verifier verbose message [+ + +]
Author: Anton Protopopov <aspsk@isovalent.com>
Date:   Fri Apr 12 16:11:00 2024 +0200

    bpf: Fix a verifier verbose message
    
    [ Upstream commit 37eacb9f6e89fb399a79e952bc9c78eb3e16290e ]
    
    Long ago a map file descriptor in a pseudo ldimm64 instruction could
    only be present as an immediate value insn[0].imm, and thus this value
    was used in a verbose verifier message printed when the file descriptor
    wasn't valid. Since addition of BPF_PSEUDO_MAP_IDX_VALUE/BPF_PSEUDO_MAP_IDX
    the insn[0].imm field can also contain an index pointing to the file
    descriptor in the attr.fd_array array. However, if the file descriptor
    is invalid, the verifier still prints the verbose message containing
    value of insn[0].imm. Patch the verifier message to always print the
    actual file descriptor value.
    
    Fixes: 387544bfa291 ("bpf: Introduce fd_idx")
    Signed-off-by: Anton Protopopov <aspsk@isovalent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20240412141100.3562942-1-aspsk@isovalent.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btf, scripts: rust: drop is_rust_module.sh [+ + +]
Author: Andrea Righi <andrea.righi@canonical.com>
Date:   Tue Jul 4 07:21:36 2023 +0200

    btf, scripts: rust: drop is_rust_module.sh
    
    commit 41bdc6decda074afc4d8f8ba44c69b08d0e9aff6 upstream.
    
    With commit c1177979af9c ("btf, scripts: Exclude Rust CUs with pahole")
    we are now able to use pahole directly to identify Rust compilation
    units (CUs) and exclude them from generating BTF debugging information
    (when DEBUG_INFO_BTF is enabled).
    
    And if pahole doesn't support the --lang-exclude flag, we can't enable
    both RUST and DEBUG_INFO_BTF at the same time.
    
    So, in any case, the script is_rust_module.sh is just redundant and we
    can drop it.
    
    NOTE: we may also be able to drop the "Rust loadable module" mark
    inside Rust modules, but it seems safer to keep it for now to make sure
    we are not breaking any external tool that may potentially rely on it.
    
    Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Tested-by: Eric Curtin <ecurtin@redhat.com>
    Reviewed-by: Eric Curtin <ecurtin@redhat.com>
    Reviewed-by: Neal Gompa <neal@gompa.dev>
    Reviewed-by: Masahiro Yamada <masahiroy@kernel.org>
    Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
    Acked-by: Daniel Xu <dxu@dxuuu.xyz>
    Link: https://lore.kernel.org/r/20230704052136.155445-1-andrea.righi@canonical.com
    [ Picked the `Reviewed-by`s from the old patch too. ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: add missing mutex_unlock in btrfs_relocate_sys_chunks() [+ + +]
Author: Dominique Martinet <dominique.martinet@atmark-techno.com>
Date:   Fri Apr 19 11:22:48 2024 +0900

    btrfs: add missing mutex_unlock in btrfs_relocate_sys_chunks()
    
    commit 9af503d91298c3f2945e73703f0e00995be08c30 upstream.
    
    The previous patch that replaced BUG_ON by error handling forgot to
    unlock the mutex in the error path.
    
    Link: https://lore.kernel.org/all/Zh%2fHpAGFqa7YAFuM@duo.ucw.cz
    Reported-by: Pavel Machek <pavel@denx.de>
    Fixes: 7411055db5ce ("btrfs: handle chunk tree lookup error in btrfs_relocate_sys_chunks()")
    CC: stable@vger.kernel.org
    Reviewed-by: Pavel Machek <pavel@denx.de>
    Signed-off-by: Dominique Martinet <dominique.martinet@atmark-techno.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: always clear PERTRANS metadata during commit [+ + +]
Author: Boris Burkov <boris@bur.io>
Date:   Tue Mar 26 12:01:28 2024 -0700

    btrfs: always clear PERTRANS metadata during commit
    
    [ Upstream commit 6e68de0bb0ed59e0554a0c15ede7308c47351e2d ]
    
    It is possible to clear a root's IN_TRANS tag from the radix tree, but
    not clear its PERTRANS, if there is some error in between. Eliminate
    that possibility by moving the free up to where we clear the tag.
    
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: do not wait for short bulk allocation [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Mar 26 09:16:46 2024 +1030

    btrfs: do not wait for short bulk allocation
    
    commit 1db7959aacd905e6487d0478ac01d89f86eb1e51 upstream.
    
    [BUG]
    There is a recent report that when memory pressure is high (including
    cached pages), btrfs can spend most of its time on memory allocation in
    btrfs_alloc_page_array() for compressed read/write.
    
    [CAUSE]
    For btrfs_alloc_page_array() we always go alloc_pages_bulk_array(), and
    even if the bulk allocation failed (fell back to single page
    allocation) we still retry but with extra memalloc_retry_wait().
    
    If the bulk alloc only returned one page a time, we would spend a lot of
    time on the retry wait.
    
    The behavior was introduced in commit 395cb57e8560 ("btrfs: wait between
    incomplete batch memory allocations").
    
    [FIX]
    Although the commit mentioned that other filesystems do the wait, it's
    not the case at least nowadays.
    
    All the mainlined filesystems only call memalloc_retry_wait() if they
    failed to allocate any page (not only for bulk allocation).
    If there is any progress, they won't call memalloc_retry_wait() at all.
    
    For example, xfs_buf_alloc_pages() would only call memalloc_retry_wait()
    if there is no allocation progress at all, and the call is not for
    metadata readahead.
    
    So I don't believe we should call memalloc_retry_wait() unconditionally
    for short allocation.
    
    Call memalloc_retry_wait() if it fails to allocate any page for tree
    block allocation (which goes with __GFP_NOFAIL and may not need the
    special handling anyway), and reduce the latency for
    btrfs_alloc_page_array().
    
    Reported-by: Julian Taylor <julian.taylor@1und1.de>
    Tested-by: Julian Taylor <julian.taylor@1und1.de>
    Link: https://lore.kernel.org/all/8966c095-cbe7-4d22-9784-a647d1bf27c3@1und1.de/
    Fixes: 395cb57e8560 ("btrfs: wait between incomplete batch memory allocations")
    CC: stable@vger.kernel.org # 6.1+
    Reviewed-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix kvcalloc() arguments order in btrfs_ioctl_send() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Thu Dec 21 11:47:45 2023 +0300

    btrfs: fix kvcalloc() arguments order in btrfs_ioctl_send()
    
    commit 6ff09b6b8c2fb6b3edda4ffaa173153a40653067 upstream.
    
    When compiling with gcc version 14.0.0 20231220 (experimental)
    and W=1, I've noticed the following warning:
    
    fs/btrfs/send.c: In function 'btrfs_ioctl_send':
    fs/btrfs/send.c:8208:44: warning: 'kvcalloc' sizes specified with 'sizeof'
    in the earlier argument and not in the later argument [-Wcalloc-transposed-args]
     8208 |         sctx->clone_roots = kvcalloc(sizeof(*sctx->clone_roots),
          |                                            ^
    
    Since 'n' and 'size' arguments of 'kvcalloc()' are multiplied to
    calculate the final size, their actual order doesn't affect the result
    and so this is not a bug. But it's still worth to fix it.
    
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    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: make btrfs_clear_delalloc_extent() free delalloc reserve [+ + +]
Author: Boris Burkov <boris@bur.io>
Date:   Tue Mar 26 11:55:22 2024 -0700

    btrfs: make btrfs_clear_delalloc_extent() free delalloc reserve
    
    [ Upstream commit 3c6f0c5ecc8910d4ffb0dfe85609ebc0c91c8f34 ]
    
    Currently, this call site in btrfs_clear_delalloc_extent() only converts
    the reservation. We are marking it not delalloc, so I don't think it
    makes sense to keep the rsv around.  This is a path where we are not
    sure to join a transaction, so it leads to incorrect free-ing during
    umount.
    
    Helps with the pass rate of generic/269 and generic/475.
    
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: return accurate error code on open failure in open_fs_devices() [+ + +]
Author: Anand Jain <anand.jain@oracle.com>
Date:   Tue Mar 19 08:28:18 2024 +0530

    btrfs: return accurate error code on open failure in open_fs_devices()
    
    [ Upstream commit 2f1aeab9fca1a5f583be1add175d1ee95c213cfa ]
    
    When attempting to exclusive open a device which has no exclusive open
    permission, such as a physical device associated with the flakey dm
    device, the open operation will fail, resulting in a mount failure.
    
    In this particular scenario, we erroneously return -EINVAL instead of the
    correct error code provided by the bdev_open_by_path() function, which is
    -EBUSY.
    
    Fix this, by returning error code from the bdev_open_by_path() function.
    With this correction, the mount error message will align with that of
    ext4 and xfs.
    
    Reviewed-by: Boris Burkov <boris@bur.io>
    Signed-off-by: Anand Jain <anand.jain@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cifs: use the least loaded channel for sending requests [+ + +]
Author: Shyam Prasad N <sprasad@microsoft.com>
Date:   Mon Dec 19 05:40:44 2022 +0000

    cifs: use the least loaded channel for sending requests
    
    [ Upstream commit ea90708d3cf3d0d92c02afe445ad463fb3c6bf10 ]
    
    Till now, we've used a simple round robin approach to
    distribute the requests between the channels. This does
    not work well if the channels consume the requests at
    different speeds, even if the advertised speeds are the
    same.
    
    This change will allow the client to pick the channel
    with least number of requests currently in-flight. This
    will disregard the link speed, and select a channel
    based on the current load of the channels.
    
    For cases when all the channels are equally loaded,
    fall back to the old round robin method.
    
    Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
    Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: 8094a600245e ("smb3: missing lock when picking channel")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clk: Don't hold prepare_lock when calling kref_put() [+ + +]
Author: Stephen Boyd <sboyd@kernel.org>
Date:   Mon Mar 25 11:41:56 2024 -0700

    clk: Don't hold prepare_lock when calling kref_put()
    
    [ Upstream commit 6f63af7511e7058f3fa4ad5b8102210741c9f947 ]
    
    We don't need to hold the prepare_lock when dropping a ref on a struct
    clk_core. The release function is only freeing memory and any code with
    a pointer reference has already unlinked anything pointing to the
    clk_core. This reduces the holding area of the prepare_lock a bit.
    
    Note that we also don't call free_clk() with the prepare_lock held.
    There isn't any reason to do that.
    
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lore.kernel.org/r/20240325184204.745706-3-sboyd@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: sunxi-ng: h6: Reparent CPUX during PLL CPUX rate change [+ + +]
Author: Jernej Skrabec <jernej.skrabec@gmail.com>
Date:   Fri Oct 13 20:17:12 2023 +0200

    clk: sunxi-ng: h6: Reparent CPUX during PLL CPUX rate change
    
    [ Upstream commit 7e91ed763dc07437777bd012af7a2bd4493731ff ]
    
    While PLL CPUX clock rate change when CPU is running from it works in
    vast majority of cases, now and then it causes instability. This leads
    to system crashes and other undefined behaviour. After a lot of testing
    (30+ hours) while also doing a lot of frequency switches, we can't
    observe any instability issues anymore when doing reparenting to stable
    clock like 24 MHz oscillator.
    
    Fixes: 524353ea480b ("clk: sunxi-ng: add support for the Allwinner H6 CCU")
    Reported-by: Chad Wagner <wagnerch42@gmail.com>
    Link: https://forum.libreelec.tv/thread/27295-orange-pi-3-lts-freezes/
    Tested-by: Chad Wagner <wagnerch42@gmail.com>
    Reviewed-by: Chen-Yu Tsai <wens@csie.org>
    Link: https://lore.kernel.org/r/20231013181712.2128037-1-jernej.skrabec@gmail.com
    Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cxgb4: Properly lock TX queue for the selftest. [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Mon Apr 29 11:11:47 2024 +0200

    cxgb4: Properly lock TX queue for the selftest.
    
    [ Upstream commit 9067eccdd7849dd120d5495dbd5a686fa6ed2c1a ]
    
    The selftest for the driver sends a dummy packet and checks if the
    packet will be received properly as it should be. The regular TX path
    and the selftest can use the same network queue so locking is required
    and was missing in the selftest path. This was addressed in the commit
    cited below.
    Unfortunately locking the TX queue requires BH to be disabled which is
    not the case in selftest path which is invoked in process context.
    Lockdep should be complaining about this.
    
    Use __netif_tx_lock_bh() for TX queue locking.
    
    Fixes: c650e04898072 ("cxgb4: Fix race between loopback and normal Tx path")
    Reported-by: "John B. Wyatt IV" <jwyatt@redhat.com>
    Closes: https://lore.kernel.org/all/Zic0ot5aGgR-V4Ks@thinkpad2021/
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://lore.kernel.org/r/20240429091147.YWAaal4v@linutronix.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm/amd/pm: Fix problems with reboot/shutdown for some SMU 13.0.4/13.0.11 users [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Thu May 2 13:32:17 2024 -0500

    dm/amd/pm: Fix problems with reboot/shutdown for some SMU 13.0.4/13.0.11 users
    
    [ Upstream commit cd94d1b182d2986378550c9087571991bfee01d4 ]
    
    Limit the workaround introduced by commit 31729e8c21ec ("drm/amd/pm: fixes
    a random hang in S4 for SMU v13.0.4/11") to only run in the s4 path.
    
    Cc: Tim Huang <Tim.Huang@amd.com>
    Fixes: 31729e8c21ec ("drm/amd/pm: fixes a random hang in S4 for SMU v13.0.4/11")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3351
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dmaengine: idxd: add a new security check to deal with a hardware erratum [+ + +]
Author: Arjan van de Ven <arjan@linux.intel.com>
Date:   Wed Apr 24 14:43:22 2024 +0000

    dmaengine: idxd: add a new security check to deal with a hardware erratum
    
    commit e11452eb071b2a8e6ba52892b2e270bbdaa6640d upstream.
    
    On Sapphire Rapids and related platforms, the DSA and IAA devices have an
    erratum that causes direct access (for example, by using the ENQCMD or
    MOVDIR64 instructions) from untrusted applications to be a security problem.
    
    To solve this, add a flag to the PCI device enumeration and device structures
    to indicate the presence/absence of this security exposure. In the mmap()
    method of the device, this flag is then used to enforce that the user
    has the CAP_SYS_RAWIO capability.
    
    In a future patch, a write() based method will be added that allows untrusted
    applications submit work to the accelerator, where the kernel can do
    sanity checking on the user input to ensure secure operation of the accelerator.
    
    Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: idxd: add a write() method for applications to submit work [+ + +]
Author: Nikhil Rao <nikhil.rao@intel.com>
Date:   Wed Apr 24 15:16:12 2024 +0000

    dmaengine: idxd: add a write() method for applications to submit work
    
    commit 6827738dc684a87ad54ebba3ae7f3d7c977698eb upstream.
    
    After the patch to restrict the use of mmap() to CAP_SYS_RAWIO for
    the currently existing devices, most applications can no longer make
    use of the accelerators as in production "you don't run things as root".
    
    To keep the DSA and IAA accelerators usable, hook up a write() method
    so that applications can still submit work. In the write method,
    sufficient input validation is performed to avoid the security issue
    that required the mmap CAP_SYS_RAWIO check.
    
    One complication is that the DSA device allows for indirect ("batched")
    descriptors. There is no reasonable way to do the input validation
    on these indirect descriptors so the write() method will not allow these
    to be submitted to the hardware on affected hardware, and the sysfs
    enumeration of support for the opcode is also removed.
    
    Early performance data shows that the performance delta for most common
    cases is within the noise.
    
    Signed-off-by: Nikhil Rao <nikhil.rao@intel.com>
    Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: pl330: issue_pending waits until WFP state [+ + +]
Author: Bumyong Lee <bumyong.lee@samsung.com>
Date:   Tue Dec 19 14:50:26 2023 +0900

    dmaengine: pl330: issue_pending waits until WFP state
    
    [ Upstream commit 22a9d9585812440211b0b34a6bc02ade62314be4 ]
    
    According to DMA-330 errata notice[1] 71930, DMAKILL
    cannot clear internal signal, named pipeline_req_active.
    it makes that pl330 would wait forever in WFP state
    although dma already send dma request if pl330 gets
    dma request before entering WFP state.
    
    The errata suggests that polling until entering WFP state
    as workaround and then peripherals allows to issue dma request.
    
    [1]: https://developer.arm.com/documentation/genc008428/latest
    
    Signed-off-by: Bumyong Lee <bumyong.lee@samsung.com>
    Link: https://lore.kernel.org/r/20231219055026.118695-1-bumyong.lee@samsung.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Stable-dep-of: afc89870ea67 ("dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP state"")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP state" [+ + +]
Author: Vinod Koul <vkoul@kernel.org>
Date:   Thu Mar 28 12:21:51 2024 +0530

    dmaengine: Revert "dmaengine: pl330: issue_pending waits until WFP state"
    
    [ Upstream commit afc89870ea677bd5a44516eb981f7a259b74280c ]
    
    This reverts commit 22a9d9585812 ("dmaengine: pl330: issue_pending waits
    until WFP state") as it seems to cause regression in pl330 driver.
    Note the issue now exists in mainline so a fix to be done.
    
    Cc: stable@vger.kernel.org
    Reported-by: karthikeyan <karthikeyan@linumiz.com>
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Drivers: hv: vmbus: Don't free ring buffers that couldn't be re-encrypted [+ + +]
Author: Michael Kelley <mhklinux@outlook.com>
Date:   Mon Mar 11 09:15:58 2024 -0700

    Drivers: hv: vmbus: Don't free ring buffers that couldn't be re-encrypted
    
    [ Upstream commit 30d18df6567be09c1433e81993e35e3da573ac48 ]
    
    In CoCo VMs it is possible for the untrusted host to cause
    set_memory_encrypted() or set_memory_decrypted() to fail such that an
    error is returned and the resulting memory is shared. Callers need to
    take care to handle these errors to avoid returning decrypted (shared)
    memory to the page allocator, which could lead to functional or security
    issues.
    
    The VMBus ring buffer code could free decrypted/shared pages if
    set_memory_decrypted() fails. Check the decrypted field in the struct
    vmbus_gpadl for the ring buffers to decide whether to free the memory.
    
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Link: https://lore.kernel.org/r/20240311161558.1310-6-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20240311161558.1310-6-mhklinux@outlook.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Drivers: hv: vmbus: Track decrypted status in vmbus_gpadl [+ + +]
Author: Rick Edgecombe <rick.p.edgecombe@intel.com>
Date:   Mon Mar 11 09:15:55 2024 -0700

    Drivers: hv: vmbus: Track decrypted status in vmbus_gpadl
    
    [ Upstream commit 211f514ebf1ef5de37b1cf6df9d28a56cfd242ca ]
    
    In CoCo VMs it is possible for the untrusted host to cause
    set_memory_encrypted() or set_memory_decrypted() to fail such that an
    error is returned and the resulting memory is shared. Callers need to
    take care to handle these errors to avoid returning decrypted (shared)
    memory to the page allocator, which could lead to functional or security
    issues.
    
    In order to make sure callers of vmbus_establish_gpadl() and
    vmbus_teardown_gpadl() don't return decrypted/shared pages to
    allocators, add a field in struct vmbus_gpadl to keep track of the
    decryption status of the buffers. This will allow the callers to
    know if they should free or leak the pages.
    
    Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Link: https://lore.kernel.org/r/20240311161558.1310-3-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20240311161558.1310-3-mhklinux@outlook.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Atom Integrated System Info v2_2 for DCN35 [+ + +]
Author: Gabe Teeger <gabe.teeger@amd.com>
Date:   Tue Apr 9 10:38:58 2024 -0400

    drm/amd/display: Atom Integrated System Info v2_2 for DCN35
    
    [ Upstream commit 9a35d205f466501dcfe5625ca313d944d0ac2d60 ]
    
    New request from KMD/VBIOS in order to support new UMA carveout
    model. This fixes a null dereference from accessing
    Ctx->dc_bios->integrated_info while it was NULL.
    
    DAL parses through the BIOS and extracts the necessary
    integrated_info but was missing a case for the new BIOS
    version 2.3.
    
    Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
    Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Signed-off-by: Gabe Teeger <gabe.teeger@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: Handle Y carry-over in VCP X.Y calculation [+ + +]
Author: George Shen <george.shen@amd.com>
Date:   Thu Sep 16 19:55:39 2021 -0400

    drm/amd/display: Handle Y carry-over in VCP X.Y calculation
    
    commit 719564737a9ac3d0b49c314450b56cf6f7d71358 upstream.
    
    Theoretically rare corner case where ceil(Y) results in rounding up to
    an integer. If this happens, the 1 should be carried over to the X
    value.
    
    CC: stable@vger.kernel.org
    Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Signed-off-by: George Shen <george.shen@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/amdgpu: once more fix the call oder in amdgpu_ttm_move() v2 [+ + +]
Author: Christian König <christian.koenig@amd.com>
Date:   Thu Mar 21 11:32:02 2024 +0100

    drm/amdgpu: once more fix the call oder in amdgpu_ttm_move() v2
    
    commit d3a9331a6591e9df64791e076f6591f440af51c3 upstream.
    
    This reverts drm/amdgpu: fix ftrace event amdgpu_bo_move always move
    on same heap. The basic problem here is that after the move the old
    location is simply not available any more.
    
    Some fixes were suggested, but essentially we should call the move
    notification before actually moving things because only this way we have
    the correct order for DMA-buf and VM move notifications as well.
    
    Also rework the statistic handling so that we don't update the eviction
    counter before the move.
    
    v2: add missing NULL check
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Fixes: 94aeb4117343 ("drm/amdgpu: fix ftrace event amdgpu_bo_move always move on same heap")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3171
    Reviewed-by: Alex Deucher <alexander.deucher@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/amdgpu: Refine IB schedule error logging [+ + +]
Author: Lijo Lazar <lijo.lazar@amd.com>
Date:   Thu Mar 21 17:46:36 2024 +0530

    drm/amdgpu: Refine IB schedule error logging
    
    [ Upstream commit 4b18a91faf1752f9bd69a4ed3aed2c8f6e5b0528 ]
    
    Downgrade to debug information when IBs are skipped. Also, use dev_* to
    identify the device.
    
    Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Asad Kamal <asad.kamal@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdkfd: don't allow mapping the MMIO HDP page with large pages [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Sun Apr 14 13:06:39 2024 -0400

    drm/amdkfd: don't allow mapping the MMIO HDP page with large pages
    
    commit be4a2a81b6b90d1a47eaeaace4cc8e2cb57b96c7 upstream.
    
    We don't get the right offset in that case.  The GPU has
    an unused 4K area of the register BAR space into which you can
    remap registers.  We remap the HDP flush registers into this
    space to allow userspace (CPU or GPU) to flush the HDP when it
    updates VRAM.  However, on systems with >4K pages, we end up
    exposing PAGE_SIZE of MMIO space.
    
    Fixes: d8e408a82704 ("drm/amdkfd: Expose HDP registers to user space")
    Reviewed-by: Felix Kuehling <felix.kuehling@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/connector: Add \n to message about demoting connector force-probes [+ + +]
Author: Douglas Anderson <dianders@chromium.org>
Date:   Thu May 2 15:32:35 2024 -0700

    drm/connector: Add \n to message about demoting connector force-probes
    
    [ Upstream commit 6897204ea3df808d342c8e4613135728bc538bcd ]
    
    The debug print clearly lacks a \n at the end. Add it.
    
    Fixes: 8f86c82aba8b ("drm/connector: demote connector force-probes for non-master clients")
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Reviewed-by: Simon Ser <contact@emersion.fr>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240502153234.1.I2052f01c8d209d9ae9c300b87c6e4f60bd3cc99e@changeid
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915/bios: Fix parsing backlight BDB data [+ + +]
Author: Karthikeyan Ramasubramanian <kramasub@chromium.org>
Date:   Wed Feb 21 18:06:24 2024 -0700

    drm/i915/bios: Fix parsing backlight BDB data
    
    commit 43b26bdd2ee5cfca80939be910d5b23a50cd7f9d upstream.
    
    Starting BDB version 239, hdr_dpcd_refresh_timeout is introduced to
    backlight BDB data. Commit 700034566d68 ("drm/i915/bios: Define more BDB
    contents") updated the backlight BDB data accordingly. This broke the
    parsing of backlight BDB data in VBT for versions 236 - 238 (both
    inclusive) and hence the backlight controls are not responding on units
    with the concerned BDB version.
    
    backlight_control information has been present in backlight BDB data
    from at least BDB version 191 onwards, if not before. Hence this patch
    extracts the backlight_control information for BDB version 191 or newer.
    Tested on Chromebooks using Jasperlake SoC (reports bdb->version = 236).
    Tested on Chromebooks using Raptorlake SoC (reports bdb->version = 251).
    
    v2: removed checking the block size of the backlight BDB data
        [vsyrjala: this is completely safe thanks to commit e163cfb4c96d
         ("drm/i915/bios: Make copies of VBT data blocks")]
    
    Fixes: 700034566d68 ("drm/i915/bios: Define more BDB contents")
    Cc: stable@vger.kernel.org
    Cc: Jani Nikula <jani.nikula@intel.com>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: Karthikeyan Ramasubramanian <kramasub@chromium.org>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240221180622.v2.1.I0690aa3e96a83a43b3fc33f50395d334b2981826@changeid
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    (cherry picked from commit c286f6a973c66c0d993ecab9f7162c790e7064c8)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/meson: dw-hdmi: add bandgap setting for g12 [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Apr 26 18:02:54 2024 +0200

    drm/meson: dw-hdmi: add bandgap setting for g12
    
    [ Upstream commit 08001033121dd92b8297a5b7333636b466c30f13 ]
    
    When no mode is set, the utility pin appears to be grounded. No signal
    is getting through.
    
    This is problematic because ARC and eARC use this line and may do so even
    if no display mode is set.
    
    This change enable the bandgap setting on g12 chip, which fix the problem
    with the utility pin. This is done by restoring init values on PHY init and
    disable.
    
    Fixes: 3b7c1237a72a ("drm/meson: Add G12A support for the DW-HDMI Glue")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20240426160256.3089978-3-jbrunet@baylibre.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240426160256.3089978-3-jbrunet@baylibre.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/meson: dw-hdmi: power up phy on device init [+ + +]
Author: Jerome Brunet <jbrunet@baylibre.com>
Date:   Fri Apr 26 18:02:53 2024 +0200

    drm/meson: dw-hdmi: power up phy on device init
    
    [ Upstream commit 04703bfd7f99c016a823c74712b97f8b5590ce87 ]
    
    The phy is not in a useful state right after init. It will become useful,
    including for auxiliary function such as CEC or ARC, after the first mode
    is set. This is a problem on systems where the display is using another
    interface like DSI or CVBS.
    
    This change refactor the init and mode change callback to power up the PHY
    on init and leave only what is necessary for mode changes in the related
    function. This is enough to fix CEC operation when HDMI display is not
    enabled.
    
    Fixes: 3f68be7d8e96 ("drm/meson: Add support for HDMI encoder and DW-HDMI bridge + PHY")
    Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20240426160256.3089978-2-jbrunet@baylibre.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240426160256.3089978-2-jbrunet@baylibre.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/nouveau/dp: Don't probe eDP ports twice harder [+ + +]
Author: Lyude Paul <lyude@redhat.com>
Date:   Thu Apr 4 19:35:54 2024 -0400

    drm/nouveau/dp: Don't probe eDP ports twice harder
    
    [ Upstream commit bf52d7f9b2067f02efe7e32697479097aba4a055 ]
    
    I didn't pay close enough attention the last time I tried to fix this
    problem - while we currently do correctly take care to make sure we don't
    probe a connected eDP port more then once, we don't do the same thing for
    eDP ports we found to be disconnected.
    
    So, fix this and make sure we only ever probe eDP ports once and then leave
    them at that connector state forever (since without HPD, it's not going to
    change on its own anyway). This should get rid of the last few GSP errors
    getting spit out during runtime suspend and resume on some machines, as we
    tried to reprobe eDP ports in response to ACPI hotplug probe events.
    
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Reviewed-by: Dave Airlie <airlied@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240404233736.7946-3-lyude@redhat.com
    (cherry picked from commit fe6660b661c3397af0867d5d098f5b26581f1290)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panel: ili9341: Respect deferred probe [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Thu Apr 25 17:26:18 2024 +0300

    drm/panel: ili9341: Respect deferred probe
    
    [ Upstream commit 740fc1e0509be3f7e2207e89125b06119ed62943 ]
    
    GPIO controller might not be available when driver is being probed.
    There are plenty of reasons why, one of which is deferred probe.
    
    Since GPIOs are optional, return any error code we got to the upper
    layer, including deferred probe. With that in mind, use dev_err_probe()
    in order to avoid spamming the logs.
    
    Fixes: 5a04227326b0 ("drm/panel: Add ilitek ili9341 panel driver")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Reviewed-by: Sui Jingfeng <sui.jingfeng@linux.dev>
    Link: https://lore.kernel.org/r/20240425142706.2440113-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240425142706.2440113-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/panel: ili9341: Use predefined error codes [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Thu Apr 25 17:26:19 2024 +0300

    drm/panel: ili9341: Use predefined error codes
    
    [ Upstream commit da85f0aaa9f21999753b01d45c0343f885a8f905 ]
    
    In one case the -1 is returned which is quite confusing code for
    the wrong device ID, in another the ret is returning instead of
    plain 0 that also confusing as readed may ask the possible meaning
    of positive codes, which are never the case there. Convert both
    to use explicit predefined error codes to make it clear what's going
    on there.
    
    Fixes: 5a04227326b0 ("drm/panel: Add ilitek ili9341 panel driver")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Reviewed-by: Sui Jingfeng <sui.jingfeng@linux.dev>
    Link: https://lore.kernel.org/r/20240425142706.2440113-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240425142706.2440113-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vmwgfx: Fix invalid reads in fence signaled events [+ + +]
Author: Zack Rusin <zack.rusin@broadcom.com>
Date:   Thu Apr 25 15:27:48 2024 -0400

    drm/vmwgfx: Fix invalid reads in fence signaled events
    
    commit a37ef7613c00f2d72c8fc08bd83fb6cc76926c8c upstream.
    
    Correctly set the length of the drm_event to the size of the structure
    that's actually used.
    
    The length of the drm_event was set to the parent structure instead of
    to the drm_vmw_event_fence which is supposed to be read. drm_read
    uses the length parameter to copy the event to the user space thus
    resuling in oob reads.
    
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Fixes: 8b7de6aa8468 ("vmwgfx: Rework fence event action")
    Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-23566
    Cc: David Airlie <airlied@gmail.com>
    CC: Daniel Vetter <daniel@ffwll.ch>
    Cc: Zack Rusin <zack.rusin@broadcom.com>
    Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: linux-kernel@vger.kernel.org
    Cc: <stable@vger.kernel.org> # v3.4+
    Reviewed-by: Maaz Mombasawala <maaz.mombasawala@broadcom.com>
    Reviewed-by: Martin Krastev <martin.krastev@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240425192748.1761522-1-zack.rusin@broadcom.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dt-bindings: iio: health: maxim,max30102: fix compatible check [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Sat Mar 16 23:56:57 2024 +0100

    dt-bindings: iio: health: maxim,max30102: fix compatible check
    
    commit 89384a2b656b9dace4c965432a209d5c9c3a2a6f upstream.
    
    The "maxim,green-led-current-microamp" property is only available for
    the max30105 part (it provides an extra green LED), and must be set to
    false for the max30102 part.
    
    Instead, the max30100 part has been used for that, which is not
    supported by this binding (it has its own binding).
    
    This error was introduced during the txt to yaml conversion.
    
    Fixes: 5a6a65b11e3a ("dt-bindings:iio:health:maxim,max30102: txt to yaml conversion")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Acked-by: Conor Dooley <conor.dooley@microchip.com>
    Link: https://lore.kernel.org/r/20240316-max30102_binding_fix-v1-1-e8e58f69ef8a@gmail.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dyndbg: fix old BUG_ON in >control parser [+ + +]
Author: Jim Cromie <jim.cromie@gmail.com>
Date:   Mon Apr 29 13:31:11 2024 -0600

    dyndbg: fix old BUG_ON in >control parser
    
    commit 00e7d3bea2ce7dac7bee1cf501fb071fd0ea8f6c upstream.
    
    Fix a BUG_ON from 2009.  Even if it looks "unreachable" (I didn't
    really look), lets make sure by removing it, doing pr_err and return
    -EINVAL instead.
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
    Link: https://lore.kernel.org/r/20240429193145.66543-2-jim.cromie@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
eeprom: at24: fix memory corruption race condition [+ + +]
Author: Daniel Okazaki <dtokazaki@google.com>
Date:   Mon Apr 22 17:43:36 2024 +0000

    eeprom: at24: fix memory corruption race condition
    
    [ Upstream commit f42c97027fb75776e2e9358d16bf4a99aeb04cf2 ]
    
    If the eeprom is not accessible, an nvmem device will be registered, the
    read will fail, and the device will be torn down. If another driver
    accesses the nvmem device after the teardown, it will reference
    invalid memory.
    
    Move the failure point before registering the nvmem device.
    
    Signed-off-by: Daniel Okazaki <dtokazaki@google.com>
    Fixes: b20eb4c1f026 ("eeprom: at24: drop unnecessary label")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240422174337.2487142-1-dtokazaki@google.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

eeprom: at24: Probe for DDR3 thermal sensor in the SPD case [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Wed Dec 20 13:55:58 2023 +0100

    eeprom: at24: Probe for DDR3 thermal sensor in the SPD case
    
    [ Upstream commit caba40ec3531b0849f44502a03117796e8c9f4a1 ]
    
    The DDR3 SPD data structure advertises the presence of a thermal
    sensor on a DDR3 module in byte 32, bit 7. Let's use this information
    to explicitly instantiate the thermal sensor I2C client instead of
    having to rely on class-based I2C probing.
    
    The temp sensor i2c address can be derived from the SPD i2c address,
    so we can directly instantiate the device and don't have to probe
    for it. If the temp sensor has been instantiated already by other
    means (e.g. class-based auto-detection), then the busy-check in
    i2c_new_client_device will detect this.
    
    Note: Thermal sensors on DDR4 DIMM's are instantiated from the
          ee1004 driver.
    
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://lore.kernel.org/r/68113672-3724-44d5-9ff8-313dd6628f8c@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: f42c97027fb7 ("eeprom: at24: fix memory corruption race condition")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

eeprom: at24: Use dev_err_probe for nvmem register failure [+ + +]
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date:   Tue May 16 10:05:53 2023 +0200

    eeprom: at24: Use dev_err_probe for nvmem register failure
    
    [ Upstream commit a3c10035d12f5ec10915d5c00c2e8f7d7c066182 ]
    
    When using nvmem layouts it is possible devm_nvmem_register returns
    -EPROBE_DEFER, resulting in an 'empty' in
    /sys/kernel/debug/devices_deferred. Use dev_err_probe for providing
    additional information.
    
    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Stable-dep-of: f42c97027fb7 ("eeprom: at24: fix memory corruption race condition")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firewire: nosy: ensure user_length is taken into account when fetching packet contents [+ + +]
Author: Thanassis Avgerinos <thanassis.avgerinos@gmail.com>
Date:   Wed Apr 17 11:30:02 2024 -0400

    firewire: nosy: ensure user_length is taken into account when fetching packet contents
    
    commit 38762a0763c10c24a4915feee722d7aa6e73eb98 upstream.
    
    Ensure that packet_buffer_get respects the user_length provided. If
    the length of the head packet exceeds the user_length, packet_buffer_get
    will now return 0 to signify to the user that no data were read
    and a larger buffer size is required. Helps prevent user space overflows.
    
    Signed-off-by: Thanassis Avgerinos <thanassis.avgerinos@gmail.com>
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

firewire: ohci: mask bus reset interrupts between ISR and bottom half [+ + +]
Author: Adam Goldman <adamg@pobox.com>
Date:   Mon Mar 25 07:38:41 2024 +0900

    firewire: ohci: mask bus reset interrupts between ISR and bottom half
    
    [ Upstream commit 752e3c53de0fa3b7d817a83050b6699b8e9c6ec9 ]
    
    In the FireWire OHCI interrupt handler, if a bus reset interrupt has
    occurred, mask bus reset interrupts until bus_reset_work has serviced and
    cleared the interrupt.
    
    Normally, we always leave bus reset interrupts masked. We infer the bus
    reset from the self-ID interrupt that happens shortly thereafter. A
    scenario where we unmask bus reset interrupts was introduced in 2008 in
    a007bb857e0b26f5d8b73c2ff90782d9c0972620: If
    OHCI_PARAM_DEBUG_BUSRESETS (8) is set in the debug parameter bitmask, we
    will unmask bus reset interrupts so we can log them.
    
    irq_handler logs the bus reset interrupt. However, we can't clear the bus
    reset event flag in irq_handler, because we won't service the event until
    later. irq_handler exits with the event flag still set. If the
    corresponding interrupt is still unmasked, the first bus reset will
    usually freeze the system due to irq_handler being called again each
    time it exits. This freeze can be reproduced by loading firewire_ohci
    with "modprobe firewire_ohci debug=-1" (to enable all debugging output).
    Apparently there are also some cases where bus_reset_work will get called
    soon enough to clear the event, and operation will continue normally.
    
    This freeze was first reported a few months after a007bb85 was committed,
    but until now it was never fixed. The debug level could safely be set
    to -1 through sysfs after the module was loaded, but this would be
    ineffectual in logging bus reset interrupts since they were only
    unmasked during initialization.
    
    irq_handler will now leave the event flag set but mask bus reset
    interrupts, so irq_handler won't be called again and there will be no
    freeze. If OHCI_PARAM_DEBUG_BUSRESETS is enabled, bus_reset_work will
    unmask the interrupt after servicing the event, so future interrupts
    will be caught as desired.
    
    As a side effect to this change, OHCI_PARAM_DEBUG_BUSRESETS can now be
    enabled through sysfs in addition to during initial module loading.
    However, when enabled through sysfs, logging of bus reset interrupts will
    be effective only starting with the second bus reset, after
    bus_reset_work has executed.
    
    Signed-off-by: Adam Goldman <adamg@pobox.com>
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/9p: drop inodes immediately on non-.L too [+ + +]
Author: Joakim Sindholt <opensource@zhasha.com>
Date:   Mon Mar 18 12:22:32 2024 +0100

    fs/9p: drop inodes immediately on non-.L too
    
    [ Upstream commit 7fd524b9bd1be210fe79035800f4bd78a41b349f ]
    
    Signed-off-by: Joakim Sindholt <opensource@zhasha.com>
    Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/9p: only translate RWX permissions for plain 9P2000 [+ + +]
Author: Joakim Sindholt <opensource@zhasha.com>
Date:   Mon Mar 18 12:22:31 2024 +0100

    fs/9p: only translate RWX permissions for plain 9P2000
    
    [ Upstream commit cd25e15e57e68a6b18dc9323047fe9c68b99290b ]
    
    Garbage in plain 9P2000's perm bits is allowed through, which causes it
    to be able to set (among others) the suid bit. This was presumably not
    the intent since the unix extended bits are handled explicitly and
    conditionally on .u.
    
    Signed-off-by: Joakim Sindholt <opensource@zhasha.com>
    Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/9p: translate O_TRUNC into OTRUNC [+ + +]
Author: Joakim Sindholt <opensource@zhasha.com>
Date:   Mon Mar 18 12:22:33 2024 +0100

    fs/9p: translate O_TRUNC into OTRUNC
    
    [ Upstream commit 87de39e70503e04ddb58965520b15eb9efa7eef3 ]
    
    This one hits both 9P2000 and .u as it appears v9fs has never translated
    the O_TRUNC flag.
    
    Signed-off-by: Joakim Sindholt <opensource@zhasha.com>
    Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gfs2: Fix invalid metadata access in punch_hole [+ + +]
Author: Andrew Price <anprice@redhat.com>
Date:   Mon Mar 11 16:40:36 2024 +0100

    gfs2: Fix invalid metadata access in punch_hole
    
    [ Upstream commit c95346ac918c5badf51b9a7ac58a26d3bd5bb224 ]
    
    In punch_hole(), when the offset lies in the final block for a given
    height, there is no hole to punch, but the maximum size check fails to
    detect that.  Consequently, punch_hole() will try to punch a hole beyond
    the end of the metadata and fail.  Fix the maximum size check.
    
    Signed-off-by: Andrew Price <anprice@redhat.com>
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpio: crystalcove: Use -ENOTSUPP consistently [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Apr 5 19:26:22 2024 +0300

    gpio: crystalcove: Use -ENOTSUPP consistently
    
    [ Upstream commit ace0ebe5c98d66889f19e0f30e2518d0c58d0e04 ]
    
    The GPIO library expects the drivers to return -ENOTSUPP in some
    cases and not using analogue POSIX code. Make the driver to follow
    this.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: wcove: Use -ENOTSUPP consistently [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Apr 5 19:25:21 2024 +0300

    gpio: wcove: Use -ENOTSUPP consistently
    
    [ Upstream commit 0c3b532ad3fbf82884a2e7e83e37c7dcdd4d1d99 ]
    
    The GPIO library expects the drivers to return -ENOTSUPP in some
    cases and not using analogue POSIX code. Make the driver to follow
    this.
    
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpiolib: cdev: Add missing header(s) [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Oct 7 16:44:44 2022 +0300

    gpiolib: cdev: Add missing header(s)
    
    [ Upstream commit 52ee7c02f67808afa533c523fa3e4b66c54ea758 ]
    
    Do not imply that some of the generic headers may be always included.
    Instead, include explicitly what we are direct user of.
    
    While at it, sort headers alphabetically.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Rewiewed-by: Kent Gibson <warthog618@gmail.com>
    Stable-dep-of: ee0166b637a5 ("gpiolib: cdev: fix uninitialised kfifo")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpiolib: cdev: fix uninitialised kfifo [+ + +]
Author: Kent Gibson <warthog618@gmail.com>
Date:   Fri May 10 14:53:42 2024 +0800

    gpiolib: cdev: fix uninitialised kfifo
    
    [ Upstream commit ee0166b637a5e376118e9659e5b4148080f1d27e ]
    
    If a line is requested with debounce, and that results in debouncing
    in software, and the line is subsequently reconfigured to enable edge
    detection then the allocation of the kfifo to contain edge events is
    overlooked.  This results in events being written to and read from an
    uninitialised kfifo.  Read events are returned to userspace.
    
    Initialise the kfifo in the case where the software debounce is
    already active.
    
    Fixes: 65cff7046406 ("gpiolib: cdev: support setting debounce")
    Signed-off-by: Kent Gibson <warthog618@gmail.com>
    Link: https://lore.kernel.org/r/20240510065342.36191-1-warthog618@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpiolib: cdev: relocate debounce_period_us from struct gpio_desc [+ + +]
Author: Kent Gibson <warthog618@gmail.com>
Date:   Tue Dec 19 08:41:54 2023 +0800

    gpiolib: cdev: relocate debounce_period_us from struct gpio_desc
    
    [ Upstream commit 9344e34e7992fec95ce6210d95ac01437dd327ab ]
    
    Store the debounce period for a requested line locally, rather than in
    the debounce_period_us field in the gpiolib struct gpio_desc.
    
    Add a global tree of lines containing supplemental line information
    to make the debounce period available to be reported by the
    GPIO_V2_GET_LINEINFO_IOCTL and the line change notifier.
    
    Signed-off-by: Kent Gibson <warthog618@gmail.com>
    Reviewed-by: Andy Shevchenko <andy@kernel.org>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Stable-dep-of: ee0166b637a5 ("gpiolib: cdev: fix uninitialised kfifo")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpu: host1x: Do not setup DMA for virtual devices [+ + +]
Author: Thierry Reding <treding@nvidia.com>
Date:   Thu Mar 14 16:49:43 2024 +0100

    gpu: host1x: Do not setup DMA for virtual devices
    
    [ Upstream commit 8ab58f6841b19423231c5db3378691ec80c778f8 ]
    
    The host1x devices are virtual compound devices and do not perform DMA
    accesses themselves, so they do not need to be set up for DMA.
    
    Ideally we would also not need to set up DMA masks for the virtual
    devices, but we currently still need those for legacy support on old
    hardware.
    
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240314154943.2487549-1-thierry.reding@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hsr: Simplify code for announcing HSR nodes timer setup [+ + +]
Author: Lukasz Majewski <lukma@denx.de>
Date:   Tue May 7 13:12:14 2024 +0200

    hsr: Simplify code for announcing HSR nodes timer setup
    
    [ Upstream commit 4893b8b3ef8db2b182d1a1bebf6c7acf91405000 ]
    
    Up till now the code to start HSR announce timer, which triggers sending
    supervisory frames, was assuming that hsr_netdev_notify() would be called
    at least twice for hsrX interface. This was required to have different
    values for old and current values of network device's operstate.
    
    This is problematic for a case where hsrX interface is already in the
    operational state when hsr_netdev_notify() is called, so timer is not
    configured to trigger and as a result the hsrX is not sending supervisory
    frames to HSR ring.
    
    This error has been discovered when hsr_ping.sh script was run. To be
    more specific - for the hsr1 and hsr2 the hsr_netdev_notify() was
    called at least twice with different IF_OPER_{LOWERDOWN|DOWN|UP} states
    assigned in hsr_check_carrier_and_operstate(hsr). As a result there was
    no issue with sending supervisory frames.
    However, with hsr3, the notify function was called only once with
    operstate set to IF_OPER_UP and timer responsible for triggering
    supervisory frames was not fired.
    
    The solution is to use netif_oper_up() and netif_running() helper
    functions to assess if network hsrX device is up.
    Only then, when the timer is not already pending, it is started.
    Otherwise it is deactivated.
    
    Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
    Signed-off-by: Lukasz Majewski <lukma@denx.de>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://lore.kernel.org/r/20240507111214.3519800-1-lukma@denx.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (corsair-cpro) Protect ccp->wait_input_report with a spinlock [+ + +]
Author: Aleksa Savic <savicaleksa83@gmail.com>
Date:   Sat May 4 11:25:03 2024 +0200

    hwmon: (corsair-cpro) Protect ccp->wait_input_report with a spinlock
    
    [ Upstream commit d02abd57e79469a026213f7f5827a98d909f236a ]
    
    Through hidraw, userspace can cause a status report to be sent
    from the device. The parsing in ccp_raw_event() may happen in
    parallel to a send_usb_cmd() call (which resets the completion
    for tracking the report) if it's running on a different CPU where
    bottom half interrupts are not disabled.
    
    Add a spinlock around the complete_all() in ccp_raw_event() and
    reinit_completion() in send_usb_cmd() to prevent race issues.
    
    Fixes: 40c3a4454225 ("hwmon: add Corsair Commander Pro driver")
    Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
    Acked-by: Marius Zachmann <mail@mariuszachmann.de>
    Link: https://lore.kernel.org/r/20240504092504.24158-4-savicaleksa83@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (corsair-cpro) Use a separate buffer for sending commands [+ + +]
Author: Aleksa Savic <savicaleksa83@gmail.com>
Date:   Sat May 4 11:25:01 2024 +0200

    hwmon: (corsair-cpro) Use a separate buffer for sending commands
    
    [ Upstream commit e0cd85dc666cb08e1bd313d560cb4eff4d04219e ]
    
    Introduce cmd_buffer, a separate buffer for storing only
    the command that is sent to the device. Before this separation,
    the existing buffer was shared for both the command and the
    report received in ccp_raw_event(), which was copied into it.
    
    However, because of hidraw, the raw event parsing may be triggered
    in the middle of sending a command, resulting in outputting gibberish
    to the device. Using a separate buffer resolves this.
    
    Fixes: 40c3a4454225 ("hwmon: add Corsair Commander Pro driver")
    Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
    Acked-by: Marius Zachmann <mail@mariuszachmann.de>
    Link: https://lore.kernel.org/r/20240504092504.24158-2-savicaleksa83@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (corsair-cpro) Use complete_all() instead of complete() in ccp_raw_event() [+ + +]
Author: Aleksa Savic <savicaleksa83@gmail.com>
Date:   Sat May 4 11:25:02 2024 +0200

    hwmon: (corsair-cpro) Use complete_all() instead of complete() in ccp_raw_event()
    
    [ Upstream commit 3a034a7b0715eb51124a5263890b1ed39978ed3a ]
    
    In ccp_raw_event(), the ccp->wait_input_report completion is
    completed once. Since we're waiting for exactly one report in
    send_usb_cmd(), use complete_all() instead of complete()
    to mark the completion as spent.
    
    Fixes: 40c3a4454225 ("hwmon: add Corsair Commander Pro driver")
    Signed-off-by: Aleksa Savic <savicaleksa83@gmail.com>
    Acked-by: Marius Zachmann <mail@mariuszachmann.de>
    Link: https://lore.kernel.org/r/20240504092504.24158-3-savicaleksa83@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (pmbus/ucd9000) Increase delay from 250 to 500us [+ + +]
Author: Lakshmi Yadlapati <lakshmiy@us.ibm.com>
Date:   Tue May 7 14:46:03 2024 -0500

    hwmon: (pmbus/ucd9000) Increase delay from 250 to 500us
    
    commit 26e8383b116d0dbe74e28f86646563ab46d66d83 upstream.
    
    Following the failure observed with a delay of 250us, experiments were
    conducted with various delays. It was found that a delay of 350us
    effectively mitigated the issue.
    
    To provide a more optimal solution while still allowing a margin for
    stability, the delay is being adjusted to 500us.
    
    Signed-off-by: Lakshmi Yadlapati <lakshmiy@us.ibm.com>
    Link: https://lore.kernel.org/r/20240507194603.1305750-1-lakshmiy@us.ibm.com
    Fixes: 8d655e6523764 ("hwmon: (ucd90320) Add minimum delay between bus accesses")
    Reviewed-by: Eddie James <eajames@linux.ibm.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iio: accel: mxc4005: Interrupt handling fixes [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Mar 26 12:36:59 2024 +0100

    iio: accel: mxc4005: Interrupt handling fixes
    
    commit 57a1592784d622ecee0b71940c65429173996b33 upstream.
    
    There are 2 issues with interrupt handling in the mxc4005 driver:
    
    1. mxc4005_set_trigger_state() writes MXC4005_REG_INT_MASK1_BIT_DRDYE
    (0x01) to INT_MASK1 to enable the interrupt, but to disable the interrupt
    it writes ~MXC4005_REG_INT_MASK1_BIT_DRDYE which is 0xfe, so it enables
    all other interrupt sources in the INT_SRC1 register. On the MXC4005 this
    is not an issue because only bit 0 of the register is used. On the MXC6655
    OTOH this is a problem since bit7 is used as TC (Temperature Compensation)
    disable bit and writing 1 to this disables Temperature Compensation which
    should only be done when running self-tests on the chip.
    
    Write 0 instead of ~MXC4005_REG_INT_MASK1_BIT_DRDYE to disable
    the interrupts to fix this.
    
    2. The datasheets for the MXC4005 / MXC6655 do not state what the reset
    value for the INT_MASK0 and INT_MASK1 registers is and since these are
    write only we also cannot learn this from the hw. Presumably the reset
    value for both is all 0, which means all interrupts disabled.
    
    Explicitly set both registers to 0 from mxc4005_chip_init() to ensure
    both masks are actually set to 0.
    
    Fixes: 79846e33aac1 ("iio: accel: mxc4005: add support for mxc6655")
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240326113700.56725-2-hdegoede@redhat.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: iio:imu: adis16475: Fix sync mode setting [+ + +]
Author: Ramona Gradinariu <ramona.bolboaca13@gmail.com>
Date:   Fri Apr 5 07:53:09 2024 +0300

    iio:imu: adis16475: Fix sync mode setting
    
    commit 74a72baf204fd509bbe8b53eec35e39869d94341 upstream.
    
    Fix sync mode setting by applying the necessary shift bits.
    
    Fixes: fff7352bf7a3 ("iio: imu: Add support for adis16475")
    Signed-off-by: Ramona Gradinariu <ramona.bolboaca13@gmail.com>
    Reviewed-by: Nuno Sa <nuno.sa@analog.com>
    Link: https://lore.kernel.org/r/20240405045309.816328-2-ramona.bolboaca13@gmail.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iommu: mtk: fix module autoloading [+ + +]
Author: Krzysztof Kozlowski <krzk@kernel.org>
Date:   Wed Apr 10 18:41:09 2024 +0200

    iommu: mtk: fix module autoloading
    
    [ Upstream commit 7537e31df80cb58c27f3b6fef702534ea87a5957 ]
    
    Add MODULE_DEVICE_TABLE(), so modules could be properly autoloaded
    based on the alias from of_device_id table.
    
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Link: https://lore.kernel.org/r/20240410164109.233308-1-krzk@kernel.org
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: annotate data-races around cnf.disable_ipv6 [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Feb 28 13:54:26 2024 +0000

    ipv6: annotate data-races around cnf.disable_ipv6
    
    [ Upstream commit d289ab65b89c1d4d88417cb6c03e923f21f95fae ]
    
    disable_ipv6 is read locklessly, add appropriate READ_ONCE()
    and WRITE_ONCE() annotations.
    
    v2: do not preload net before rtnl_trylock() in
        addrconf_disable_ipv6() (Jiri)
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 4db783d68b9b ("ipv6: prevent NULL dereference in ip6_output()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: fib6_rules: avoid possible NULL dereference in fib6_rule_action() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue May 7 16:31:45 2024 +0000

    ipv6: fib6_rules: avoid possible NULL dereference in fib6_rule_action()
    
    [ Upstream commit d101291b2681e5ab938554e3e323f7a7ee33e3aa ]
    
    syzbot is able to trigger the following crash [1],
    caused by unsafe ip6_dst_idev() use.
    
    Indeed ip6_dst_idev() can return NULL, and must always be checked.
    
    [1]
    
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    CPU: 0 PID: 31648 Comm: syz-executor.0 Not tainted 6.9.0-rc4-next-20240417-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
     RIP: 0010:__fib6_rule_action net/ipv6/fib6_rules.c:237 [inline]
     RIP: 0010:fib6_rule_action+0x241/0x7b0 net/ipv6/fib6_rules.c:267
    Code: 02 00 00 49 8d 9f d8 00 00 00 48 89 d8 48 c1 e8 03 42 80 3c 20 00 74 08 48 89 df e8 f9 32 bf f7 48 8b 1b 48 89 d8 48 c1 e8 03 <42> 80 3c 20 00 74 08 48 89 df e8 e0 32 bf f7 4c 8b 03 48 89 ef 4c
    RSP: 0018:ffffc9000fc1f2f0 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: 1a772f98c8186700
    RDX: 0000000000000003 RSI: ffffffff8bcac4e0 RDI: ffffffff8c1f9760
    RBP: ffff8880673fb980 R08: ffffffff8fac15ef R09: 1ffffffff1f582bd
    R10: dffffc0000000000 R11: fffffbfff1f582be R12: dffffc0000000000
    R13: 0000000000000080 R14: ffff888076509000 R15: ffff88807a029a00
    FS:  00007f55e82ca6c0(0000) GS:ffff8880b9400000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000001b31d23000 CR3: 0000000022b66000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
      fib_rules_lookup+0x62c/0xdb0 net/core/fib_rules.c:317
      fib6_rule_lookup+0x1fd/0x790 net/ipv6/fib6_rules.c:108
      ip6_route_output_flags_noref net/ipv6/route.c:2637 [inline]
      ip6_route_output_flags+0x38e/0x610 net/ipv6/route.c:2649
      ip6_route_output include/net/ip6_route.h:93 [inline]
      ip6_dst_lookup_tail+0x189/0x11a0 net/ipv6/ip6_output.c:1120
      ip6_dst_lookup_flow+0xb9/0x180 net/ipv6/ip6_output.c:1250
      sctp_v6_get_dst+0x792/0x1e20 net/sctp/ipv6.c:326
      sctp_transport_route+0x12c/0x2e0 net/sctp/transport.c:455
      sctp_assoc_add_peer+0x614/0x15c0 net/sctp/associola.c:662
      sctp_connect_new_asoc+0x31d/0x6c0 net/sctp/socket.c:1099
      __sctp_connect+0x66d/0xe30 net/sctp/socket.c:1197
      sctp_connect net/sctp/socket.c:4819 [inline]
      sctp_inet_connect+0x149/0x1f0 net/sctp/socket.c:4834
      __sys_connect_file net/socket.c:2048 [inline]
      __sys_connect+0x2df/0x310 net/socket.c:2065
      __do_sys_connect net/socket.c:2075 [inline]
      __se_sys_connect net/socket.c:2072 [inline]
      __x64_sys_connect+0x7a/0x90 net/socket.c:2072
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 5e5f3f0f8013 ("[IPV6] ADDRCONF: Convert ipv6_get_saddr() to ipv6_dev_get_saddr().")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20240507163145.835254-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: prevent NULL dereference in ip6_output() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue May 7 16:18:42 2024 +0000

    ipv6: prevent NULL dereference in ip6_output()
    
    [ Upstream commit 4db783d68b9b39a411a96096c10828ff5dfada7a ]
    
    According to syzbot, there is a chance that ip6_dst_idev()
    returns NULL in ip6_output(). Most places in IPv6 stack
    deal with a NULL idev just fine, but not here.
    
    syzbot reported:
    
    general protection fault, probably for non-canonical address 0xdffffc00000000bc: 0000 [#1] PREEMPT SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x00000000000005e0-0x00000000000005e7]
    CPU: 0 PID: 9775 Comm: syz-executor.4 Not tainted 6.9.0-rc5-syzkaller-00157-g6a30653b604a #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
     RIP: 0010:ip6_output+0x231/0x3f0 net/ipv6/ip6_output.c:237
    Code: 3c 1e 00 49 89 df 74 08 4c 89 ef e8 19 58 db f7 48 8b 44 24 20 49 89 45 00 49 89 c5 48 8d 9d e0 05 00 00 48 89 d8 48 c1 e8 03 <42> 0f b6 04 38 84 c0 4c 8b 74 24 28 0f 85 61 01 00 00 8b 1b 31 ff
    RSP: 0018:ffffc9000927f0d8 EFLAGS: 00010202
    RAX: 00000000000000bc RBX: 00000000000005e0 RCX: 0000000000040000
    RDX: ffffc900131f9000 RSI: 0000000000004f47 RDI: 0000000000004f48
    RBP: 0000000000000000 R08: ffffffff8a1f0b9a R09: 1ffffffff1f51fad
    R10: dffffc0000000000 R11: fffffbfff1f51fae R12: ffff8880293ec8c0
    R13: ffff88805d7fc000 R14: 1ffff1100527d91a R15: dffffc0000000000
    FS:  00007f135c6856c0(0000) GS:ffff8880b9400000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000020000080 CR3: 0000000064096000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
      NF_HOOK include/linux/netfilter.h:314 [inline]
      ip6_xmit+0xefe/0x17f0 net/ipv6/ip6_output.c:358
      sctp_v6_xmit+0x9f2/0x13f0 net/sctp/ipv6.c:248
      sctp_packet_transmit+0x26ad/0x2ca0 net/sctp/output.c:653
      sctp_packet_singleton+0x22c/0x320 net/sctp/outqueue.c:783
      sctp_outq_flush_ctrl net/sctp/outqueue.c:914 [inline]
      sctp_outq_flush+0x6d5/0x3e20 net/sctp/outqueue.c:1212
      sctp_side_effects net/sctp/sm_sideeffect.c:1198 [inline]
      sctp_do_sm+0x59cc/0x60c0 net/sctp/sm_sideeffect.c:1169
      sctp_primitive_ASSOCIATE+0x95/0xc0 net/sctp/primitive.c:73
      __sctp_connect+0x9cd/0xe30 net/sctp/socket.c:1234
      sctp_connect net/sctp/socket.c:4819 [inline]
      sctp_inet_connect+0x149/0x1f0 net/sctp/socket.c:4834
      __sys_connect_file net/socket.c:2048 [inline]
      __sys_connect+0x2df/0x310 net/socket.c:2065
      __do_sys_connect net/socket.c:2075 [inline]
      __se_sys_connect net/socket.c:2072 [inline]
      __x64_sys_connect+0x7a/0x90 net/socket.c:2072
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 778d80be5269 ("ipv6: Add disable_ipv6 sysctl to disable IPv6 operaion on specific interface.")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Link: https://lore.kernel.org/r/20240507161842.773961-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kbuild: Disable KCSAN for autogenerated *.mod.c intermediaries [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Tue Mar 26 21:25:48 2024 +0100

    kbuild: Disable KCSAN for autogenerated *.mod.c intermediaries
    
    [ Upstream commit 54babdc0343fff2f32dfaafaaa9e42c4db278204 ]
    
    When KCSAN and CONSTRUCTORS are enabled, one can trigger the
    
      "Unpatched return thunk in use. This should not happen!"
    
    catch-all warning.
    
    Usually, when objtool runs on the .o objects, it does generate a section
    .return_sites which contains all offsets in the objects to the return
    thunks of the functions present there. Those return thunks then get
    patched at runtime by the alternatives.
    
    KCSAN and CONSTRUCTORS add this to the object file's .text.startup
    section:
    
      -------------------
      Disassembly of section .text.startup:
    
      ...
    
      0000000000000010 <_sub_I_00099_0>:
        10:   f3 0f 1e fa             endbr64
        14:   e8 00 00 00 00          call   19 <_sub_I_00099_0+0x9>
                              15: R_X86_64_PLT32      __tsan_init-0x4
        19:   e9 00 00 00 00          jmp    1e <__UNIQUE_ID___addressable_cryptd_alloc_aead349+0x6>
                              1a: R_X86_64_PLT32      __x86_return_thunk-0x4
      -------------------
    
    which, if it is built as a module goes through the intermediary stage of
    creating a <module>.mod.c file which, when translated, receives a second
    constructor:
    
      -------------------
      Disassembly of section .text.startup:
    
      0000000000000010 <_sub_I_00099_0>:
        10:   f3 0f 1e fa             endbr64
        14:   e8 00 00 00 00          call   19 <_sub_I_00099_0+0x9>
                              15: R_X86_64_PLT32      __tsan_init-0x4
        19:   e9 00 00 00 00          jmp    1e <_sub_I_00099_0+0xe>
                              1a: R_X86_64_PLT32      __x86_return_thunk-0x4
    
      ...
    
      0000000000000030 <_sub_I_00099_0>:
        30:   f3 0f 1e fa             endbr64
        34:   e8 00 00 00 00          call   39 <_sub_I_00099_0+0x9>
                              35: R_X86_64_PLT32      __tsan_init-0x4
        39:   e9 00 00 00 00          jmp    3e <__ksymtab_cryptd_alloc_ahash+0x2>
                              3a: R_X86_64_PLT32      __x86_return_thunk-0x4
      -------------------
    
    in the .ko file.
    
    Objtool has run already so that second constructor's return thunk cannot
    be added to the .return_sites section and thus the return thunk remains
    unpatched and the warning rightfully fires.
    
    Drop KCSAN flags from the mod.c generation stage as those constructors
    do not contain data races one would be interested about.
    
    Debugged together with David Kaplan <David.Kaplan@amd.com> and Nikolay
    Borisov <nik.borisov@suse.com>.
    
    Reported-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Closes: https://lore.kernel.org/r/0851a207-7143-417e-be31-8bf2b3afb57d@molgen.mpg.de
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Tested-by: Paul Menzel <pmenzel@molgen.mpg.de> # Dell XPS 13
    Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
    Reviewed-by: Marco Elver <elver@google.com>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kbuild: refactor host*_flags [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sat Jan 7 18:18:14 2023 +0900

    kbuild: refactor host*_flags
    
    [ Upstream commit 16169a47d5c36046041527faafb5a3f5c86701c6 ]
    
    Remove _host*_flags. No functional change is intended.
    
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Stable-dep-of: ded103c7eb23 ("kbuild: rust: force `alloc` extern to allow "empty" Rust files")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kbuild: rust: avoid creating temporary files [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Sun Jul 23 16:21:28 2023 +0200

    kbuild: rust: avoid creating temporary files
    
    [ Upstream commit df01b7cfcef08bf3fdcac2909d0e1910781d6bfd ]
    
    `rustc` outputs by default the temporary files (i.e. the ones saved
    by `-Csave-temps`, such as `*.rcgu*` files) in the current working
    directory when `-o` and `--out-dir` are not given (even if
    `--emit=x=path` is given, i.e. it does not use those for temporaries).
    
    Since out-of-tree modules are compiled from the `linux` tree,
    `rustc` then tries to create them there, which may not be accessible.
    
    Thus pass `--out-dir` explicitly, even if it is just for the temporary
    files.
    
    Similarly, do so for Rust host programs too.
    
    Reported-by: Raphael Nestler <raphael.nestler@gmail.com>
    Closes: https://github.com/Rust-for-Linux/linux/issues/1015
    Reported-by: Andrea Righi <andrea.righi@canonical.com>
    Tested-by: Raphael Nestler <raphael.nestler@gmail.com> # non-hostprogs
    Tested-by: Andrea Righi <andrea.righi@canonical.com> # non-hostprogs
    Fixes: 295d8398c67e ("kbuild: specify output names separately for each emission type from rustc")
    Cc: stable@vger.kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kbuild: specify output names separately for each emission type from rustc [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sat Jan 7 18:18:15 2023 +0900

    kbuild: specify output names separately for each emission type from rustc
    
    [ Upstream commit 295d8398c67e314d99bb070f38883f83fe94a97a ]
    
    In Kbuild, two different rules must not write to the same file, but
    it happens when compiling rust source files.
    
    For example, set CONFIG_SAMPLE_RUST_MINIMAL=m and run the following:
    
      $ make -j$(nproc) samples/rust/rust_minimal.o samples/rust/rust_minimal.rsi \
                        samples/rust/rust_minimal.s samples/rust/rust_minimal.ll
        [snip]
        RUSTC [M] samples/rust/rust_minimal.o
        RUSTC [M] samples/rust/rust_minimal.rsi
        RUSTC [M] samples/rust/rust_minimal.s
        RUSTC [M] samples/rust/rust_minimal.ll
      mv: cannot stat 'samples/rust/rust_minimal.d': No such file or directory
      make[3]: *** [scripts/Makefile.build:334: samples/rust/rust_minimal.ll] Error 1
      make[3]: *** Waiting for unfinished jobs....
      mv: cannot stat 'samples/rust/rust_minimal.d': No such file or directory
      make[3]: *** [scripts/Makefile.build:309: samples/rust/rust_minimal.o] Error 1
      mv: cannot stat 'samples/rust/rust_minimal.d': No such file or directory
      make[3]: *** [scripts/Makefile.build:326: samples/rust/rust_minimal.s] Error 1
      make[2]: *** [scripts/Makefile.build:504: samples/rust] Error 2
      make[1]: *** [scripts/Makefile.build:504: samples] Error 2
      make: *** [Makefile:2008: .] Error 2
    
    The reason for the error is that 4 threads running in parallel renames
    the same file, samples/rust/rust_minimal.d.
    
    This does not happen when compiling C or assembly files because
    -Wp,-MMD,$(depfile) explicitly specifies the dependency filepath.
    $(depfile) is a unique path for each target.
    
    Currently, rustc is only given --out-dir and --emit=<list-of-types>
    So, all the rust build rules output the dep-info into the default
    <CRATE_NAME>.d, which causes the path conflict.
    
    Fortunately, the --emit option is able to specify the output path
    individually, with the form --emit=<type>=<path>.
    
    Add --emit=dep-info=$(depfile) to the common part. Also, remove the
    redundant --out-dir because the output path is specified for each type.
    
    The code gets much cleaner because we do not need to rename *.d files.
    
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
    Stable-dep-of: ded103c7eb23 ("kbuild: rust: force `alloc` extern to allow "empty" Rust files")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
keys: Fix overwrite of key expiration on instantiation [+ + +]
Author: Silvio Gissi <sifonsec@amazon.com>
Date:   Fri Mar 15 15:05:39 2024 -0400

    keys: Fix overwrite of key expiration on instantiation
    
    commit 9da27fb65a14c18efd4473e2e82b76b53ba60252 upstream.
    
    The expiry time of a key is unconditionally overwritten during
    instantiation, defaulting to turn it permanent. This causes a problem
    for DNS resolution as the expiration set by user-space is overwritten to
    TIME64_MAX, disabling further DNS updates. Fix this by restoring the
    condition that key_set_expiry is only called when the pre-parser sets a
    specific expiry.
    
    Fixes: 39299bdd2546 ("keys, dns: Allow key types (eg. DNS) to be reclaimed immediately on expiry")
    Signed-off-by: Silvio Gissi <sifonsec@amazon.com>
    cc: David Howells <dhowells@redhat.com>
    cc: Hazem Mohamed Abuelfotoh <abuehaze@amazon.com>
    cc: linux-afs@lists.infradead.org
    cc: linux-cifs@vger.kernel.org
    cc: keyrings@vger.kernel.org
    cc: netdev@vger.kernel.org
    cc: stable@vger.kernel.org
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kmsan: compiler_types: declare __no_sanitize_or_inline [+ + +]
Author: Alexander Potapenko <glider@google.com>
Date:   Fri Apr 26 11:16:22 2024 +0200

    kmsan: compiler_types: declare __no_sanitize_or_inline
    
    commit 90d1f14cbb9ddbfc532e2da13bf6e0ed8320e792 upstream.
    
    It turned out that KMSAN instruments READ_ONCE_NOCHECK(), resulting in
    false positive reports, because __no_sanitize_or_inline enforced inlining.
    
    Properly declare __no_sanitize_or_inline under __SANITIZE_MEMORY__, so
    that it does not __always_inline the annotated function.
    
    Link: https://lkml.kernel.org/r/20240426091622.3846771-1-glider@google.com
    Fixes: 5de0ce85f5a4 ("kmsan: mark noinstr as __no_sanitize_memory")
    Signed-off-by: Alexander Potapenko <glider@google.com>
    Reported-by: syzbot+355c5bb8c1445c871ee8@syzkaller.appspotmail.com
    Link: https://lkml.kernel.org/r/000000000000826ac1061675b0e3@google.com
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Marco Elver <elver@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ksmbd: avoid to send duplicate lease break notifications [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed May 1 21:44:02 2024 +0900

    ksmbd: avoid to send duplicate lease break notifications
    
    commit 97c2ec64667bacc49881d2b2dd9afd4d1c3fbaeb upstream.
    
    This patch fixes generic/011 when enable smb2 leases.
    
    if ksmbd sends multiple notifications for a file, cifs increments
    the reference count of the file but it does not decrement the count by
    the failure of queue_work.
    So even if the file is closed, cifs does not send a SMB2_CLOSE request.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: do not grant v2 lease if parent lease key and epoch are not set [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed May 1 21:58:15 2024 +0900

    ksmbd: do not grant v2 lease if parent lease key and epoch are not set
    
    commit 691aae4f36f9825df6781da4399a1e718951085a upstream.
    
    This patch fix xfstests generic/070 test with smb2 leases = yes.
    
    cifs.ko doesn't set parent lease key and epoch in create context v2 lease.
    ksmbd suppose that parent lease and epoch are vaild if data length is
    v2 lease context size and handle directory lease using this values.
    ksmbd should hanle it as v1 lease not v2 lease if parent lease key and
    epoch are not set in create context v2 lease.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: off ipv6only for both ipv4/ipv6 binding [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed May 1 21:41:50 2024 +0900

    ksmbd: off ipv6only for both ipv4/ipv6 binding
    
    commit cc00bc83f26eb8f2d8d9f56b949b62fd774d8432 upstream.
    
    ΕΛΕΝΗ reported that ksmbd binds to the IPV6 wildcard (::) by default for
    ipv4 and ipv6 binding. So IPV4 connections are successful only when
    the Linux system parameter bindv6only is set to 0 [default value].
    If this parameter is set to 1, then the ipv6 wildcard only represents
    any IPV6 address. Samba creates different sockets for ipv4 and ipv6
    by default. This patch off sk_ipv6only to support IPV4/IPV6 connections
    without creating two sockets.
    
    Cc: stable@vger.kernel.org
    Reported-by: ΕΛΕΝΗ ΤΖΑΒΕΛΛΑ <helentzavellas@yahoo.gr>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: vgic-v2: Check for non-NULL vCPU in vgic_v2_parse_attr() [+ + +]
Author: Oliver Upton <oliver.upton@linux.dev>
Date:   Wed Apr 24 17:39:58 2024 +0000

    KVM: arm64: vgic-v2: Check for non-NULL vCPU in vgic_v2_parse_attr()
    
    [ Upstream commit 6ddb4f372fc63210034b903d96ebbeb3c7195adb ]
    
    vgic_v2_parse_attr() is responsible for finding the vCPU that matches
    the user-provided CPUID, which (of course) may not be valid. If the ID
    is invalid, kvm_get_vcpu_by_id() returns NULL, which isn't handled
    gracefully.
    
    Similar to the GICv3 uaccess flow, check that kvm_get_vcpu_by_id()
    actually returns something and fail the ioctl if not.
    
    Cc: stable@vger.kernel.org
    Fixes: 7d450e282171 ("KVM: arm/arm64: vgic-new: Add userland access to VGIC dist registers")
    Reported-by: Alexander Potapenko <glider@google.com>
    Tested-by: Alexander Potapenko <glider@google.com>
    Reviewed-by: Alexander Potapenko <glider@google.com>
    Reviewed-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20240424173959.3776798-2-oliver.upton@linux.dev
    Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: arm64: vgic-v2: Use cpuid from userspace as vcpu_id [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Wed Sep 27 10:09:04 2023 +0100

    KVM: arm64: vgic-v2: Use cpuid from userspace as vcpu_id
    
    [ Upstream commit 4e7728c81a54b17bd33be402ac140bc11bb0c4f4 ]
    
    When parsing a GICv2 attribute that contains a cpuid, handle this
    as the vcpu_id, not a vcpu_idx, as userspace cannot really know
    the mapping between the two. For this, use kvm_get_vcpu_by_id()
    instead of kvm_get_vcpu().
    
    Take this opportunity to get rid of the pointless check against
    online_vcpus, which doesn't make much sense either, and switch
    to FIELD_GET as a way to extract the vcpu_id.
    
    Reviewed-by: Zenghui Yu <yuzenghui@huawei.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230927090911.3355209-5-maz@kernel.org
    Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
    Stable-dep-of: 6ddb4f372fc6 ("KVM: arm64: vgic-v2: Check for non-NULL vCPU in vgic_v2_parse_attr()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 6.1.91 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri May 17 11:56:25 2024 +0200

    Linux 6.1.91
    
    Link: https://lore.kernel.org/r/20240514101020.320785513@linuxfoundation.org
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Allen Pais <apais@linux.microsoft.com>
    Tested-by: Yann Sionneau <ysionneau@kalrayinc.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20240515082456.986812732@linuxfoundation.org
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Conor Dooley <conor.dooley@microchip.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Yann Sionneau<ysionneau@kalrayinc.com>
    Link: https://lore.kernel.org/r/20240516091232.619851361@linuxfoundation.org
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Tested-by: Allen Pais <apais@linux.microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
MAINTAINERS: add leah to 6.1 MAINTAINERS file [+ + +]
Author: Leah Rumancik <leah.rumancik@gmail.com>
Date:   Thu May 9 13:17:35 2024 -0700

    MAINTAINERS: add leah to 6.1 MAINTAINERS file
    
    I've been trying to get backports rolling to 6.1.y. Update MAINTAINERS
    file so backports requests / questions can get routed appropriately.
    
    Signed-off-by: Leah Rumancik <leah.rumancik@gmail.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md: fix kmemleak of rdev->serial [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Thu Feb 8 16:55:56 2024 +0800

    md: fix kmemleak of rdev->serial
    
    commit 6cf350658736681b9d6b0b6e58c5c76b235bb4c4 upstream.
    
    If kobject_add() is fail in bind_rdev_to_array(), 'rdev->serial' will be
    alloc not be freed, and kmemleak occurs.
    
    unreferenced object 0xffff88815a350000 (size 49152):
      comm "mdadm", pid 789, jiffies 4294716910
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace (crc f773277a):
        [<0000000058b0a453>] kmemleak_alloc+0x61/0xe0
        [<00000000366adf14>] __kmalloc_large_node+0x15e/0x270
        [<000000002e82961b>] __kmalloc_node.cold+0x11/0x7f
        [<00000000f206d60a>] kvmalloc_node+0x74/0x150
        [<0000000034bf3363>] rdev_init_serial+0x67/0x170
        [<0000000010e08fe9>] mddev_create_serial_pool+0x62/0x220
        [<00000000c3837bf0>] bind_rdev_to_array+0x2af/0x630
        [<0000000073c28560>] md_add_new_disk+0x400/0x9f0
        [<00000000770e30ff>] md_ioctl+0x15bf/0x1c10
        [<000000006cfab718>] blkdev_ioctl+0x191/0x3f0
        [<0000000085086a11>] vfs_ioctl+0x22/0x60
        [<0000000018b656fe>] __x64_sys_ioctl+0xba/0xe0
        [<00000000e54e675e>] do_syscall_64+0x71/0x150
        [<000000008b0ad622>] entry_SYSCALL_64_after_hwframe+0x6c/0x74
    
    Fixes: 963c555e75b0 ("md: introduce mddev_create/destroy_wb_pool for the change of member device")
    Signed-off-by: Li Nan <linan122@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20240208085556.2412922-1-linan666@huaweicloud.com
    [ mddev_destroy_serial_pool third parameter was removed in mainline,
      where there is no need to suspend within this function anymore. ]
    Signed-off-by: Jeremy Bongio <jbongio@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mei: me: add lunar lake point M DID [+ + +]
Author: Alexander Usyskin <alexander.usyskin@intel.com>
Date:   Sun Apr 21 16:56:31 2024 +0300

    mei: me: add lunar lake point M DID
    
    commit 4108a30f1097eead0f6bd5d885e6bf093b4d460f upstream.
    
    Add Lunar (Point) Lake M device id.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
    Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
    Link: https://lore.kernel.org/r/20240421135631.223362-1-tomas.winkler@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
memblock tests: fix undefined reference to `BIT' [+ + +]
Author: Wei Yang <richard.weiyang@gmail.com>
Date:   Tue Apr 2 13:27:01 2024 +0000

    memblock tests: fix undefined reference to `BIT'
    
    [ Upstream commit 592447f6cb3c20d606d6c5d8e6af68e99707b786 ]
    
    commit 772dd0342727 ("mm: enumerate all gfp flags") define gfp flags
    with the help of BIT, while gfp_types.h doesn't include header file for
    the definition. This through an error on building memblock tests.
    
    Let's include linux/bits.h to fix it.
    
    Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
    CC: Suren Baghdasaryan <surenb@google.com>
    CC: Michal Hocko <mhocko@suse.com>
    Link: https://lore.kernel.org/r/20240402132701.29744-4-richard.weiyang@gmail.com
    Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

memblock tests: fix undefined reference to `early_pfn_to_nid' [+ + +]
Author: Wei Yang <richard.weiyang@gmail.com>
Date:   Tue Apr 2 13:26:59 2024 +0000

    memblock tests: fix undefined reference to `early_pfn_to_nid'
    
    [ Upstream commit 7d8ed162e6a92268d4b2b84d364a931216102c8e ]
    
    commit 6a9531c3a880 ("memblock: fix crash when reserved memory is not
    added to memory") introduce the usage of early_pfn_to_nid, which is not
    defined in memblock tests.
    
    The original definition of early_pfn_to_nid is defined in mm.h, so let
    add this in the corresponding mm.h.
    
    Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
    CC: Yajun Deng <yajun.deng@linux.dev>
    CC: Mike Rapoport <rppt@kernel.org>
    Link: https://lore.kernel.org/r/20240402132701.29744-2-richard.weiyang@gmail.com
    Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

memblock tests: fix undefined reference to `panic' [+ + +]
Author: Wei Yang <richard.weiyang@gmail.com>
Date:   Tue Apr 2 13:27:00 2024 +0000

    memblock tests: fix undefined reference to `panic'
    
    [ Upstream commit e0f5a8e74be88f2476e58b25d3b49a9521bdc4ec ]
    
    commit e96c6b8f212a ("memblock: report failures when memblock_can_resize
    is not set") introduced the usage of panic, which is not defined in
    memblock test.
    
    Let's define it directly in panic.h to fix it.
    
    Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
    CC: Song Shuai <songshuaishuai@tinylab.org>
    CC: Mike Rapoport <rppt@kernel.org>
    Link: https://lore.kernel.org/r/20240402132701.29744-3-richard.weiyang@gmail.com
    Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: scall: Save thread_info.syscall unconditionally on entry [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Thu Mar 28 14:27:56 2024 +0000

    MIPS: scall: Save thread_info.syscall unconditionally on entry
    
    [ Upstream commit 4370b673ccf240bf7587b0cb8e6726a5ccaf1f17 ]
    
    thread_info.syscall is used by syscall_get_nr to supply syscall nr
    over a thread stack frame.
    
    Previously, thread_info.syscall is only saved at syscall_trace_enter
    when syscall tracing is enabled. However rest of the kernel code do
    expect syscall_get_nr to be available without syscall tracing. The
    previous design breaks collect_syscall.
    
    Move saving process to syscall entry to fix it.
    
    Reported-by: Xi Ruoyao <xry111@xry111.site>
    Link: https://github.com/util-linux/util-linux/issues/2867
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm,swapops: update check in is_pfn_swap_entry for hwpoison entries [+ + +]
Author: Oscar Salvador <osalvador@suse.de>
Date:   Sun Apr 7 15:05:37 2024 +0200

    mm,swapops: update check in is_pfn_swap_entry for hwpoison entries
    
    commit 07a57a338adb6ec9e766d6a6790f76527f45ceb5 upstream.
    
    Tony reported that the Machine check recovery was broken in v6.9-rc1, as
    he was hitting a VM_BUG_ON when injecting uncorrectable memory errors to
    DRAM.
    
    After some more digging and debugging on his side, he realized that this
    went back to v6.1, with the introduction of 'commit 0d206b5d2e0d
    ("mm/swap: add swp_offset_pfn() to fetch PFN from swap entry")'.  That
    commit, among other things, introduced swp_offset_pfn(), replacing
    hwpoison_entry_to_pfn() in its favour.
    
    The patch also introduced a VM_BUG_ON() check for is_pfn_swap_entry(), but
    is_pfn_swap_entry() never got updated to cover hwpoison entries, which
    means that we would hit the VM_BUG_ON whenever we would call
    swp_offset_pfn() for such entries on environments with CONFIG_DEBUG_VM
    set.  Fix this by updating the check to cover hwpoison entries as well,
    and update the comment while we are it.
    
    Link: https://lkml.kernel.org/r/20240407130537.16977-1-osalvador@suse.de
    Fixes: 0d206b5d2e0d ("mm/swap: add swp_offset_pfn() to fetch PFN from swap entry")
    Signed-off-by: Oscar Salvador <osalvador@suse.de>
    Reported-by: Tony Luck <tony.luck@intel.com>
    Closes: https://lore.kernel.org/all/Zg8kLSl2yAlA3o5D@agluck-desk3/
    Tested-by: Tony Luck <tony.luck@intel.com>
    Reviewed-by: Peter Xu <peterx@redhat.com>
    Reviewed-by: David Hildenbrand <david@redhat.com>
    Acked-by: Miaohe Lin <linmiaohe@huawei.com>
    Cc: <stable@vger.kernel.org>    [6.1.x]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/hugetlb: add folio support to hugetlb specific flag macros [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Thu Sep 22 10:42:03 2022 -0500

    mm/hugetlb: add folio support to hugetlb specific flag macros
    
    [ Upstream commit d03c376d9066532551dc56837c7c5490e4fcbbfe ]
    
    Patch series "begin converting hugetlb code to folios", v4.
    
    This patch series starts the conversion of the hugetlb code to operate on
    struct folios rather than struct pages.  This removes the ambiguitiy of
    whether functions are operating on head pages, tail pages of compound
    pages, or base pages.
    
    This series passes the linux test project hugetlb test cases.
    
    Patch 1 adds hugeltb specific page macros that can operate on folios.
    
    Patch 2 adds the private field of the first tail page to struct page.  For
    32-bit, _private_1 alinging with page[1].private was confirmed by using
    pahole.
    
    Patch 3 introduces hugetlb subpool helper functions which operate on
    struct folios. These patches were tested using the hugepage-mmap.c
    selftest along with the migratepages command.
    
    Patch 4 converts hugetlb_delete_from_page_cache() to use folios.
    
    Patch 5 adds a folio_hstate() function to get hstate information from a
    folio and adds a user of folio_hstate().
    
    Bpftrace was used to track time spent in the free_huge_pages function
    during the ltp test cases as it is a caller of the hugetlb subpool
    functions. From the histogram, the performance is similar before and
    after the patch series.
    
    Time spent in 'free_huge_page'
    
    6.0.0-rc2.master.20220823
    @nsecs:
    [256, 512)         14770 |@@@@@@@@@@@@@@@@@@@@@@@@@@@
                             |@@@@@@@@@@@@@@@@@@@@@@@@@                           |
    [512, 1K)            155 |                                                    |
    [1K, 2K)             169 |                                                    |
    [2K, 4K)              50 |                                                    |
    [4K, 8K)              14 |                                                    |
    [8K, 16K)              3 |                                                    |
    [16K, 32K)             3 |                                                    |
    
    6.0.0-rc2.master.20220823 + patch series
    @nsecs:
    [256, 512)         13678 |@@@@@@@@@@@@@@@@@@@@@@@@@@@                         |
                             |@@@@@@@@@@@@@@@@@@@@@@@@@                           |
    [512, 1K)            142 |                                                    |
    [1K, 2K)             199 |                                                    |
    [2K, 4K)              44 |                                                    |
    [4K, 8K)              13 |                                                    |
    [8K, 16K)              4 |                                                    |
    [16K, 32K)             1 |                                                    |
    
    This patch (of 5):
    
    Allow the macros which test, set, and clear hugetlb specific page flags to
    take a hugetlb folio as an input.  The macrros are generated as
    folio_{test, set, clear}_hugetlb_{restore_reserve, migratable, temporary,
    freed, vmemmap_optimized, raw_hwp_unreliable}.
    
    Link: https://lkml.kernel.org/r/20220922154207.1575343-1-sidhartha.kumar@oracle.com
    Link: https://lkml.kernel.org/r/20220922154207.1575343-2-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: Muchun Song <songmuchun@bytedance.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Colin Cross <ccross@google.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: kernel test robot <lkp@intel.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: William Kucharski <william.kucharski@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm/hugetlb: add folio_hstate() [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Thu Sep 22 10:42:07 2022 -0500

    mm/hugetlb: add folio_hstate()
    
    [ Upstream commit e51da3a9b6c2f67879880259a25c51dbda01c462 ]
    
    Helper function to retrieve hstate information from a hugetlb folio.
    
    Link: https://lkml.kernel.org/r/20220922154207.1575343-6-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Reported-by: kernel test robot <lkp@intel.com>
    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Colin Cross <ccross@google.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: William Kucharski <william.kucharski@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm/hugetlb: add hugetlb_folio_subpool() helpers [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Thu Sep 22 10:42:05 2022 -0500

    mm/hugetlb: add hugetlb_folio_subpool() helpers
    
    [ Upstream commit 149562f7509404c382c32c3fa8a6ba356135e5cf ]
    
    Allow hugetlbfs_migrate_folio to check and read subpool information by
    passing in a folio.
    
    Link: https://lkml.kernel.org/r/20220922154207.1575343-4-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Colin Cross <ccross@google.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: kernel test robot <lkp@intel.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: William Kucharski <william.kucharski@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm/hugetlb: convert free_huge_page to folios [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Tue Nov 1 15:30:56 2022 -0700

    mm/hugetlb: convert free_huge_page to folios
    
    [ Upstream commit 0356c4b96f6890dd61af4c902f681764f4bdba09 ]
    
    Use folios inside free_huge_page(), this is in preparation for converting
    hugetlb_cgroup_uncharge_page() to take in a folio.
    
    Link: https://lkml.kernel.org/r/20221101223059.460937-7-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: Muchun Song <songmuchun@bytedance.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Bui Quang Minh <minhquangbui99@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Mina Almasry <almasrymina@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm/hugetlb: fix DEBUG_LOCKS_WARN_ON(1) when dissolve_free_hugetlb_folio() [+ + +]
Author: Miaohe Lin <linmiaohe@huawei.com>
Date:   Fri Apr 19 16:58:19 2024 +0800

    mm/hugetlb: fix DEBUG_LOCKS_WARN_ON(1) when dissolve_free_hugetlb_folio()
    
    commit 52ccdde16b6540abe43b6f8d8e1e1ec90b0983af upstream.
    
    When I did memory failure tests recently, below warning occurs:
    
    DEBUG_LOCKS_WARN_ON(1)
    WARNING: CPU: 8 PID: 1011 at kernel/locking/lockdep.c:232 __lock_acquire+0xccb/0x1ca0
    Modules linked in: mce_inject hwpoison_inject
    CPU: 8 PID: 1011 Comm: bash Kdump: loaded Not tainted 6.9.0-rc3-next-20240410-00012-gdb69f219f4be #3
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
    RIP: 0010:__lock_acquire+0xccb/0x1ca0
    RSP: 0018:ffffa7a1c7fe3bd0 EFLAGS: 00000082
    RAX: 0000000000000000 RBX: eb851eb853975fcf RCX: ffffa1ce5fc1c9c8
    RDX: 00000000ffffffd8 RSI: 0000000000000027 RDI: ffffa1ce5fc1c9c0
    RBP: ffffa1c6865d3280 R08: ffffffffb0f570a8 R09: 0000000000009ffb
    R10: 0000000000000286 R11: ffffffffb0f2ad50 R12: ffffa1c6865d3d10
    R13: ffffa1c6865d3c70 R14: 0000000000000000 R15: 0000000000000004
    FS:  00007ff9f32aa740(0000) GS:ffffa1ce5fc00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ff9f3134ba0 CR3: 00000008484e4000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     lock_acquire+0xbe/0x2d0
     _raw_spin_lock_irqsave+0x3a/0x60
     hugepage_subpool_put_pages.part.0+0xe/0xc0
     free_huge_folio+0x253/0x3f0
     dissolve_free_huge_page+0x147/0x210
     __page_handle_poison+0x9/0x70
     memory_failure+0x4e6/0x8c0
     hard_offline_page_store+0x55/0xa0
     kernfs_fop_write_iter+0x12c/0x1d0
     vfs_write+0x380/0x540
     ksys_write+0x64/0xe0
     do_syscall_64+0xbc/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7ff9f3114887
    RSP: 002b:00007ffecbacb458 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 000000000000000c RCX: 00007ff9f3114887
    RDX: 000000000000000c RSI: 0000564494164e10 RDI: 0000000000000001
    RBP: 0000564494164e10 R08: 00007ff9f31d1460 R09: 000000007fffffff
    R10: 0000000000000000 R11: 0000000000000246 R12: 000000000000000c
    R13: 00007ff9f321b780 R14: 00007ff9f3217600 R15: 00007ff9f3216a00
     </TASK>
    Kernel panic - not syncing: kernel: panic_on_warn set ...
    CPU: 8 PID: 1011 Comm: bash Kdump: loaded Not tainted 6.9.0-rc3-next-20240410-00012-gdb69f219f4be #3
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     panic+0x326/0x350
     check_panic_on_warn+0x4f/0x50
     __warn+0x98/0x190
     report_bug+0x18e/0x1a0
     handle_bug+0x3d/0x70
     exc_invalid_op+0x18/0x70
     asm_exc_invalid_op+0x1a/0x20
    RIP: 0010:__lock_acquire+0xccb/0x1ca0
    RSP: 0018:ffffa7a1c7fe3bd0 EFLAGS: 00000082
    RAX: 0000000000000000 RBX: eb851eb853975fcf RCX: ffffa1ce5fc1c9c8
    RDX: 00000000ffffffd8 RSI: 0000000000000027 RDI: ffffa1ce5fc1c9c0
    RBP: ffffa1c6865d3280 R08: ffffffffb0f570a8 R09: 0000000000009ffb
    R10: 0000000000000286 R11: ffffffffb0f2ad50 R12: ffffa1c6865d3d10
    R13: ffffa1c6865d3c70 R14: 0000000000000000 R15: 0000000000000004
     lock_acquire+0xbe/0x2d0
     _raw_spin_lock_irqsave+0x3a/0x60
     hugepage_subpool_put_pages.part.0+0xe/0xc0
     free_huge_folio+0x253/0x3f0
     dissolve_free_huge_page+0x147/0x210
     __page_handle_poison+0x9/0x70
     memory_failure+0x4e6/0x8c0
     hard_offline_page_store+0x55/0xa0
     kernfs_fop_write_iter+0x12c/0x1d0
     vfs_write+0x380/0x540
     ksys_write+0x64/0xe0
     do_syscall_64+0xbc/0x1d0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7ff9f3114887
    RSP: 002b:00007ffecbacb458 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 000000000000000c RCX: 00007ff9f3114887
    RDX: 000000000000000c RSI: 0000564494164e10 RDI: 0000000000000001
    RBP: 0000564494164e10 R08: 00007ff9f31d1460 R09: 000000007fffffff
    R10: 0000000000000000 R11: 0000000000000246 R12: 000000000000000c
    R13: 00007ff9f321b780 R14: 00007ff9f3217600 R15: 00007ff9f3216a00
     </TASK>
    
    After git bisecting and digging into the code, I believe the root cause is
    that _deferred_list field of folio is unioned with _hugetlb_subpool field.
    In __update_and_free_hugetlb_folio(), folio->_deferred_list is
    initialized leading to corrupted folio->_hugetlb_subpool when folio is
    hugetlb.  Later free_huge_folio() will use _hugetlb_subpool and above
    warning happens.
    
    But it is assumed hugetlb flag must have been cleared when calling
    folio_put() in update_and_free_hugetlb_folio().  This assumption is broken
    due to below race:
    
    CPU1                                    CPU2
    dissolve_free_huge_page                 update_and_free_pages_bulk
     update_and_free_hugetlb_folio           hugetlb_vmemmap_restore_folios
                                              folio_clear_hugetlb_vmemmap_optimized
      clear_flag = folio_test_hugetlb_vmemmap_optimized
      if (clear_flag) <-- False, it's already cleared.
       __folio_clear_hugetlb(folio) <-- Hugetlb is not cleared.
      folio_put
       free_huge_folio <-- free_the_page is expected.
                                             list_for_each_entry()
                                              __folio_clear_hugetlb <-- Too late.
    
    Fix this issue by checking whether folio is hugetlb directly instead of
    checking clear_flag to close the race window.
    
    Link: https://lkml.kernel.org/r/20240419085819.1901645-1-linmiaohe@huawei.com
    Fixes: 32c877191e02 ("hugetlb: do not clear hugetlb dtor until allocating vmemmap")
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Reviewed-by: Oscar Salvador <osalvador@suse.de>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/hugetlb: fix missing hugetlb_lock for resv uncharge [+ + +]
Author: Peter Xu <peterx@redhat.com>
Date:   Wed Apr 17 17:18:35 2024 -0400

    mm/hugetlb: fix missing hugetlb_lock for resv uncharge
    
    [ Upstream commit b76b46902c2d0395488c8412e1116c2486cdfcb2 ]
    
    There is a recent report on UFFDIO_COPY over hugetlb:
    
    https://lore.kernel.org/all/000000000000ee06de0616177560@google.com/
    
    350:    lockdep_assert_held(&hugetlb_lock);
    
    Should be an issue in hugetlb but triggered in an userfault context, where
    it goes into the unlikely path where two threads modifying the resv map
    together.  Mike has a fix in that path for resv uncharge but it looks like
    the locking criteria was overlooked: hugetlb_cgroup_uncharge_folio_rsvd()
    will update the cgroup pointer, so it requires to be called with the lock
    held.
    
    Link: https://lkml.kernel.org/r/20240417211836.2742593-3-peterx@redhat.com
    Fixes: 79aa925bf239 ("hugetlb_cgroup: fix reservation accounting")
    Signed-off-by: Peter Xu <peterx@redhat.com>
    Reported-by: syzbot+4b8077a5fccc61c385a1@syzkaller.appspotmail.com
    Reviewed-by: Mina Almasry <almasrymina@google.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/hugetlb_cgroup: convert __set_hugetlb_cgroup() to folios [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Tue Nov 1 15:30:51 2022 -0700

    mm/hugetlb_cgroup: convert __set_hugetlb_cgroup() to folios
    
    [ Upstream commit a098c977722ca27d3b4bfeb966767af3cce45f85 ]
    
    Patch series "convert hugetlb_cgroup helper functions to folios", v2.
    
    This patch series continues the conversion of hugetlb code from being
    managed in pages to folios by converting many of the hugetlb_cgroup helper
    functions to use folios.  This allows the core hugetlb functions to pass
    in a folio to these helper functions.
    
    This patch (of 9);
    
    Change __set_hugetlb_cgroup() to use folios so it is explicit that the
    function operates on a head page.
    
    Link: https://lkml.kernel.org/r/20221101223059.460937-1-sidhartha.kumar@oracle.com
    Link: https://lkml.kernel.org/r/20221101223059.460937-2-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: Muchun Song <songmuchun@bytedance.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Bui Quang Minh <minhquangbui99@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Mina Almasry <almasrymina@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm/hugetlb_cgroup: convert hugetlb_cgroup_from_page() to folios [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Tue Nov 1 15:30:52 2022 -0700

    mm/hugetlb_cgroup: convert hugetlb_cgroup_from_page() to folios
    
    [ Upstream commit f074732d599e19a2a5b12e54743ad5eaccbe6550 ]
    
    Introduce folios in __remove_hugetlb_page() by converting
    hugetlb_cgroup_from_page() to use folios.
    
    Also gets rid of unsed hugetlb_cgroup_from_page_resv() function.
    
    Link: https://lkml.kernel.org/r/20221101223059.460937-3-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Reviewed-by: Muchun Song <songmuchun@bytedance.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Bui Quang Minh <minhquangbui99@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Mina Almasry <almasrymina@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm/hugetlb_cgroup: convert hugetlb_cgroup_uncharge_page() to folios [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Tue Nov 1 15:30:57 2022 -0700

    mm/hugetlb_cgroup: convert hugetlb_cgroup_uncharge_page() to folios
    
    [ Upstream commit d4ab0316cc33aeedf6dcb1c2c25e097a25766132 ]
    
    Continue to use a folio inside free_huge_page() by converting
    hugetlb_cgroup_uncharge_page*() to folios.
    
    Link: https://lkml.kernel.org/r/20221101223059.460937-8-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: Muchun Song <songmuchun@bytedance.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Bui Quang Minh <minhquangbui99@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Mina Almasry <almasrymina@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/slab: make __free(kfree) accept error pointers [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Sun Apr 28 17:26:44 2024 +0300

    mm/slab: make __free(kfree) accept error pointers
    
    commit cd7eb8f83fcf258f71e293f7fc52a70be8ed0128 upstream.
    
    Currently, if an automatically freed allocation is an error pointer that
    will lead to a crash.  An example of this is in wm831x_gpio_dbg_show().
    
       171  char *label __free(kfree) = gpiochip_dup_line_label(chip, i);
       172  if (IS_ERR(label)) {
       173          dev_err(wm831x->dev, "Failed to duplicate label\n");
       174          continue;
       175  }
    
    The auto clean up function should check for error pointers as well,
    otherwise we're going to keep hitting issues like this.
    
    Fixes: 54da6a092431 ("locking: Introduce __cleanup() based infrastructure")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Acked-by: David Rientjes <rientjes@google.com>
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: add private field of first tail to struct page and struct folio [+ + +]
Author: Sidhartha Kumar <sidhartha.kumar@oracle.com>
Date:   Thu Sep 22 10:42:04 2022 -0500

    mm: add private field of first tail to struct page and struct folio
    
    [ Upstream commit d340625f4849ab5dbfebbc7d84709fbfcd39e52f ]
    
    Allow struct folio to store hugetlb metadata that is contained in the
    private field of the first tail page.  On 32-bit, _private_1 aligns with
    page[1].private.
    
    Link: https://lkml.kernel.org/r/20220922154207.1575343-3-sidhartha.kumar@oracle.com
    Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Acked-by: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Colin Cross <ccross@google.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: kernel test robot <lkp@intel.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: William Kucharski <william.kucharski@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b76b46902c2d ("mm/hugetlb: fix missing hugetlb_lock for resv uncharge")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm: use memalloc_nofs_save() in page_cache_ra_order() [+ + +]
Author: Kefeng Wang <wangkefeng.wang@huawei.com>
Date:   Fri Apr 26 19:29:38 2024 +0800

    mm: use memalloc_nofs_save() in page_cache_ra_order()
    
    commit 30153e4466647a17eebfced13eede5cbe4290e69 upstream.
    
    See commit f2c817bed58d ("mm: use memalloc_nofs_save in readahead path"),
    ensure that page_cache_ra_order() do not attempt to reclaim file-backed
    pages too, or it leads to a deadlock, found issue when test ext4 large
    folio.
    
     INFO: task DataXceiver for:7494 blocked for more than 120 seconds.
     "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
     task:DataXceiver for state:D stack:0     pid:7494  ppid:1      flags:0x00000200
     Call trace:
      __switch_to+0x14c/0x240
      __schedule+0x82c/0xdd0
      schedule+0x58/0xf0
      io_schedule+0x24/0xa0
      __folio_lock+0x130/0x300
      migrate_pages_batch+0x378/0x918
      migrate_pages+0x350/0x700
      compact_zone+0x63c/0xb38
      compact_zone_order+0xc0/0x118
      try_to_compact_pages+0xb0/0x280
      __alloc_pages_direct_compact+0x98/0x248
      __alloc_pages+0x510/0x1110
      alloc_pages+0x9c/0x130
      folio_alloc+0x20/0x78
      filemap_alloc_folio+0x8c/0x1b0
      page_cache_ra_order+0x174/0x308
      ondemand_readahead+0x1c8/0x2b8
      page_cache_async_ra+0x68/0xb8
      filemap_readahead.isra.0+0x64/0xa8
      filemap_get_pages+0x3fc/0x5b0
      filemap_splice_read+0xf4/0x280
      ext4_file_splice_read+0x2c/0x48 [ext4]
      vfs_splice_read.part.0+0xa8/0x118
      splice_direct_to_actor+0xbc/0x288
      do_splice_direct+0x9c/0x108
      do_sendfile+0x328/0x468
      __arm64_sys_sendfile64+0x8c/0x148
      invoke_syscall+0x4c/0x118
      el0_svc_common.constprop.0+0xc8/0xf0
      do_el0_svc+0x24/0x38
      el0_svc+0x4c/0x1f8
      el0t_64_sync_handler+0xc0/0xc8
      el0t_64_sync+0x188/0x190
    
    Link: https://lkml.kernel.org/r/20240426112938.124740-1-wangkefeng.wang@huawei.com
    Fixes: 793917d997df ("mm/readahead: Add large folio readahead")
    Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Zhang Yi <yi.zhang@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>

 
mptcp: ensure snd_nxt is properly initialized on connect [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Apr 29 20:00:31 2024 +0200

    mptcp: ensure snd_nxt is properly initialized on connect
    
    commit fb7a0d334894206ae35f023a82cad5a290fd7386 upstream.
    
    Christoph reported a splat hinting at a corrupted snd_una:
    
      WARNING: CPU: 1 PID: 38 at net/mptcp/protocol.c:1005 __mptcp_clean_una+0x4b3/0x620 net/mptcp/protocol.c:1005
      Modules linked in:
      CPU: 1 PID: 38 Comm: kworker/1:1 Not tainted 6.9.0-rc1-gbbeac67456c9 #59
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-2.el7 04/01/2014
      Workqueue: events mptcp_worker
      RIP: 0010:__mptcp_clean_una+0x4b3/0x620 net/mptcp/protocol.c:1005
      Code: be 06 01 00 00 bf 06 01 00 00 e8 a8 12 e7 fe e9 00 fe ff ff e8
            8e 1a e7 fe 0f b7 ab 3e 02 00 00 e9 d3 fd ff ff e8 7d 1a e7 fe
            <0f> 0b 4c 8b bb e0 05 00 00 e9 74 fc ff ff e8 6a 1a e7 fe 0f 0b e9
      RSP: 0018:ffffc9000013fd48 EFLAGS: 00010293
      RAX: 0000000000000000 RBX: ffff8881029bd280 RCX: ffffffff82382fe4
      RDX: ffff8881003cbd00 RSI: ffffffff823833c3 RDI: 0000000000000001
      RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
      R10: 0000000000000000 R11: fefefefefefefeff R12: ffff888138ba8000
      R13: 0000000000000106 R14: ffff8881029bd908 R15: ffff888126560000
      FS:  0000000000000000(0000) GS:ffff88813bd00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f604a5dae38 CR3: 0000000101dac002 CR4: 0000000000170ef0
      Call Trace:
       <TASK>
       __mptcp_clean_una_wakeup net/mptcp/protocol.c:1055 [inline]
       mptcp_clean_una_wakeup net/mptcp/protocol.c:1062 [inline]
       __mptcp_retrans+0x7f/0x7e0 net/mptcp/protocol.c:2615
       mptcp_worker+0x434/0x740 net/mptcp/protocol.c:2767
       process_one_work+0x1e0/0x560 kernel/workqueue.c:3254
       process_scheduled_works kernel/workqueue.c:3335 [inline]
       worker_thread+0x3c7/0x640 kernel/workqueue.c:3416
       kthread+0x121/0x170 kernel/kthread.c:388
       ret_from_fork+0x44/0x50 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:243
       </TASK>
    
    When fallback to TCP happens early on a client socket, snd_nxt
    is not yet initialized and any incoming ack will copy such value
    into snd_una. If the mptcp worker (dumbly) tries mptcp-level
    re-injection after such ack, that would unconditionally trigger a send
    buffer cleanup using 'bad' snd_una values.
    
    We could easily disable re-injection for fallback sockets, but such
    dumb behavior already helped catching a few subtle issues and a very
    low to zero impact in practice.
    
    Instead address the issue always initializing snd_nxt (and write_seq,
    for consistency) at connect time.
    
    Fixes: 8fd738049ac3 ("mptcp: fallback in case of simultaneous connect")
    Cc: stable@vger.kernel.org
    Reported-by: Christoph Paasch <cpaasch@apple.com>
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/485
    Tested-by: Christoph Paasch <cpaasch@apple.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://lore.kernel.org/r/20240429-upstream-net-20240429-mptcp-snd_nxt-init-connect-v1-1-59ceac0a7dcb@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net l2tp: drop flow hash on forward [+ + +]
Author: David Bauer <mail@david-bauer.net>
Date:   Wed Apr 24 19:11:10 2024 +0200

    net l2tp: drop flow hash on forward
    
    [ Upstream commit 42f853b42899d9b445763b55c3c8adc72be0f0e1 ]
    
    Drop the flow-hash of the skb when forwarding to the L2TP netdev.
    
    This avoids the L2TP qdisc from using the flow-hash from the outer
    packet, which is identical for every flow within the tunnel.
    
    This does not affect every platform but is specific for the ethernet
    driver. It depends on the platform including L4 information in the
    flow-hash.
    
    One such example is the Mediatek Filogic MT798x family of networking
    processors.
    
    Fixes: d9e31d17ceba ("l2tp: Add L2TP ethernet pseudowire support")
    Acked-by: James Chapman <jchapman@katalix.com>
    Signed-off-by: David Bauer <mail@david-bauer.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://lore.kernel.org/r/20240424171110.13701-1-mail@david-bauer.net
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net-sysfs: convert dev->operstate reads to lockless ones [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Feb 13 06:32:39 2024 +0000

    net-sysfs: convert dev->operstate reads to lockless ones
    
    [ Upstream commit 004d138364fd10dd5ff8ceb54cfdc2d792a7b338 ]
    
    operstate_show() can omit dev_base_lock acquisition only
    to read dev->operstate.
    
    Annotate accesses to dev->operstate.
    
    Writers still acquire dev_base_lock for mutual exclusion.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 4893b8b3ef8d ("hsr: Simplify code for announcing HSR nodes timer setup")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/smc: fix neighbour and rtable leak in smc_ib_find_route() [+ + +]
Author: Wen Gu <guwen@linux.alibaba.com>
Date:   Tue May 7 20:53:31 2024 +0800

    net/smc: fix neighbour and rtable leak in smc_ib_find_route()
    
    [ Upstream commit 2ddc0dd7fec86ee53b8928a5cca5fbddd4fc7c06 ]
    
    In smc_ib_find_route(), the neighbour found by neigh_lookup() and rtable
    resolved by ip_route_output_flow() are not released or put before return.
    It may cause the refcount leak, so fix it.
    
    Link: https://lore.kernel.org/r/20240506015439.108739-1-guwen@linux.alibaba.com
    Fixes: e5c4744cfb59 ("net/smc: add SMC-Rv2 connection establishment")
    Signed-off-by: Wen Gu <guwen@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20240507125331.2808-1-guwen@linux.alibaba.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: bcmgenet: Clear RGMII_LINK upon link down [+ + +]
Author: Florian Fainelli <f.fainelli@gmail.com>
Date:   Wed May 15 10:02:24 2024 -0700

    net: bcmgenet: Clear RGMII_LINK upon link down
    
    commit 696450c05181559a35d4d5bee55c465b1ac6fe2e upstream
    
    Clear the RGMII_LINK bit upon detecting link down to be consistent with
    setting the bit upon link up. We also move the clearing of the
    out-of-band disable to the runtime initialization rather than for each
    link up/down transition.
    
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Link: https://lore.kernel.org/r/20221118213754.1383364-1-f.fainelli@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bcmgenet: Reset RBUF on first open [+ + +]
Author: Phil Elwell <phil@raspberrypi.com>
Date:   Mon Apr 1 13:09:33 2024 +0200

    net: bcmgenet: Reset RBUF on first open
    
    [ Upstream commit 0a6380cb4c6b5c1d6dad226ba3130f9090f0ccea ]
    
    If the RBUF logic is not reset when the kernel starts then there
    may be some data left over from any network boot loader. If the
    64-byte packet headers are enabled then this can be fatal.
    
    Extend bcmgenet_dma_disable to do perform the reset, but not when
    called from bcmgenet_resume in order to preserve a wake packet.
    
    N.B. This different handling of resume is just based on a hunch -
    why else wouldn't one reset the RBUF as well as the TBUF? If this
    isn't the case then it's easy to change the patch to make the RBUF
    reset unconditional.
    
    See: https://github.com/raspberrypi/linux/issues/3850
    See: https://github.com/raspberrypi/firmware/issues/1882
    
    Signed-off-by: Phil Elwell <phil@raspberrypi.com>
    Signed-off-by: Maarten Vanraes <maarten@rmail.be>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bcmgenet: synchronize EXT_RGMII_OOB_CTRL access [+ + +]
Author: Doug Berger <opendmb@gmail.com>
Date:   Wed May 15 10:02:25 2024 -0700

    net: bcmgenet: synchronize EXT_RGMII_OOB_CTRL access
    
    commit d85cf67a339685beae1d0aee27b7f61da95455be upstream
    
    The EXT_RGMII_OOB_CTRL register can be written from different
    contexts. It is predominantly written from the adjust_link
    handler which is synchronized by the phydev->lock, but can
    also be written from a different context when configuring the
    mii in bcmgenet_mii_config().
    
    The chances of contention are quite low, but it is conceivable
    that adjust_link could occur during resume when WoL is enabled
    so use the phydev->lock synchronizer in bcmgenet_mii_config()
    to be sure.
    
    Fixes: afe3f907d20f ("net: bcmgenet: power on MII block for all MII modes")
    Cc: stable@vger.kernel.org
    Signed-off-by: Doug Berger <opendmb@gmail.com>
    Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bcmgenet: synchronize UMAC_CMD access [+ + +]
Author: Doug Berger <opendmb@gmail.com>
Date:   Wed May 15 10:02:27 2024 -0700

    net: bcmgenet: synchronize UMAC_CMD access
    
    commit 0d5e2a82232605b337972fb2c7d0cbc46898aca1 upstream
    
    The UMAC_CMD register is written from different execution
    contexts and has insufficient synchronization protections to
    prevent possible corruption. Of particular concern are the
    acceses from the phy_device delayed work context used by the
    adjust_link call and the BH context that may be used by the
    ndo_set_rx_mode call.
    
    A spinlock is added to the driver to protect contended register
    accesses (i.e. reg_lock) and it is used to synchronize accesses
    to UMAC_CMD.
    
    Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file")
    Cc: stable@vger.kernel.org
    Signed-off-by: Doug Berger <opendmb@gmail.com>
    Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bcmgenet: synchronize use of bcmgenet_set_rx_mode() [+ + +]
Author: Doug Berger <opendmb@gmail.com>
Date:   Wed May 15 10:02:26 2024 -0700

    net: bcmgenet: synchronize use of bcmgenet_set_rx_mode()
    
    commit 2dbe5f19368caae63b1f59f5bc2af78c7d522b3a upstream
    
    The ndo_set_rx_mode function is synchronized with the
    netif_addr_lock spinlock and BHs disabled. Since this
    function is also invoked directly from the driver the
    same synchronization should be applied.
    
    Fixes: 72f96347628e ("net: bcmgenet: set Rx mode before starting netif")
    Cc: stable@vger.kernel.org
    Signed-off-by: Doug Berger <opendmb@gmail.com>
    Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bridge: fix corrupted ethernet header on multicast-to-unicast [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Sun May 5 20:42:38 2024 +0200

    net: bridge: fix corrupted ethernet header on multicast-to-unicast
    
    [ Upstream commit 86b29d830ad69eecff25b22dc96c14c6573718e6 ]
    
    The change from skb_copy to pskb_copy unfortunately changed the data
    copying to omit the ethernet header, since it was pulled before reaching
    this point. Fix this by calling __skb_push/pull around pskb_copy.
    
    Fixes: 59c878cbcdd8 ("net: bridge: fix multicast-to-unicast with fraglist GSO")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bridge: fix multicast-to-unicast with fraglist GSO [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Sat Apr 27 20:24:18 2024 +0200

    net: bridge: fix multicast-to-unicast with fraglist GSO
    
    [ Upstream commit 59c878cbcdd80ed39315573b3511d0acfd3501b5 ]
    
    Calling skb_copy on a SKB_GSO_FRAGLIST skb is not valid, since it returns
    an invalid linearized skb. This code only needs to change the ethernet
    header, so pskb_copy is the right function to call here.
    
    Fixes: 6db6f0eae605 ("bridge: multicast to unicast")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: core: reject skb_copy(_expand) for fraglist GSO skbs [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Sat Apr 27 20:24:19 2024 +0200

    net: core: reject skb_copy(_expand) for fraglist GSO skbs
    
    [ Upstream commit d091e579b864fa790dd6a0cd537a22c383126681 ]
    
    SKB_GSO_FRAGLIST skbs must not be linearized, otherwise they become
    invalid. Return NULL if such an skb is passed to skb_copy or
    skb_copy_expand, in order to prevent a crash on a potential later
    call to skb_gso_segment.
    
    Fixes: 3a1296a38d0c ("net: Support GRO/GSO fraglist chaining.")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mv88e6xxx: Fix number of databases for 88E6141 / 88E6341 [+ + +]
Author: Marek Behún <kabel@kernel.org>
Date:   Mon Apr 29 15:38:32 2024 +0200

    net: dsa: mv88e6xxx: Fix number of databases for 88E6141 / 88E6341
    
    [ Upstream commit b9a61c20179fda7bdfe2c1210aa72451991ab81a ]
    
    The Topaz family (88E6141 and 88E6341) only support 256 Forwarding
    Information Tables.
    
    Fixes: a75961d0ebfd ("net: dsa: mv88e6xxx: Add support for ethernet switch 88E6341")
    Fixes: 1558727a1c1b ("net: dsa: mv88e6xxx: Add support for ethernet switch 88E6141")
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20240429133832.9547-1-kabel@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fix out-of-bounds access in ops_init [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Thu May 2 10:20:06 2024 -0300

    net: fix out-of-bounds access in ops_init
    
    commit a26ff37e624d12e28077e5b24d2b264f62764ad6 upstream.
    
    net_alloc_generic is called by net_alloc, which is called without any
    locking. It reads max_gen_ptrs, which is changed under pernet_ops_rwsem. It
    is read twice, first to allocate an array, then to set s.len, which is
    later used to limit the bounds of the array access.
    
    It is possible that the array is allocated and another thread is
    registering a new pernet ops, increments max_gen_ptrs, which is then used
    to set s.len with a larger than allocated length for the variable array.
    
    Fix it by reading max_gen_ptrs only once in net_alloc_generic. If
    max_gen_ptrs is later incremented, it will be caught in net_assign_generic.
    
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Fixes: 073862ba5d24 ("netns: fix net_alloc_generic()")
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240502132006.3430840-1-cascardo@igalia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: gro: add flush check in udp_gro_receive_segment [+ + +]
Author: Richard Gobert <richardbgobert@gmail.com>
Date:   Tue Apr 30 16:35:55 2024 +0200

    net: gro: add flush check in udp_gro_receive_segment
    
    [ Upstream commit 5babae777c61aa8a8679d59d3cdc54165ad96d42 ]
    
    GRO-GSO path is supposed to be transparent and as such L3 flush checks are
    relevant to all UDP flows merging in GRO. This patch uses the same logic
    and code from tcp_gro_receive, terminating merge if flush is non zero.
    
    Fixes: e20cf8d3f1f7 ("udp: implement GRO for plain UDP sockets.")
    Signed-off-by: Richard Gobert <richardbgobert@gmail.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: change type of numa_node_mask as nodemask_t [+ + +]
Author: Peiyang Wang <wangpeiyang1@huawei.com>
Date:   Tue May 7 21:42:20 2024 +0800

    net: hns3: change type of numa_node_mask as nodemask_t
    
    [ Upstream commit 6639a7b953212ac51aa4baa7d7fb855bf736cf56 ]
    
    It provides nodemask_t to describe the numa node mask in kernel. To
    improve transportability, change the type of numa_node_mask as nodemask_t.
    
    Fixes: 38caee9d3ee8 ("net: hns3: Add support of the HNAE3 framework")
    Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: direct return when receive a unknown mailbox message [+ + +]
Author: Jian Shen <shenjian15@huawei.com>
Date:   Tue May 7 21:42:19 2024 +0800

    net: hns3: direct return when receive a unknown mailbox message
    
    [ Upstream commit 669554c512d2107e2f21616f38e050d40655101f ]
    
    Currently, the driver didn't return when receive a unknown
    mailbox message, and continue checking whether need to
    generate a response. It's unnecessary and may be incorrect.
    
    Fixes: bb5790b71bad ("net: hns3: refactor mailbox response scheme between PF and VF")
    Signed-off-by: Jian Shen <shenjian15@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: fix kernel crash when devlink reload during initialization [+ + +]
Author: Yonglong Liu <liuyonglong@huawei.com>
Date:   Tue May 7 21:42:24 2024 +0800

    net: hns3: fix kernel crash when devlink reload during initialization
    
    [ Upstream commit 35d92abfbad88cf947c010baf34b075e40566095 ]
    
    The devlink reload process will access the hardware resources,
    but the register operation is done before the hardware is initialized.
    So, processing the devlink reload during initialization may lead to kernel
    crash.
    
    This patch fixes this by registering the devlink after
    hardware initialization.
    
    Fixes: cd6242991d2e ("net: hns3: add support for registering devlink for VF")
    Fixes: 93305b77ffcb ("net: hns3: fix kernel crash when devlink reload during pf initialization")
    Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: fix port vlan filter not disabled issue [+ + +]
Author: Yonglong Liu <liuyonglong@huawei.com>
Date:   Tue May 7 21:42:23 2024 +0800

    net: hns3: fix port vlan filter not disabled issue
    
    [ Upstream commit f5db7a3b65c84d723ca5e2bb6e83115180ab6336 ]
    
    According to hardware limitation, for device support modify
    VLAN filter state but not support bypass port VLAN filter,
    it should always disable the port VLAN filter. but the driver
    enables port VLAN filter when initializing, if there is no
    VLAN(except VLAN 0) id added, the driver will disable it
    in service task. In most time, it works fine. But there is
    a time window before the service task shceduled and net device
    being registered. So if user adds VLAN at this time, the driver
    will not update the VLAN filter state,  and the port VLAN filter
    remains enabled.
    
    To fix the problem, if support modify VLAN filter state but not
    support bypass port VLAN filter, set the port vlan filter to "off".
    
    Fixes: 184cd221a863 ("net: hns3: disable port VLAN filter when support function level VLAN filter control")
    Fixes: 2ba306627f59 ("net: hns3: add support for modify VLAN filter state")
    Signed-off-by: Yonglong Liu <liuyonglong@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: release PTP resources if pf initialization failed [+ + +]
Author: Peiyang Wang <wangpeiyang1@huawei.com>
Date:   Tue May 7 21:42:21 2024 +0800

    net: hns3: release PTP resources if pf initialization failed
    
    [ Upstream commit 950aa42399893a170d9b57eda0e4a3ff91fd8b70 ]
    
    During the PF initialization process, hclge_update_port_info may return an
    error code for some reason. At this point,  the ptp initialization has been
    completed. To void memory leaks, the resources that are applied by ptp
    should be released. Therefore, when hclge_update_port_info returns an error
    code, hclge_ptp_uninit is called to release the corresponding resources.
    
    Fixes: eaf83ae59e18 ("net: hns3: add querying fec ability from firmware")
    Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Hariprasad Kelam <hkelam@marvell.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: use appropriate barrier function after setting a bit value [+ + +]
Author: Peiyang Wang <wangpeiyang1@huawei.com>
Date:   Tue May 7 21:42:22 2024 +0800

    net: hns3: use appropriate barrier function after setting a bit value
    
    [ Upstream commit 094c281228529d333458208fd02fcac3b139d93b ]
    
    There is a memory barrier in followed case. When set the port down,
    hclgevf_set_timmer will set DOWN in state. Meanwhile, the service task has
    different behaviour based on whether the state is DOWN. Thus, to make sure
    service task see DOWN, use smp_mb__after_atomic after calling set_bit().
    
              CPU0                        CPU1
    ========================== ===================================
    hclgevf_set_timer_task()    hclgevf_periodic_service_task()
      set_bit(DOWN,state)         test_bit(DOWN,state)
    
    pf also has this issue.
    
    Fixes: ff200099d271 ("net: hns3: remove unnecessary work in hclgevf_main")
    Fixes: 1c6dfe6fc6f7 ("net: hns3: remove mailbox and reset work in hclge_main")
    Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: using user configure after hardware reset [+ + +]
Author: Peiyang Wang <wangpeiyang1@huawei.com>
Date:   Tue May 7 21:42:18 2024 +0800

    net: hns3: using user configure after hardware reset
    
    [ Upstream commit 05eb60e9648cca0beeebdbcd263b599fb58aee48 ]
    
    When a reset occurring, it's supposed to recover user's configuration.
    Currently, the port info(speed, duplex and autoneg) is stored in hclge_mac
    and will be scheduled updated. Consider the case that reset was happened
    consecutively. During the first reset, the port info is configured with
    a temporary value cause the PHY is reset and looking for best link config.
    Second reset start and use pervious configuration which is not the user's.
    The specific process is as follows:
    
    +------+               +----+                +----+
    | USER |               | PF |                | HW |
    +---+--+               +-+--+                +-+--+
        |  ethtool --reset   |                     |
        +------------------->|    reset command    |
        |  ethtool --reset   +-------------------->|
        +------------------->|                     +---+
        |                    +---+                 |   |
        |                    |   |reset currently  |   | HW RESET
        |                    |   |and wait to do   |   |
        |                    |<--+                 |   |
        |                    | send pervious cfg   |<--+
        |                    | (1000M FULL AN_ON)  |
        |                    +-------------------->|
        |                    | read cfg(time task) |
        |                    | (10M HALF AN_OFF)   +---+
        |                    |<--------------------+   | cfg take effect
        |                    |    reset command    |<--+
        |                    +-------------------->|
        |                    |                     +---+
        |                    | send pervious cfg   |   | HW RESET
        |                    | (10M HALF AN_OFF)   |<--+
        |                    +-------------------->|
        |                    | read cfg(time task) |
        |                    |  (10M HALF AN_OFF)  +---+
        |                    |<--------------------+   | cfg take effect
        |                    |                     |   |
        |                    | read cfg(time task) |<--+
        |                    |  (10M HALF AN_OFF)  |
        |                    |<--------------------+
        |                    |                     |
        v                    v                     v
    
    To avoid aboved situation, this patch introduced req_speed, req_duplex,
    req_autoneg to store user's configuration and it only be used after
    hardware reset and to recover user's configuration
    
    Fixes: f5f2b3e4dcc0 ("net: hns3: add support for imp-controlled PHYs")
    Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ks8851: Queue RX packets in IRQ handler instead of disabling BHs [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Thu May 2 20:32:59 2024 +0200

    net: ks8851: Queue RX packets in IRQ handler instead of disabling BHs
    
    [ Upstream commit e0863634bf9f7cf36291ebb5bfa2d16632f79c49 ]
    
    Currently the driver uses local_bh_disable()/local_bh_enable() in its
    IRQ handler to avoid triggering net_rx_action() softirq on exit from
    netif_rx(). The net_rx_action() could trigger this driver .start_xmit
    callback, which is protected by the same lock as the IRQ handler, so
    calling the .start_xmit from netif_rx() from the IRQ handler critical
    section protected by the lock could lead to an attempt to claim the
    already claimed lock, and a hang.
    
    The local_bh_disable()/local_bh_enable() approach works only in case
    the IRQ handler is protected by a spinlock, but does not work if the
    IRQ handler is protected by mutex, i.e. this works for KS8851 with
    Parallel bus interface, but not for KS8851 with SPI bus interface.
    
    Remove the BH manipulation and instead of calling netif_rx() inside
    the IRQ handler code protected by the lock, queue all the received
    SKBs in the IRQ handler into a queue first, and once the IRQ handler
    exits the critical section protected by the lock, dequeue all the
    queued SKBs and push them all into netif_rx(). At this point, it is
    safe to trigger the net_rx_action() softirq, since the netif_rx()
    call is outside of the lock that protects the IRQ handler.
    
    Fixes: be0384bf599c ("net: ks8851: Handle softirqs at the end of IRQ thread to fix hang")
    Tested-by: Ronald Wahl <ronald.wahl@raritan.com> # KS8851 SPI
    Signed-off-by: Marek Vasut <marex@denx.de>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240502183436.117117-1-marex@denx.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mark racy access on sk->sk_rcvbuf [+ + +]
Author: linke li <lilinke99@qq.com>
Date:   Thu Mar 21 16:44:10 2024 +0800

    net: mark racy access on sk->sk_rcvbuf
    
    [ Upstream commit c2deb2e971f5d9aca941ef13ee05566979e337a4 ]
    
    sk->sk_rcvbuf in __sock_queue_rcv_skb() and __sk_receive_skb() can be
    changed by other threads. Mark this as benign using READ_ONCE().
    
    This patch is aimed at reducing the number of benign races reported by
    KCSAN in order to focus future debugging effort on harmful races.
    
    Signed-off-by: linke li <lilinke99@qq.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: qede: sanitize 'rc' in qede_add_tc_flower_fltr() [+ + +]
Author: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Date:   Fri Apr 26 09:12:23 2024 +0000

    net: qede: sanitize 'rc' in qede_add_tc_flower_fltr()
    
    [ Upstream commit e25714466abd9d96901b15efddf82c60a38abd86 ]
    
    Explicitly set 'rc' (return code), before jumping to the
    unlock and return path.
    
    By not having any code depend on that 'rc' remains at
    it's initial value of -EINVAL, then we can re-use 'rc' for
    the return code of function calls in subsequent patches.
    
    Only compile tested.
    
    Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: fcee2065a178 ("net: qede: use return from qede_parse_flow_attr() for flower")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: qede: use return from qede_parse_actions() [+ + +]
Author: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Date:   Fri Apr 26 09:12:26 2024 +0000

    net: qede: use return from qede_parse_actions()
    
    [ Upstream commit f26f719a36e56381a1f4230e5364e7ad4d485888 ]
    
    When calling qede_parse_actions() then the
    return code was only used for a non-zero check,
    and then -EINVAL was returned.
    
    qede_parse_actions() can currently fail with:
    * -EINVAL
    * -EOPNOTSUPP
    
    This patch changes the code to use the actual
    return code, not just return -EINVAL.
    
    The blaimed commit broke the implicit assumption
    that only -EINVAL would ever be returned.
    
    Only compile tested.
    
    Fixes: 319a1d19471e ("flow_offload: check for basic action hw stats type")
    Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: qede: use return from qede_parse_flow_attr() for flow_spec [+ + +]
Author: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Date:   Fri Apr 26 09:12:25 2024 +0000

    net: qede: use return from qede_parse_flow_attr() for flow_spec
    
    [ Upstream commit 27b44414a34b108c5a37cd5b4894f606061d86e7 ]
    
    In qede_flow_spec_to_rule(), when calling
    qede_parse_flow_attr() then the return code
    was only used for a non-zero check, and then
    -EINVAL was returned.
    
    qede_parse_flow_attr() can currently fail with:
    * -EINVAL
    * -EOPNOTSUPP
    * -EPROTONOSUPPORT
    
    This patch changes the code to use the actual
    return code, not just return -EINVAL.
    
    The blaimed commit introduced qede_flow_spec_to_rule(),
    and this call to qede_parse_flow_attr(), it looks
    like it just duplicated how it was already used.
    
    Only compile tested.
    
    Fixes: 37c5d3efd7f8 ("qede: use ethtool_rx_flow_rule() to remove duplicated parser code")
    Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: qede: use return from qede_parse_flow_attr() for flower [+ + +]
Author: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Date:   Fri Apr 26 09:12:24 2024 +0000

    net: qede: use return from qede_parse_flow_attr() for flower
    
    [ Upstream commit fcee2065a178f78be6fd516302830378b17dba3d ]
    
    In qede_add_tc_flower_fltr(), when calling
    qede_parse_flow_attr() then the return code
    was only used for a non-zero check, and then
    -EINVAL was returned.
    
    qede_parse_flow_attr() can currently fail with:
    * -EINVAL
    * -EOPNOTSUPP
    * -EPROTONOSUPPORT
    
    This patch changes the code to use the actual
    return code, not just return -EINVAL.
    
    The blaimed commit introduced these functions.
    
    Only compile tested.
    
    Fixes: 2ce9c93eaca6 ("qede: Ingress tc flower offload (drop action) support.")
    Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: net:usb:qmi_wwan: support Rolling modules [+ + +]
Author: Vanillan Wang <vanillanwang@163.com>
Date:   Tue Apr 16 20:07:13 2024 +0800

    net:usb:qmi_wwan: support Rolling modules
    
    [ Upstream commit d362046021ea122309da8c8e0b6850c792ca97b5 ]
    
    Update the qmi_wwan driver support for the Rolling
    LTE modules.
    
    - VID:PID 33f8:0104, RW101-GL for laptop debug M.2 cards(with RMNET
    interface for /Linux/Chrome OS)
    0x0104: RMNET, diag, at, pipe
    
    Here are the outputs of usb-devices:
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=5000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=33f8 ProdID=0104 Rev=05.04
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling Module
    S:  SerialNumber=ba2eb033
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    Signed-off-by: Vanillan Wang <vanillanwang@163.com>
    Link: https://lore.kernel.org/r/20240416120713.24777-1-vanillanwang@163.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfs: expose /proc/net/sunrpc/nfs in net namespaces [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Thu Feb 15 14:57:31 2024 -0500

    nfs: expose /proc/net/sunrpc/nfs in net namespaces
    
    [ Upstream commit d47151b79e3220e72ae323b8b8e9d6da20dc884e ]
    
    We're using nfs mounts inside of containers in production and noticed
    that the nfs stats are not exposed in /proc.  This is a problem for us
    as we use these stats for monitoring, and have to do this awkward bind
    mount from the main host into the container in order to get to these
    states.
    
    Add the rpc_proc_register call to the pernet operations entry and exit
    points so these stats can be exposed inside of network namespaces.
    
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfs: Handle error of rpc_proc_register() in nfs_net_init(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Thu Apr 4 15:12:00 2024 -0700

    nfs: Handle error of rpc_proc_register() in nfs_net_init().
    
    [ Upstream commit 24457f1be29f1e7042e50a7749f5c2dde8c433c8 ]
    
    syzkaller reported a warning [0] triggered while destroying immature
    netns.
    
    rpc_proc_register() was called in init_nfs_fs(), but its error
    has been ignored since at least the initial commit 1da177e4c3f4
    ("Linux-2.6.12-rc2").
    
    Recently, commit d47151b79e32 ("nfs: expose /proc/net/sunrpc/nfs
    in net namespaces") converted the procfs to per-netns and made
    the problem more visible.
    
    Even when rpc_proc_register() fails, nfs_net_init() could succeed,
    and thus nfs_net_exit() will be called while destroying the netns.
    
    Then, remove_proc_entry() will be called for non-existing proc
    directory and trigger the warning below.
    
    Let's handle the error of rpc_proc_register() properly in nfs_net_init().
    
    [0]:
    name 'nfs'
    WARNING: CPU: 1 PID: 1710 at fs/proc/generic.c:711 remove_proc_entry+0x1bb/0x2d0 fs/proc/generic.c:711
    Modules linked in:
    CPU: 1 PID: 1710 Comm: syz-executor.2 Not tainted 6.8.0-12822-gcd51db110a7e #12
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    RIP: 0010:remove_proc_entry+0x1bb/0x2d0 fs/proc/generic.c:711
    Code: 41 5d 41 5e c3 e8 85 09 b5 ff 48 c7 c7 88 58 64 86 e8 09 0e 71 02 e8 74 09 b5 ff 4c 89 e6 48 c7 c7 de 1b 80 84 e8 c5 ad 97 ff <0f> 0b eb b1 e8 5c 09 b5 ff 48 c7 c7 88 58 64 86 e8 e0 0d 71 02 eb
    RSP: 0018:ffffc9000c6d7ce0 EFLAGS: 00010286
    RAX: 0000000000000000 RBX: ffff8880422b8b00 RCX: ffffffff8110503c
    RDX: ffff888030652f00 RSI: ffffffff81105045 RDI: 0000000000000001
    RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000001 R11: ffffffff81bb62cb R12: ffffffff84807ffc
    R13: ffff88804ad6fcc0 R14: ffffffff84807ffc R15: ffffffff85741ff8
    FS:  00007f30cfba8640(0000) GS:ffff88807dd00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ff51afe8000 CR3: 000000005a60a005 CR4: 0000000000770ef0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
     <TASK>
     rpc_proc_unregister+0x64/0x70 net/sunrpc/stats.c:310
     nfs_net_exit+0x1c/0x30 fs/nfs/inode.c:2438
     ops_exit_list+0x62/0xb0 net/core/net_namespace.c:170
     setup_net+0x46c/0x660 net/core/net_namespace.c:372
     copy_net_ns+0x244/0x590 net/core/net_namespace.c:505
     create_new_namespaces+0x2ed/0x770 kernel/nsproxy.c:110
     unshare_nsproxy_namespaces+0xae/0x160 kernel/nsproxy.c:228
     ksys_unshare+0x342/0x760 kernel/fork.c:3322
     __do_sys_unshare kernel/fork.c:3393 [inline]
     __se_sys_unshare kernel/fork.c:3391 [inline]
     __x64_sys_unshare+0x1f/0x30 kernel/fork.c:3391
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0x4f/0x110 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x46/0x4e
    RIP: 0033:0x7f30d0febe5d
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 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 8b 0d 73 9f 1b 00 f7 d8 64 89 01 48
    RSP: 002b:00007f30cfba7cc8 EFLAGS: 00000246 ORIG_RAX: 0000000000000110
    RAX: ffffffffffffffda RBX: 00000000004bbf80 RCX: 00007f30d0febe5d
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 000000006c020600
    RBP: 00000000004bbf80 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000002
    R13: 000000000000000b R14: 00007f30d104c530 R15: 0000000000000000
     </TASK>
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfs: make the rpc_stat per net namespace [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Thu Feb 15 14:57:32 2024 -0500

    nfs: make the rpc_stat per net namespace
    
    [ Upstream commit 1548036ef1204df65ca5a16e8b199c858cb80075 ]
    
    Now that we're exposing the rpc stats on a per-network namespace basis,
    move this struct into struct nfs_net and use that to make sure only the
    per-network namespace stats are exposed.
    
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nsh: Restore skb->{protocol,data,mac_header} for outer header in nsh_gso_segment(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Apr 23 19:35:49 2024 -0700

    nsh: Restore skb->{protocol,data,mac_header} for outer header in nsh_gso_segment().
    
    [ Upstream commit 4b911a9690d72641879ea6d13cce1de31d346d79 ]
    
    syzbot triggered various splats (see [0] and links) by a crafted GSO
    packet of VIRTIO_NET_HDR_GSO_UDP layering the following protocols:
    
      ETH_P_8021AD + ETH_P_NSH + ETH_P_IPV6 + IPPROTO_UDP
    
    NSH can encapsulate IPv4, IPv6, Ethernet, NSH, and MPLS.  As the inner
    protocol can be Ethernet, NSH GSO handler, nsh_gso_segment(), calls
    skb_mac_gso_segment() to invoke inner protocol GSO handlers.
    
    nsh_gso_segment() does the following for the original skb before
    calling skb_mac_gso_segment()
    
      1. reset skb->network_header
      2. save the original skb->{mac_heaeder,mac_len} in a local variable
      3. pull the NSH header
      4. resets skb->mac_header
      5. set up skb->mac_len and skb->protocol for the inner protocol.
    
    and does the following for the segmented skb
    
      6. set ntohs(ETH_P_NSH) to skb->protocol
      7. push the NSH header
      8. restore skb->mac_header
      9. set skb->mac_header + mac_len to skb->network_header
     10. restore skb->mac_len
    
    There are two problems in 6-7 and 8-9.
    
      (a)
      After 6 & 7, skb->data points to the NSH header, so the outer header
      (ETH_P_8021AD in this case) is stripped when skb is sent out of netdev.
    
      Also, if NSH is encapsulated by NSH + Ethernet (so NSH-Ethernet-NSH),
      skb_pull() in the first nsh_gso_segment() will make skb->data point
      to the middle of the outer NSH or Ethernet header because the Ethernet
      header is not pulled by the second nsh_gso_segment().
    
      (b)
      While restoring skb->{mac_header,network_header} in 8 & 9,
      nsh_gso_segment() does not assume that the data in the linear
      buffer is shifted.
    
      However, udp6_ufo_fragment() could shift the data and change
      skb->mac_header accordingly as demonstrated by syzbot.
    
      If this happens, even the restored skb->mac_header points to
      the middle of the outer header.
    
    It seems nsh_gso_segment() has never worked with outer headers so far.
    
    At the end of nsh_gso_segment(), the outer header must be restored for
    the segmented skb, instead of the NSH header.
    
    To do that, let's calculate the outer header position relatively from
    the inner header and set skb->{data,mac_header,protocol} properly.
    
    [0]:
    BUG: KMSAN: uninit-value in ipvlan_process_outbound drivers/net/ipvlan/ipvlan_core.c:524 [inline]
    BUG: KMSAN: uninit-value in ipvlan_xmit_mode_l3 drivers/net/ipvlan/ipvlan_core.c:602 [inline]
    BUG: KMSAN: uninit-value in ipvlan_queue_xmit+0xf44/0x16b0 drivers/net/ipvlan/ipvlan_core.c:668
     ipvlan_process_outbound drivers/net/ipvlan/ipvlan_core.c:524 [inline]
     ipvlan_xmit_mode_l3 drivers/net/ipvlan/ipvlan_core.c:602 [inline]
     ipvlan_queue_xmit+0xf44/0x16b0 drivers/net/ipvlan/ipvlan_core.c:668
     ipvlan_start_xmit+0x5c/0x1a0 drivers/net/ipvlan/ipvlan_main.c:222
     __netdev_start_xmit include/linux/netdevice.h:4989 [inline]
     netdev_start_xmit include/linux/netdevice.h:5003 [inline]
     xmit_one net/core/dev.c:3547 [inline]
     dev_hard_start_xmit+0x244/0xa10 net/core/dev.c:3563
     __dev_queue_xmit+0x33ed/0x51c0 net/core/dev.c:4351
     dev_queue_xmit include/linux/netdevice.h:3171 [inline]
     packet_xmit+0x9c/0x6b0 net/packet/af_packet.c:276
     packet_snd net/packet/af_packet.c:3081 [inline]
     packet_sendmsg+0x8aef/0x9f10 net/packet/af_packet.c:3113
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg net/socket.c:745 [inline]
     __sys_sendto+0x735/0xa10 net/socket.c:2191
     __do_sys_sendto net/socket.c:2203 [inline]
     __se_sys_sendto net/socket.c:2199 [inline]
     __x64_sys_sendto+0x125/0x1c0 net/socket.c:2199
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    Uninit was created at:
     slab_post_alloc_hook mm/slub.c:3819 [inline]
     slab_alloc_node mm/slub.c:3860 [inline]
     __do_kmalloc_node mm/slub.c:3980 [inline]
     __kmalloc_node_track_caller+0x705/0x1000 mm/slub.c:4001
     kmalloc_reserve+0x249/0x4a0 net/core/skbuff.c:582
     __alloc_skb+0x352/0x790 net/core/skbuff.c:651
     skb_segment+0x20aa/0x7080 net/core/skbuff.c:4647
     udp6_ufo_fragment+0xcab/0x1150 net/ipv6/udp_offload.c:109
     ipv6_gso_segment+0x14be/0x2ca0 net/ipv6/ip6_offload.c:152
     skb_mac_gso_segment+0x3e8/0x760 net/core/gso.c:53
     nsh_gso_segment+0x6f4/0xf70 net/nsh/nsh.c:108
     skb_mac_gso_segment+0x3e8/0x760 net/core/gso.c:53
     __skb_gso_segment+0x4b0/0x730 net/core/gso.c:124
     skb_gso_segment include/net/gso.h:83 [inline]
     validate_xmit_skb+0x107f/0x1930 net/core/dev.c:3628
     __dev_queue_xmit+0x1f28/0x51c0 net/core/dev.c:4343
     dev_queue_xmit include/linux/netdevice.h:3171 [inline]
     packet_xmit+0x9c/0x6b0 net/packet/af_packet.c:276
     packet_snd net/packet/af_packet.c:3081 [inline]
     packet_sendmsg+0x8aef/0x9f10 net/packet/af_packet.c:3113
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg net/socket.c:745 [inline]
     __sys_sendto+0x735/0xa10 net/socket.c:2191
     __do_sys_sendto net/socket.c:2203 [inline]
     __se_sys_sendto net/socket.c:2199 [inline]
     __x64_sys_sendto+0x125/0x1c0 net/socket.c:2199
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    CPU: 1 PID: 5101 Comm: syz-executor421 Not tainted 6.8.0-rc5-syzkaller-00297-gf2e367d6ad3b #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/25/2024
    
    Fixes: c411ed854584 ("nsh: add GSO support")
    Reported-and-tested-by: syzbot+42a0dc856239de4de60e@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=42a0dc856239de4de60e
    Reported-and-tested-by: syzbot+c298c9f0e46a3c86332b@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=c298c9f0e46a3c86332b
    Link: https://lore.kernel.org/netdev/20240415222041.18537-1-kuniyu@amazon.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20240424023549.21862-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme: fix warn output about shared namespaces without CONFIG_NVME_MULTIPATH [+ + +]
Author: Yi Zhang <yi.zhang@redhat.com>
Date:   Wed Apr 10 08:57:14 2024 +0800

    nvme: fix warn output about shared namespaces without CONFIG_NVME_MULTIPATH
    
    [ Upstream commit 0bc2e80b9be51712b19e919db5abc97a418f8292 ]
    
    Move the stray '.' that is currently at the end of the line after
    newline '\n' to before newline character which is the right position.
    
    Fixes: ce8d78616a6b ("nvme: warn about shared namespaces without CONFIG_NVME_MULTIPATH")
    Signed-off-by: Yi Zhang <yi.zhang@redhat.com>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: avoid off-by-one read from userspace [+ + +]
Author: Bui Quang Minh <minhquangbui99@gmail.com>
Date:   Wed Apr 24 21:44:23 2024 +0700

    octeontx2-af: avoid off-by-one read from userspace
    
    [ Upstream commit f299ee709fb45036454ca11e90cb2810fe771878 ]
    
    We try to access count + 1 byte from userspace with memdup_user(buffer,
    count + 1). However, the userspace only provides buffer of count bytes and
    only these count bytes are verified to be okay to access. To ensure the
    copied buffer is NUL terminated, we use memdup_user_nul instead.
    
    Fixes: 3a2eb515d136 ("octeontx2-af: Fix an off by one in rvu_dbg_qsize_write()")
    Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
    Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-6-f1f1b53a10f4@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf unwind-libdw: Handle JIT-generated DSOs properly [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Wed May 8 14:00:56 2024 -0700

    perf unwind-libdw: Handle JIT-generated DSOs properly
    
    [ Upstream commit c966d23a351a33f8a977fd7efbb6f467132f7383 ]
    
    Usually DSOs are mapped from the beginning of the file, so the base
    address of the DSO can be calculated by map->start - map->pgoff.
    
    However, JIT DSOs which are generated by `perf inject -j`, are mapped
    only the code segment.  This makes unwind-libdw code confusing and
    rejects processing unwinds in the JIT DSOs.  It should use the map
    start address as base for them to fix the confusion.
    
    Fixes: 1fe627da30331024 ("perf unwind: Take pgoff into account when reporting elf to libdwfl")
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Fangrui Song <maskray@google.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Milian Wolff <milian.wolff@kdab.com>
    Cc: Pablo Galindo <pablogsal@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20231212070547.612536-3-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf unwind-libunwind: Fix base address for .eh_frame [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Wed May 8 14:00:55 2024 -0700

    perf unwind-libunwind: Fix base address for .eh_frame
    
    [ Upstream commit 4fb54994b2360ab5029ee3a959161f6fe6bbb349 ]
    
    The base address of a DSO mapping should start at the start of the file.
    Usually DSOs are mapped from the pgoff 0 so it doesn't matter when it
    uses the start of the map address.
    
    But generated DSOs for JIT codes doesn't start from the 0 so it should
    subtract the offset to calculate the .eh_frame table offsets correctly.
    
    Fixes: dc2cf4ca866f5715 ("perf unwind: Fix segbase for ld.lld linked objects")
    Reviewed-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Fangrui Song <maskray@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Milian Wolff <milian.wolff@kdab.com>
    Cc: Pablo Galindo <pablogsal@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20231212070547.612536-4-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
phonet: fix rtm_phonet_notify() skb allocation [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu May 2 16:17:00 2024 +0000

    phonet: fix rtm_phonet_notify() skb allocation
    
    [ Upstream commit d8cac8568618dcb8a51af3db1103e8d4cc4aeea7 ]
    
    fill_route() stores three components in the skb:
    
    - struct rtmsg
    - RTA_DST (u8)
    - RTA_OIF (u32)
    
    Therefore, rtm_phonet_notify() should use
    
    NLMSG_ALIGN(sizeof(struct rtmsg)) +
    nla_total_size(1) +
    nla_total_size(4)
    
    Fixes: f062f41d0657 ("Phonet: routing table Netlink interface")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Rémi Denis-Courmont <courmisch@gmail.com>
    Link: https://lore.kernel.org/r/20240502161700.1804476-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl/meson: fix typo in PDM's pin name [+ + +]
Author: Jan Dakinevich <jan.dakinevich@salutedevices.com>
Date:   Mon Mar 25 14:30:58 2024 +0300

    pinctrl/meson: fix typo in PDM's pin name
    
    [ Upstream commit 368a90e651faeeb7049a876599cf2b0d74954796 ]
    
    Other pins have _a or _x suffix, but this one doesn't have any. Most
    likely this is a typo.
    
    Fixes: dabad1ff8561 ("pinctrl: meson: add pinctrl driver support for Meson-A1 SoC")
    Signed-off-by: Jan Dakinevich <jan.dakinevich@salutedevices.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Message-ID: <20240325113058.248022-1-jan.dakinevich@salutedevices.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: baytrail: Fix selecting gpio pinctrl state [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sun Apr 7 19:50:48 2024 +0200

    pinctrl: baytrail: Fix selecting gpio pinctrl state
    
    [ Upstream commit fed6d9a8e6a60ecf6506d0ea004040fbaa109927 ]
    
    For all the "score" pin-groups all the intel_pingroup-s to select
    the non GPIO function are re-used for byt_score_gpio_groups[].
    
    But this is incorrect since a pin-group includes the mode setting,
    which for the non GPIO functions generally is 1, where as to select
    the GPIO function mode must be set to 0.
    
    So the GPIO function needs separate intel_pingroup-s with their own mode
    value of 0.
    
    Add a new PIN_GROUP_GPIO macro which adds a foo_gpio entry to each
    pin-group defined this way and update byt_score_gpio_groups[] to point
    to the new foo_gpio entries.
    
    The "sus" usb_oc_grp usb_ulpi_grp and pcu_spi_grp pin-groups are special
    because these have a non 0 mode value to select the GPIO functions and
    these already have matching foo_gpio pin-groups, leave these are unchanged.
    
    The pmu_clk "sus" groups added in commit 2f46d7f7e959 ("pinctrl: baytrail:
    Add pinconf group + function for the pmu_clk") do need to use the new
    PIN_GROUP_GPIO macro.
    
    Fixes: 2f46d7f7e959 ("pinctrl: baytrail: Add pinconf group + function for the pmu_clk")
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: core: delete incorrect free in pinctrl_enable() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Thu Mar 21 09:38:39 2024 +0300

    pinctrl: core: delete incorrect free in pinctrl_enable()
    
    [ Upstream commit 5038a66dad0199de60e5671603ea6623eb9e5c79 ]
    
    The "pctldev" struct is allocated in devm_pinctrl_register_and_init().
    It's a devm_ managed pointer that is freed by devm_pinctrl_dev_release(),
    so freeing it in pinctrl_enable() will lead to a double free.
    
    The devm_pinctrl_dev_release() function frees the pindescs and destroys
    the mutex as well.
    
    Fixes: 6118714275f0 ("pinctrl: core: Fix pinctrl_register_and_init() with pinctrl_enable()")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Message-ID: <578fbe56-44e9-487c-ae95-29b695650f7c@moroto.mountain>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map() [+ + +]
Author: Zeng Heng <zengheng4@huawei.com>
Date:   Mon Apr 15 18:53:28 2024 +0800

    pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map()
    
    [ Upstream commit a0cedbcc8852d6c77b00634b81e41f17f29d9404 ]
    
    If we fail to allocate propname buffer, we need to drop the reference
    count we just took. Because the pinctrl_dt_free_maps() includes the
    droping operation, here we call it directly.
    
    Fixes: 91d5c5060ee2 ("pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map")
    Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Zeng Heng <zengheng4@huawei.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Message-ID: <20240415105328.3651441-1-zengheng4@huawei.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: intel: Make use of struct pinfunction and PINCTRL_PINFUNCTION() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Dec 19 14:42:34 2022 +0200

    pinctrl: intel: Make use of struct pinfunction and PINCTRL_PINFUNCTION()
    
    [ Upstream commit 999b85bfd765f273208cd7348b2977d3c5ae0753 ]
    
    Since pin control provides a generic data type and a macro for
    the pin function definition, use them in the Intel driver.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Stable-dep-of: fed6d9a8e6a6 ("pinctrl: baytrail: Fix selecting gpio pinctrl state")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: Introduce struct pinfunction and PINCTRL_PINFUNCTION() macro [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Dec 19 14:42:33 2022 +0200

    pinctrl: Introduce struct pinfunction and PINCTRL_PINFUNCTION() macro
    
    [ Upstream commit 443a0a0f0cf4f432c7af6654b7f2f920d411d379 ]
    
    There are many pin control drivers define their own data type for
    pin function representation which is the same or embed the same data
    as newly introduced one. Provide the data type and convenient macro
    for all pin control drivers.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Stable-dep-of: fed6d9a8e6a6 ("pinctrl: baytrail: Fix selecting gpio pinctrl state")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: mediatek: paris: Fix PIN_CONFIG_INPUT_SCHMITT_ENABLE readback [+ + +]
Author: Chen-Yu Tsai <wenst@chromium.org>
Date:   Wed Mar 27 17:13:33 2024 +0800

    pinctrl: mediatek: paris: Fix PIN_CONFIG_INPUT_SCHMITT_ENABLE readback
    
    [ Upstream commit 08f66a8edd08f6f7cfa769c81634b29a2b123908 ]
    
    In the generic pin config library, readback of some options are handled
    differently compared to the setting of those options: the argument value
    is used to convey enable/disable of an option in the set path, but
    success or -EINVAL is used to convey if an option is enabled or disabled
    in the debugfs readback path.
    
    PIN_CONFIG_INPUT_SCHMITT_ENABLE is one such option. Fix the readback of
    the option in the mediatek-paris library, so that the debugfs dump is
    not showing "input schmitt enabled" for pins that don't have it enabled.
    
    Fixes: 1bea6afbc842 ("pinctrl: mediatek: Refine mtk_pinconf_get()")
    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Message-ID: <20240327091336.3434141-2-wenst@chromium.org>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: mediatek: paris: Rework support for PIN_CONFIG_{INPUT,OUTPUT}_ENABLE [+ + +]
Author: Chen-Yu Tsai <wenst@chromium.org>
Date:   Wed Mar 27 17:13:34 2024 +0800

    pinctrl: mediatek: paris: Rework support for PIN_CONFIG_{INPUT,OUTPUT}_ENABLE
    
    [ Upstream commit c5d3b64c568a344e998830e0e94a7c04e372f89b ]
    
    There is a misinterpretation of some of the PIN_CONFIG_* options in this
    driver library. PIN_CONFIG_OUTPUT_ENABLE should refer to a buffer or
    switch in the output direction of the electrical path. The MediaTek
    hardware does not have such a thing. The driver incorrectly maps this
    option to the GPIO function's direction.
    
    Likewise, PIN_CONFIG_INPUT_ENABLE should refer to a buffer or switch in
    the input direction. The hardware does have such a mechanism, and is
    mapped to the IES bit. The driver however sets the direction in addition
    to the IES bit, which is incorrect. On readback, the IES bit isn't even
    considered.
    
    Ironically, the driver does not support readback for PIN_CONFIG_OUTPUT,
    while its readback of PIN_CONFIG_{INPUT,OUTPUT}_ENABLE is what it should
    be doing for PIN_CONFIG_OUTPUT.
    
    Rework support for these three options, so that PIN_CONFIG_OUTPUT_ENABLE
    is completely removed, PIN_CONFIG_INPUT_ENABLE is only linked to the IES
    bit, and PIN_CONFIG_OUTPUT is linked to the GPIO function's direction
    and output level.
    
    Fixes: 805250982bb5 ("pinctrl: mediatek: add pinctrl-paris that implements the vendor dt-bindings")
    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Message-ID: <20240327091336.3434141-3-wenst@chromium.org>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: pinctrl-aspeed-g6: Fix register offset for pinconf of GPIOR-T [+ + +]
Author: Billy Tsai <billy_tsai@aspeedtech.com>
Date:   Wed Mar 13 17:28:09 2024 +0800

    pinctrl: pinctrl-aspeed-g6: Fix register offset for pinconf of GPIOR-T
    
    [ Upstream commit c10cd03d69403fa0f00be8631bd4cb4690440ebd ]
    
    The register offset to disable the internal pull-down of GPIOR~T is 0x630
    instead of 0x620, as specified in the Ast2600 datasheet v15
    The datasheet can download from the official Aspeed website.
    
    Fixes: 15711ba6ff19 ("pinctrl: aspeed-g6: Add AST2600 pinconf support")
    Reported-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
    Signed-off-by: Billy Tsai <billy_tsai@aspeedtech.com>
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au>
    Message-ID: <20240313092809.2596644-1-billy_tsai@aspeedtech.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
power: rt9455: hide unused rt9455_boost_voltage_values [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Apr 3 10:06:27 2024 +0200

    power: rt9455: hide unused rt9455_boost_voltage_values
    
    [ Upstream commit 452d8950db3e839aba1bb13bc5378f4bac11fa04 ]
    
    The rt9455_boost_voltage_values[] array is only used when USB PHY
    support is enabled, causing a W=1 warning otherwise:
    
    drivers/power/supply/rt9455_charger.c:200:18: error: 'rt9455_boost_voltage_values' defined but not used [-Werror=unused-const-variable=]
    
    Enclose the definition in the same #ifdef as the references to it.
    
    Fixes: e86d69dd786e ("power_supply: Add support for Richtek RT9455 battery charger")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20240403080702.3509288-10-arnd@kernel.org
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

power: supply: mt6360_charger: Fix of_match for usb-otg-vbus regulator [+ + +]
Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Date:   Wed Apr 10 10:44:05 2024 +0200

    power: supply: mt6360_charger: Fix of_match for usb-otg-vbus regulator
    
    [ Upstream commit 1e0fb113646182e073539db96016b00cfeb18ecc ]
    
    The of_match shall correspond to the name of the regulator subnode,
    or the deprecated `regulator-compatible` property must be used:
    failing to do so, the regulator won't probe (and the driver will
    as well not probe).
    
    Since the devicetree binding for this driver is actually correct
    and wants DTs to use the "usb-otg-vbus-regulator" subnode name,
    fix this driver by aligning the `of_match` string to what the DT
    binding wants.
    
    Fixes: 0402e8ebb8b8 ("power: supply: mt6360_charger: add MT6360 charger support")
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
    Link: https://lore.kernel.org/r/20240410084405.1389378-1-angelogioacchino.delregno@collabora.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/pseries/iommu: LPAR panics during boot up with a frozen PE [+ + +]
Author: Gaurav Batra <gbatra@linux.ibm.com>
Date:   Mon Apr 22 15:51:41 2024 -0500

    powerpc/pseries/iommu: LPAR panics during boot up with a frozen PE
    
    [ Upstream commit 49a940dbdc3107fecd5e6d3063dc07128177e058 ]
    
    At the time of LPAR boot up, partition firmware provides Open Firmware
    property ibm,dma-window for the PE. This property is provided on the PCI
    bus the PE is attached to.
    
    There are execptions where the partition firmware might not provide this
    property for the PE at the time of LPAR boot up. One of the scenario is
    where the firmware has frozen the PE due to some error condition. This
    PE is frozen for 24 hours or unless the whole system is reinitialized.
    
    Within this time frame, if the LPAR is booted, the frozen PE will be
    presented to the LPAR but ibm,dma-window property could be missing.
    
    Today, under these circumstances, the LPAR oopses with NULL pointer
    dereference, when configuring the PCI bus the PE is attached to.
    
      BUG: Kernel NULL pointer dereference on read at 0x000000c8
      Faulting instruction address: 0xc0000000001024c0
      Oops: Kernel access of bad area, sig: 7 [#1]
      LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA pSeries
      Modules linked in:
      Supported: Yes
      CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.4.0-150600.9-default #1
      Hardware name: IBM,9043-MRX POWER10 (raw) 0x800200 0xf000006 of:IBM,FW1060.00 (NM1060_023) hv:phyp pSeries
      NIP:  c0000000001024c0 LR: c0000000001024b0 CTR: c000000000102450
      REGS: c0000000037db5c0 TRAP: 0300   Not tainted  (6.4.0-150600.9-default)
      MSR:  8000000002009033 <SF,VEC,EE,ME,IR,DR,RI,LE>  CR: 28000822  XER: 00000000
      CFAR: c00000000010254c DAR: 00000000000000c8 DSISR: 00080000 IRQMASK: 0
      ...
      NIP [c0000000001024c0] pci_dma_bus_setup_pSeriesLP+0x70/0x2a0
      LR [c0000000001024b0] pci_dma_bus_setup_pSeriesLP+0x60/0x2a0
      Call Trace:
        pci_dma_bus_setup_pSeriesLP+0x60/0x2a0 (unreliable)
        pcibios_setup_bus_self+0x1c0/0x370
        __of_scan_bus+0x2f8/0x330
        pcibios_scan_phb+0x280/0x3d0
        pcibios_init+0x88/0x12c
        do_one_initcall+0x60/0x320
        kernel_init_freeable+0x344/0x3e4
        kernel_init+0x34/0x1d0
        ret_from_kernel_user_thread+0x14/0x1c
    
    Fixes: b1fc44eaa9ba ("pseries/iommu/ddw: Fix kdump to work in absence of ibm,dma-window")
    Signed-off-by: Gaurav Batra <gbatra@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240422205141.10662-1-gbatra@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/pseries: make max polling consistent for longer H_CALLs [+ + +]
Author: Nayna Jain <nayna@linux.ibm.com>
Date:   Wed Apr 17 23:12:30 2024 -0400

    powerpc/pseries: make max polling consistent for longer H_CALLs
    
    [ Upstream commit 784354349d2c988590c63a5a001ca37b2a6d4da1 ]
    
    Currently, plpks_confirm_object_flushed() function polls for 5msec in
    total instead of 5sec.
    
    Keep max polling time consistent for all the H_CALLs, which take longer
    than expected, to be 5sec. Also, make use of fsleep() everywhere to
    insert delay.
    
    Reported-by: Nageswara R Sastry <rnsastry@linux.ibm.com>
    Fixes: 2454a7af0f2a ("powerpc/pseries: define driver for Platform KeyStore")
    Signed-off-by: Nayna Jain <nayna@linux.ibm.com>
    Tested-by: Nageswara R Sastry <rnsastry@linux.ibm.com>
    Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240418031230.170954-1-nayna@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powerpc/pseries: Move PLPKS constants to header file [+ + +]
Author: Russell Currey <ruscur@russell.cc>
Date:   Fri Feb 10 19:03:50 2023 +1100

    powerpc/pseries: Move PLPKS constants to header file
    
    [ Upstream commit 3def7a3e7c2ce2ab5e5c54561da7125206851be4 ]
    
    Move the constants defined in plpks.c to plpks.h, and standardise their
    naming, so that PLPKS consumers can make use of them later on.
    
    Signed-off-by: Russell Currey <ruscur@russell.cc>
    Co-developed-by: Andrew Donnellan <ajd@linux.ibm.com>
    Signed-off-by: Andrew Donnellan <ajd@linux.ibm.com>
    Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20230210080401.345462-16-ajd@linux.ibm.com
    Stable-dep-of: 784354349d2c ("powerpc/pseries: make max polling consistent for longer H_CALLs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powerpc/pseries: replace kmalloc with kzalloc in PLPKS driver [+ + +]
Author: Nayna Jain <nayna@linux.ibm.com>
Date:   Sun Nov 6 15:58:38 2022 -0500

    powerpc/pseries: replace kmalloc with kzalloc in PLPKS driver
    
    [ Upstream commit 212dd5cfbee7815f3c665a51c501701edb881599 ]
    
    Replace kmalloc with kzalloc in construct_auth() function to default
    initialize structure with zeroes.
    
    Signed-off-by: Nayna Jain <nayna@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20221106205839.600442-6-nayna@linux.ibm.com
    Stable-dep-of: 784354349d2c ("powerpc/pseries: make max polling consistent for longer H_CALLs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
qibfs: fix dentry leak [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Feb 25 23:58:42 2024 -0500

    qibfs: fix dentry leak
    
    [ Upstream commit aa23317d0268b309bb3f0801ddd0d61813ff5afb ]
    
    simple_recursive_removal() drops the pinning references to all positives
    in subtree.  For the cases when its argument has been kept alive by
    the pinning alone that's exactly the right thing to do, but here
    the argument comes from dcache lookup, that needs to be balanced by
    explicit dput().
    
    Fixes: e41d237818598 "qib_fs: switch to simple_recursive_removal()"
    Fucked-up-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Reapply "drm/qxl: simplify qxl_fence_wait" [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon May 6 13:28:59 2024 -0700

    Reapply "drm/qxl: simplify qxl_fence_wait"
    
    commit 3628e0383dd349f02f882e612ab6184e4bb3dc10 upstream.
    
    This reverts commit 07ed11afb68d94eadd4ffc082b97c2331307c5ea.
    
    Stephen Rostedt reports:
     "I went to run my tests on my VMs and the tests hung on boot up.
      Unfortunately, the most I ever got out was:
    
      [   93.607888] Testing event system initcall: OK
      [   93.667730] Running tests on all trace events:
      [   93.669757] Testing all events: OK
      [   95.631064] ------------[ cut here ]------------
      Timed out after 60 seconds"
    
    and further debugging points to a possible circular locking dependency
    between the console_owner locking and the worker pool locking.
    
    Reverting the commit allows Steve's VM to boot to completion again.
    
    [ This may obviously result in the "[TTM] Buffer eviction failed"
      messages again, which was the reason for that original revert. But at
      this point this seems preferable to a non-booting system... ]
    
    Reported-and-bisected-by: Steven Rostedt <rostedt@goodmis.org>
    Link: https://lore.kernel.org/all/20240502081641.457aa25f@gandalf.local.home/
    Acked-by: Maxime Ripard <mripard@kernel.org>
    Cc: Alex Constantino <dreaming.about.electric.sheep@gmail.com>
    Cc: Maxime Ripard <mripard@kernel.org>
    Cc: Timo Lindfors <timo.lindfors@iki.fi>
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: Gerd Hoffmann <kraxel@redhat.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
regulator: change devm_regulator_get_enable_optional() stub to return Ok [+ + +]
Author: Matti Vaittinen <mazziesaccount@gmail.com>
Date:   Tue Apr 23 14:38:28 2024 +0300

    regulator: change devm_regulator_get_enable_optional() stub to return Ok
    
    [ Upstream commit ff33132605c1a0acea59e4c523cb7c6fabe856b2 ]
    
    The devm_regulator_get_enable_optional() should be a 'call and forget'
    API, meaning, when it is used to enable the regulators, the API does not
    provide a handle to do any further control of the regulators. It gives
    no real benefit to return an error from the stub if CONFIG_REGULATOR is
    not set.
    
    On the contrary, returning an error is causing problems to drivers when
    hardware is such it works out just fine with no regulator control.
    Returning an error forces drivers to specifically handle the case where
    CONFIG_REGULATOR is not set, making the mere existence of the stub
    questionalble.
    
    Change the stub implementation for the
    devm_regulator_get_enable_optional() to return Ok so drivers do not
    separately handle the case where the CONFIG_REGULATOR is not set.
    
    Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
    Fixes: da279e6965b3 ("regulator: Add devm helpers for get and enable")
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/ZiedtOE00Zozd3XO@fedora
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: change stubbed devm_regulator_get_enable to return Ok [+ + +]
Author: Matti Vaittinen <mazziesaccount@gmail.com>
Date:   Mon Apr 22 09:38:33 2024 +0300

    regulator: change stubbed devm_regulator_get_enable to return Ok
    
    [ Upstream commit 96e20adc43c4f81e9163a5188cee75a6dd393e09 ]
    
    The devm_regulator_get_enable() should be a 'call and forget' API,
    meaning, when it is used to enable the regulators, the API does not
    provide a handle to do any further control of the regulators. It gives
    no real benefit to return an error from the stub if CONFIG_REGULATOR is
    not set.
    
    On the contrary, returning and error is causing problems to drivers when
    hardware is such it works out just fine with no regulator control.
    Returning an error forces drivers to specifically handle the case where
    CONFIG_REGULATOR is not set, making the mere existence of the stub
    questionalble. Furthermore, the stub of the regulator_enable() seems to
    be returning Ok.
    
    Change the stub implementation for the devm_regulator_get_enable() to
    return Ok so drivers do not separately handle the case where the
    CONFIG_REGULATOR is not set.
    
    Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
    Reported-by: Aleksander Mazur <deweloper@wp.pl>
    Suggested-by: Guenter Roeck <linux@roeck-us.net>
    Fixes: da279e6965b3 ("regulator: Add devm helpers for get and enable")
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/ZiYF6d1V1vSPcsJS@drtxq0yyyyyyyyyyyyyby-3.rev.dnainternet.fi
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: core: fix debugfs creation regression [+ + +]
Author: Johan Hovold <johan+linaro@kernel.org>
Date:   Thu May 9 15:33:04 2024 +0200

    regulator: core: fix debugfs creation regression
    
    commit 2a4b49bb58123bad6ec0e07b02845f74c23d5e04 upstream.
    
    regulator_get() may sometimes be called more than once for the same
    consumer device, something which before commit dbe954d8f163 ("regulator:
    core: Avoid debugfs: Directory ...  already present! error") resulted in
    errors being logged.
    
    A couple of recent commits broke the handling of such cases so that
    attributes are now erroneously created in the debugfs root directory the
    second time a regulator is requested and the log is filled with errors
    like:
    
            debugfs: File 'uA_load' in directory '/' already present!
            debugfs: File 'min_uV' in directory '/' already present!
            debugfs: File 'max_uV' in directory '/' already present!
            debugfs: File 'constraint_flags' in directory '/' already present!
    
    on any further calls.
    
    Fixes: 2715bb11cfff ("regulator: core: Fix more error checking for debugfs_create_dir()")
    Fixes: 08880713ceec ("regulator: core: Streamline debugfs operations")
    Cc: stable@vger.kernel.org
    Cc: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    Link: https://lore.kernel.org/r/20240509133304.8883-1-johan+linaro@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

regulator: mt6360: De-capitalize devicetree regulator subnodes [+ + +]
Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Date:   Tue Apr 9 16:44:38 2024 +0200

    regulator: mt6360: De-capitalize devicetree regulator subnodes
    
    [ Upstream commit d3cf8a17498dd9104c04ad28eeac3ef3339f9f9f ]
    
    The MT6360 regulator binding, the example in the MT6360 mfd binding, and
    the devicetree users of those bindings are rightfully declaring MT6360
    regulator subnodes with non-capital names, and luckily without using the
    deprecated regulator-compatible property.
    
    With this driver declaring capitalized BUCKx/LDOx as of_match string for
    the node names, obviously no regulator gets probed: fix that by changing
    the MT6360_REGULATOR_DESC macro to add a "match" parameter which gets
    assigned to the of_match.
    
    Fixes: d321571d5e4c ("regulator: mt6360: Add support for MT6360 regulator")
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://msgid.link/r/20240409144438.410060-1-angelogioacchino.delregno@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtnetlink: Correct nested IFLA_VF_VLAN_LIST attribute validation [+ + +]
Author: Roded Zats <rzats@paloaltonetworks.com>
Date:   Thu May 2 18:57:51 2024 +0300

    rtnetlink: Correct nested IFLA_VF_VLAN_LIST attribute validation
    
    [ Upstream commit 1aec77b2bb2ed1db0f5efc61c4c1ca3813307489 ]
    
    Each attribute inside a nested IFLA_VF_VLAN_LIST is assumed to be a
    struct ifla_vf_vlan_info so the size of such attribute needs to be at least
    of sizeof(struct ifla_vf_vlan_info) which is 14 bytes.
    The current size validation in do_setvfinfo is against NLA_HDRLEN (4 bytes)
    which is less than sizeof(struct ifla_vf_vlan_info) so this validation
    is not enough and a too small attribute might be cast to a
    struct ifla_vf_vlan_info, this might result in an out of bands
    read access when accessing the saved (casted) entry in ivvl.
    
    Fixes: 79aab093a0b5 ("net: Update API for VF vlan protocol 802.1ad support")
    Signed-off-by: Roded Zats <rzats@paloaltonetworks.com>
    Reviewed-by: Donald Hunter <donald.hunter@gmail.com>
    Link: https://lore.kernel.org/r/20240502155751.75705-1-rzats@paloaltonetworks.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rust: error: Rename to_kernel_errno() -> to_errno() [+ + +]
Author: Asahi Lina <lina@asahilina.net>
Date:   Mon Apr 3 18:48:10 2023 +0900

    rust: error: Rename to_kernel_errno() -> to_errno()
    
    commit 46384d0990bf99ed8b597e8794ea581e2a647710 upstream.
    
    This is kernel code, so specifying "kernel" is redundant. Let's simplify
    things and just call it to_errno().
    
    Reviewed-by: Gary Guo <gary@garyguo.net>
    Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
    Signed-off-by: Asahi Lina <lina@asahilina.net>
    Link: https://lore.kernel.org/r/20230224-rust-error-v3-1-03779bddc02b@asahilina.net
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: fix regexp in scripts/is_rust_module.sh [+ + +]
Author: Andrea Righi <andrea.righi@canonical.com>
Date:   Fri Feb 10 16:26:22 2023 +0100

    rust: fix regexp in scripts/is_rust_module.sh
    
    commit ccc4505454db10402d5284f22d8b7db62e636fc5 upstream.
    
    nm can use "R" or "r" to show read-only data sections, but
    scripts/is_rust_module.sh can only recognize "r", so with some versions
    of binutils it can fail to detect if a module is a Rust module or not.
    
    Right now we're using this script only to determine if we need to skip
    BTF generation (that is disabled globally if CONFIG_RUST is enabled),
    but it's still nice to fix this script to do the proper job.
    
    Moreover, with this patch applied I can also relax the constraint of
    "RUST depends on !DEBUG_INFO_BTF" and build a kernel with Rust and BTF
    enabled at the same time (of course BTF generation is still skipped for
    Rust modules).
    
    [ Miguel: The actual reason is likely to be a change on the Rust
      compiler between 1.61.0 and 1.62.0:
    
        echo '#[used] static S: () = ();' |
            rustup run 1.61.0 rustc --emit=obj --crate-type=lib - &&
            nm rust_out.o
    
        echo '#[used] static S: () = ();' |
            rustup run 1.62.0 rustc --emit=obj --crate-type=lib - &&
            nm rust_out.o
    
      Gives:
    
        0000000000000000 r _ZN8rust_out1S17h48027ce0da975467E
        0000000000000000 R _ZN8rust_out1S17h58e1f3d9c0e97cefE
    
      See https://godbolt.org/z/KE6jneoo4. ]
    
    Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
    Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
    Reviewed-by: Eric Curtin <ecurtin@redhat.com>
    Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: kernel: require `Send` for `Module` implementations [+ + +]
Author: Wedson Almeida Filho <walmeida@microsoft.com>
Date:   Thu Mar 28 16:54:54 2024 -0300

    rust: kernel: require `Send` for `Module` implementations
    
    [ Upstream commit 323617f649c0966ad5e741e47e27e06d3a680d8f ]
    
    The thread that calls the module initialisation code when a module is
    loaded is not guaranteed [in fact, it is unlikely] to be the same one
    that calls the module cleanup code on module unload, therefore, `Module`
    implementations must be `Send` to account for them moving from one
    thread to another implicitly.
    
    Signed-off-by: Wedson Almeida Filho <walmeida@microsoft.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Reviewed-by: Benno Lossin <benno.lossin@proton.me>
    Cc: stable@vger.kernel.org # 6.8.x: df70d04d5697: rust: phy: implement `Send` for `Registration`
    Cc: stable@vger.kernel.org
    Fixes: 247b365dc8dc ("rust: add `kernel` crate")
    Link: https://lore.kernel.org/r/20240328195457.225001-3-wedsonaf@gmail.com
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rust: macros: fix soundness issue in `module!` macro [+ + +]
Author: Benno Lossin <benno.lossin@proton.me>
Date:   Mon Apr 1 18:52:50 2024 +0000

    rust: macros: fix soundness issue in `module!` macro
    
    commit 7044dcff8301b29269016ebd17df27c4736140d2 upstream.
    
    The `module!` macro creates glue code that are called by C to initialize
    the Rust modules using the `Module::init` function. Part of this glue
    code are the local functions `__init` and `__exit` that are used to
    initialize/destroy the Rust module.
    
    These functions are safe and also visible to the Rust mod in which the
    `module!` macro is invoked. This means that they can be called by other
    safe Rust code. But since they contain `unsafe` blocks that rely on only
    being called at the right time, this is a soundness issue.
    
    Wrap these generated functions inside of two private modules, this
    guarantees that the public functions cannot be called from the outside.
    Make the safe functions `unsafe` and add SAFETY comments.
    
    Cc: stable@vger.kernel.org
    Reported-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
    Closes: https://github.com/Rust-for-Linux/linux/issues/629
    Fixes: 1fbde52bde73 ("rust: add `macros` crate")
    Signed-off-by: Benno Lossin <benno.lossin@proton.me>
    Reviewed-by: Wedson Almeida Filho <walmeida@microsoft.com>
    Link: https://lore.kernel.org/r/20240401185222.12015-1-benno.lossin@proton.me
    [ Moved `THIS_MODULE` out of the private-in-private modules since it
      should remain public, as Dirk Behme noticed [1]. Capitalized comments,
      avoided newline in non-list SAFETY comments and reworded to add
      Reported-by and newline. ]
    Link: https://rust-for-linux.zulipchat.com/#narrow/stream/291565-Help/topic/x/near/433512583 [1]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: module: place generated init_module() function in .init.text [+ + +]
Author: Thomas Bertschinger <tahbertschinger@gmail.com>
Date:   Tue Feb 6 08:38:06 2024 -0700

    rust: module: place generated init_module() function in .init.text
    
    commit 1b6170ff7a203a5e8354f19b7839fe8b897a9c0d upstream.
    
    Currently Rust kernel modules have their init code placed in the `.text`
    section of the .ko file. I don't think this causes any real problems
    for Rust modules as long as all code called during initialization lives
    in `.text`.
    
    However, if a Rust `init_module()` function (that lives in `.text`)
    calls a function marked with `__init` (in C) or
    `#[link_section = ".init.text"]` (in Rust), then a warning is
    generated by modpost because that function lives in `.init.text`.
    For example:
    
    WARNING: modpost: fs/bcachefs/bcachefs: section mismatch in reference: init_module+0x6 (section: .text) -> _RNvXCsj7d3tFpT5JS_15bcachefs_moduleNtB2_8BcachefsNtCsjDtqRIL3JAG_6kernel6Module4init (section: .init.text)
    
    I ran into this while experimenting with converting the bcachefs kernel
    module from C to Rust. The module's `init()`, written in Rust, calls C
    functions like `bch2_vfs_init()` which are placed in `.init.text`.
    
    This patch places the macro-generated `init_module()` Rust function in
    the `.init.text` section. It also marks `init_module()` as unsafe--now
    it may not be called after module initialization completes because it
    may be freed already.
    
    Note that this is not enough on its own to actually get all the module
    initialization code in that section. The module author must still add
    the `#[link_section = ".init.text"]` attribute to the Rust `init()` in
    the `impl kernel::Module` block in order to then call `__init`
    functions. However, this patch enables module authors do so, when
    previously it would not be possible (without warnings).
    
    Signed-off-by: Thomas Bertschinger <tahbertschinger@gmail.com>
    Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240206153806.567055-1-tahbertschinger@gmail.com
    [ Reworded title to add prefix. ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/cio: Ensure the copied buf is NUL terminated [+ + +]
Author: Bui Quang Minh <minhquangbui99@gmail.com>
Date:   Wed Apr 24 21:44:22 2024 +0700

    s390/cio: Ensure the copied buf is NUL terminated
    
    [ Upstream commit da7c622cddd4fe36be69ca61e8c42e43cde94784 ]
    
    Currently, we allocate a lbuf-sized kernel buffer and copy lbuf from
    userspace to that buffer. Later, we use scanf on this buffer but we don't
    ensure that the string is terminated inside the buffer, this can lead to
    OOB read when using scanf. Fix this issue by using memdup_user_nul instead.
    
    Fixes: a4f17cc72671 ("s390/cio: add CRW inject functionality")
    Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-5-f1f1b53a10f4@gmail.com
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/mm: Fix clearing storage keys for huge pages [+ + +]
Author: Claudio Imbrenda <imbrenda@linux.ibm.com>
Date:   Tue Apr 16 13:42:20 2024 +0200

    s390/mm: Fix clearing storage keys for huge pages
    
    [ Upstream commit 412050af2ea39407fe43324b0be4ab641530ce88 ]
    
    The function __storage_key_init_range() expects the end address to be
    the first byte outside the range to be initialized. I.e. end - start
    should be the size of the area to be initialized.
    
    The current code works because __storage_key_init_range() will still loop
    over every page in the range, but it is slower than using sske_frame().
    
    Fixes: 3afdfca69870 ("s390/mm: Clear skeys for newly mapped huge guest pmds")
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240416114220.28489-3-imbrenda@linux.ibm.com
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

s390/mm: Fix storage key clearing for guest huge pages [+ + +]
Author: Claudio Imbrenda <imbrenda@linux.ibm.com>
Date:   Tue Apr 16 13:42:19 2024 +0200

    s390/mm: Fix storage key clearing for guest huge pages
    
    [ Upstream commit 843c3280686fc1a83d89ee1e0b5599c9f6b09d0c ]
    
    The function __storage_key_init_range() expects the end address to be
    the first byte outside the range to be initialized. I.e. end - start
    should be the size of the area to be initialized.
    
    The current code works because __storage_key_init_range() will still loop
    over every page in the range, but it is slower than using sske_frame().
    
    Fixes: 964c2c05c9f3 ("s390/mm: Clear huge page storage keys on enable_skey")
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240416114220.28489-2-imbrenda@linux.ibm.com
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/qeth: Fix kernel panic after setting hsuid [+ + +]
Author: Alexandra Winter <wintera@linux.ibm.com>
Date:   Tue Apr 30 11:10:04 2024 +0200

    s390/qeth: Fix kernel panic after setting hsuid
    
    [ Upstream commit 8a2e4d37afb8500b276e5ee903dee06f50ab0494 ]
    
    Symptom:
    When the hsuid attribute is set for the first time on an IQD Layer3
    device while the corresponding network interface is already UP,
    the kernel will try to execute a napi function pointer that is NULL.
    
    Example:
    ---------------------------------------------------------------------------
    [ 2057.572696] illegal operation: 0001 ilc:1 [#1] SMP
    [ 2057.572702] Modules linked in: af_iucv qeth_l3 zfcp scsi_transport_fc sunrpc nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6
    nft_reject nft_ct nf_tables_set nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables libcrc32c nfnetlink ghash_s390 prng xts aes_s390 des_s390 de
    s_generic sha3_512_s390 sha3_256_s390 sha512_s390 vfio_ccw vfio_mdev mdev vfio_iommu_type1 eadm_sch vfio ext4 mbcache jbd2 qeth_l2 bridge stp llc dasd_eckd_mod qeth dasd_mod
     qdio ccwgroup pkey zcrypt
    [ 2057.572739] CPU: 6 PID: 60182 Comm: stress_client Kdump: loaded Not tainted 4.18.0-541.el8.s390x #1
    [ 2057.572742] Hardware name: IBM 3931 A01 704 (LPAR)
    [ 2057.572744] Krnl PSW : 0704f00180000000 0000000000000002 (0x2)
    [ 2057.572748]            R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:3 PM:0 RI:0 EA:3
    [ 2057.572751] Krnl GPRS: 0000000000000004 0000000000000000 00000000a3b008d8 0000000000000000
    [ 2057.572754]            00000000a3b008d8 cb923a29c779abc5 0000000000000000 00000000814cfd80
    [ 2057.572756]            000000000000012c 0000000000000000 00000000a3b008d8 00000000a3b008d8
    [ 2057.572758]            00000000bab6d500 00000000814cfd80 0000000091317e46 00000000814cfc68
    [ 2057.572762] Krnl Code:#0000000000000000: 0000                illegal
                             >0000000000000002: 0000                illegal
                              0000000000000004: 0000                illegal
                              0000000000000006: 0000                illegal
                              0000000000000008: 0000                illegal
                              000000000000000a: 0000                illegal
                              000000000000000c: 0000                illegal
                              000000000000000e: 0000                illegal
    [ 2057.572800] Call Trace:
    [ 2057.572801] ([<00000000ec639700>] 0xec639700)
    [ 2057.572803]  [<00000000913183e2>] net_rx_action+0x2ba/0x398
    [ 2057.572809]  [<0000000091515f76>] __do_softirq+0x11e/0x3a0
    [ 2057.572813]  [<0000000090ce160c>] do_softirq_own_stack+0x3c/0x58
    [ 2057.572817] ([<0000000090d2cbd6>] do_softirq.part.1+0x56/0x60)
    [ 2057.572822]  [<0000000090d2cc60>] __local_bh_enable_ip+0x80/0x98
    [ 2057.572825]  [<0000000091314706>] __dev_queue_xmit+0x2be/0xd70
    [ 2057.572827]  [<000003ff803dd6d6>] afiucv_hs_send+0x24e/0x300 [af_iucv]
    [ 2057.572830]  [<000003ff803dd88a>] iucv_send_ctrl+0x102/0x138 [af_iucv]
    [ 2057.572833]  [<000003ff803de72a>] iucv_sock_connect+0x37a/0x468 [af_iucv]
    [ 2057.572835]  [<00000000912e7e90>] __sys_connect+0xa0/0xd8
    [ 2057.572839]  [<00000000912e9580>] sys_socketcall+0x228/0x348
    [ 2057.572841]  [<0000000091514e1a>] system_call+0x2a6/0x2c8
    [ 2057.572843] Last Breaking-Event-Address:
    [ 2057.572844]  [<0000000091317e44>] __napi_poll+0x4c/0x1d8
    [ 2057.572846]
    [ 2057.572847] Kernel panic - not syncing: Fatal exception in interrupt
    -------------------------------------------------------------------------------------------
    
    Analysis:
    There is one napi structure per out_q: card->qdio.out_qs[i].napi
    The napi.poll functions are set during qeth_open().
    
    Since
    commit 1cfef80d4c2b ("s390/qeth: Don't call dev_close/dev_open (DOWN/UP)")
    qeth_set_offline()/qeth_set_online() no longer call dev_close()/
    dev_open(). So if qeth_free_qdio_queues() cleared
    card->qdio.out_qs[i].napi.poll while the network interface was UP and the
    card was offline, they are not set again.
    
    Reproduction:
    chzdev -e $devno layer2=0
    ip link set dev $network_interface up
    echo 0 > /sys/bus/ccwgroup/devices/0.0.$devno/online
    echo foo > /sys/bus/ccwgroup/devices/0.0.$devno/hsuid
    echo 1 > /sys/bus/ccwgroup/devices/0.0.$devno/online
    -> Crash (can be enforced e.g. by af_iucv connect(), ip link down/up, ...)
    
    Note that a Completion Queue (CQ) is only enabled or disabled, when hsuid
    is set for the first time or when it is removed.
    
    Workarounds:
    - Set hsuid before setting the device online for the first time
    or
    - Use chzdev -d $devno; chzdev $devno hsuid=xxx; chzdev -e $devno;
    to set hsuid on an existing device. (this will remove and recreate the
    network interface)
    
    Fix:
    There is no need to free the output queues when a completion queue is
    added or removed.
    card->qdio.state now indicates whether the inbound buffer pool and the
    outbound queues are allocated.
    card->qdio.c_q indicates whether a CQ is allocated.
    
    Fixes: 1cfef80d4c2b ("s390/qeth: Don't call dev_close/dev_open (DOWN/UP)")
    Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://lore.kernel.org/r/20240430091004.2265683-1-wintera@linux.ibm.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/vdso: Add CFI for RA register to asm macro vdso_func [+ + +]
Author: Jens Remus <jremus@linux.ibm.com>
Date:   Tue Apr 23 17:35:52 2024 +0200

    s390/vdso: Add CFI for RA register to asm macro vdso_func
    
    [ Upstream commit b961ec10b9f9719987470236feb50c967db5a652 ]
    
    The return-address (RA) register r14 is specified as volatile in the
    s390x ELF ABI [1]. Nevertheless proper CFI directives must be provided
    for an unwinder to restore the return address, if the RA register
    value is changed from its value at function entry, as it is the case.
    
    [1]: s390x ELF ABI, https://github.com/IBM/s390x-abi/releases
    
    Fixes: 4bff8cb54502 ("s390: convert to GENERIC_VDSO")
    Signed-off-by: Jens Remus <jremus@linux.ibm.com>
    Acked-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: bnx2fc: Remove spin_lock_bh while releasing resources after upload [+ + +]
Author: Saurav Kashyap <skashyap@marvell.com>
Date:   Fri Mar 15 12:44:27 2024 +0530

    scsi: bnx2fc: Remove spin_lock_bh while releasing resources after upload
    
    [ Upstream commit c214ed2a4dda35b308b0b28eed804d7ae66401f9 ]
    
    The session resources are used by FW and driver when session is offloaded,
    once session is uploaded these resources are not used. The lock is not
    required as these fields won't be used any longer. The offload and upload
    calls are sequential, hence lock is not required.
    
    This will suppress following BUG_ON():
    
    [  449.843143] ------------[ cut here ]------------
    [  449.848302] kernel BUG at mm/vmalloc.c:2727!
    [  449.853072] invalid opcode: 0000 [#1] PREEMPT SMP PTI
    [  449.858712] CPU: 5 PID: 1996 Comm: kworker/u24:2 Not tainted 5.14.0-118.el9.x86_64 #1
    Rebooting.
    [  449.867454] Hardware name: Dell Inc. PowerEdge R730/0WCJNT, BIOS 2.3.4 11/08/2016
    [  449.876966] Workqueue: fc_rport_eq fc_rport_work [libfc]
    [  449.882910] RIP: 0010:vunmap+0x2e/0x30
    [  449.887098] Code: 00 65 8b 05 14 a2 f0 4a a9 00 ff ff 00 75 1b 55 48 89 fd e8 34 36 79 00 48 85 ed 74 0b 48 89 ef 31 f6 5d e9 14 fc ff ff 5d c3 <0f> 0b 0f 1f 44 00 00 41 57 41 56 49 89 ce 41 55 49 89 fd 41 54 41
    [  449.908054] RSP: 0018:ffffb83d878b3d68 EFLAGS: 00010206
    [  449.913887] RAX: 0000000080000201 RBX: ffff8f4355133550 RCX: 000000000d400005
    [  449.921843] RDX: 0000000000000001 RSI: 0000000000001000 RDI: ffffb83da53f5000
    [  449.929808] RBP: ffff8f4ac6675800 R08: ffffb83d878b3d30 R09: 00000000000efbdf
    [  449.937774] R10: 0000000000000003 R11: ffff8f434573e000 R12: 0000000000001000
    [  449.945736] R13: 0000000000001000 R14: ffffb83da53f5000 R15: ffff8f43d4ea3ae0
    [  449.953701] FS:  0000000000000000(0000) GS:ffff8f529fc80000(0000) knlGS:0000000000000000
    [  449.962732] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  449.969138] CR2: 00007f8cf993e150 CR3: 0000000efbe10003 CR4: 00000000003706e0
    [  449.977102] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  449.985065] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  449.993028] Call Trace:
    [  449.995756]  __iommu_dma_free+0x96/0x100
    [  450.000139]  bnx2fc_free_session_resc+0x67/0x240 [bnx2fc]
    [  450.006171]  bnx2fc_upload_session+0xce/0x100 [bnx2fc]
    [  450.011910]  bnx2fc_rport_event_handler+0x9f/0x240 [bnx2fc]
    [  450.018136]  fc_rport_work+0x103/0x5b0 [libfc]
    [  450.023103]  process_one_work+0x1e8/0x3c0
    [  450.027581]  worker_thread+0x50/0x3b0
    [  450.031669]  ? rescuer_thread+0x370/0x370
    [  450.036143]  kthread+0x149/0x170
    [  450.039744]  ? set_kthread_struct+0x40/0x40
    [  450.044411]  ret_from_fork+0x22/0x30
    [  450.048404] Modules linked in: vfat msdos fat xfs nfs_layout_nfsv41_files rpcsec_gss_krb5 auth_rpcgss nfsv4 dns_resolver dm_service_time qedf qed crc8 bnx2fc libfcoe libfc scsi_transport_fc intel_rapl_msr intel_rapl_common x86_pkg_temp_thermal intel_powerclamp dcdbas rapl intel_cstate intel_uncore mei_me pcspkr mei ipmi_ssif lpc_ich ipmi_si fuse zram ext4 mbcache jbd2 loop nfsv3 nfs_acl nfs lockd grace fscache netfs irdma ice sd_mod t10_pi sg ib_uverbs ib_core 8021q garp mrp stp llc mgag200 i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt mxm_wmi fb_sys_fops cec crct10dif_pclmul ahci crc32_pclmul bnx2x drm ghash_clmulni_intel libahci rfkill i40e libata megaraid_sas mdio wmi sunrpc lrw dm_crypt dm_round_robin dm_multipath dm_snapshot dm_bufio dm_mirror dm_region_hash dm_log dm_zero dm_mod linear raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx raid6_pq libcrc32c crc32c_intel raid1 raid0 iscsi_ibft squashfs be2iscsi bnx2i cnic uio cxgb4i cxgb4 tls
    [  450.048497]  libcxgbi libcxgb qla4xxx iscsi_boot_sysfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi edd ipmi_devintf ipmi_msghandler
    [  450.159753] ---[ end trace 712de2c57c64abc8 ]---
    
    Reported-by: Guangwu Zhang <guazhang@redhat.com>
    Signed-off-by: Saurav Kashyap <skashyap@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240315071427.31842-1-skashyap@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: lpfc: Move NPIV's transport unregistration to after resource clean up [+ + +]
Author: Justin Tee <justin.tee@broadcom.com>
Date:   Tue Mar 5 12:04:53 2024 -0800

    scsi: lpfc: Move NPIV's transport unregistration to after resource clean up
    
    [ Upstream commit 4ddf01f2f1504fa08b766e8cfeec558e9f8eef6c ]
    
    There are cases after NPIV deletion where the fabric switch still believes
    the NPIV is logged into the fabric.  This occurs when a vport is
    unregistered before the Remove All DA_ID CT and LOGO ELS are sent to the
    fabric.
    
    Currently fc_remove_host(), which calls dev_loss_tmo for all D_IDs including
    the fabric D_ID, removes the last ndlp reference and frees the ndlp rport
    object.  This sometimes causes the race condition where the final DA_ID and
    LOGO are skipped from being sent to the fabric switch.
    
    Fix by moving the fc_remove_host() and scsi_remove_host() calls after DA_ID
    and LOGO are sent.
    
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Link: https://lore.kernel.org/r/20240305200503.57317-3-justintee8345@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: lpfc: Release hbalock before calling lpfc_worker_wake_up() [+ + +]
Author: Justin Tee <justin.tee@broadcom.com>
Date:   Tue Mar 5 12:04:57 2024 -0800

    scsi: lpfc: Release hbalock before calling lpfc_worker_wake_up()
    
    [ Upstream commit ded20192dff31c91cef2a04f7e20e60e9bb887d3 ]
    
    lpfc_worker_wake_up() calls the lpfc_work_done() routine, which takes the
    hbalock.  Thus, lpfc_worker_wake_up() should not be called while holding the
    hbalock to avoid potential deadlock.
    
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Link: https://lore.kernel.org/r/20240305200503.57317-7-justintee8345@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: lpfc: Replace hbalock with ndlp lock in lpfc_nvme_unregister_port() [+ + +]
Author: Justin Tee <justin.tee@broadcom.com>
Date:   Tue Mar 5 12:04:56 2024 -0800

    scsi: lpfc: Replace hbalock with ndlp lock in lpfc_nvme_unregister_port()
    
    [ Upstream commit d11272be497e48a8e8f980470eb6b70e92eed0ce ]
    
    The ndlp object update in lpfc_nvme_unregister_port() should be protected
    by the ndlp lock rather than hbalock.
    
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Link: https://lore.kernel.org/r/20240305200503.57317-6-justintee8345@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: lpfc: Update lpfc_ramp_down_queue_handler() logic [+ + +]
Author: Justin Tee <justin.tee@broadcom.com>
Date:   Tue Mar 5 12:04:55 2024 -0800

    scsi: lpfc: Update lpfc_ramp_down_queue_handler() logic
    
    [ Upstream commit bb011631435c705cdeddca68d5c85fd40a4320f9 ]
    
    Typically when an out of resource CQE status is detected, the
    lpfc_ramp_down_queue_handler() logic is called to help reduce I/O load by
    reducing an sdev's queue_depth.
    
    However, the current lpfc_rampdown_queue_depth() logic does not help reduce
    queue_depth.  num_cmd_success is never updated and is always zero, which
    means new_queue_depth will always be set to sdev->queue_depth.  So,
    new_queue_depth = sdev->queue_depth - new_queue_depth always sets
    new_queue_depth to zero.  And, scsi_change_queue_depth(sdev, 0) is
    essentially a no-op.
    
    Change the lpfc_ramp_down_queue_handler() logic to set new_queue_depth
    equal to sdev->queue_depth subtracted from number of times num_rsrc_err was
    incremented.  If num_rsrc_err is >= sdev->queue_depth, then set
    new_queue_depth equal to 1.  Eventually, the frequency of Good_Status
    frames will signal SCSI upper layer to auto increase the queue_depth back
    to the driver default of 64 via scsi_handle_queue_ramp_up().
    
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Link: https://lore.kernel.org/r/20240305200503.57317-5-justintee8345@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: mpi3mr: Avoid memcpy field-spanning write WARNING [+ + +]
Author: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Date:   Sat Mar 23 17:41:55 2024 +0900

    scsi: mpi3mr: Avoid memcpy field-spanning write WARNING
    
    [ Upstream commit 429846b4b6ce9853e0d803a2357bb2e55083adf0 ]
    
    When the "storcli2 show" command is executed for eHBA-9600, mpi3mr driver
    prints this WARNING message:
    
      memcpy: detected field-spanning write (size 128) of single field "bsg_reply_buf->reply_buf" at drivers/scsi/mpi3mr/mpi3mr_app.c:1658 (size 1)
      WARNING: CPU: 0 PID: 12760 at drivers/scsi/mpi3mr/mpi3mr_app.c:1658 mpi3mr_bsg_request+0x6b12/0x7f10 [mpi3mr]
    
    The cause of the WARN is 128 bytes memcpy to the 1 byte size array "__u8
    replay_buf[1]" in the struct mpi3mr_bsg_in_reply_buf. The array is intended
    to be a flexible length array, so the WARN is a false positive.
    
    To suppress the WARN, remove the constant number '1' from the array
    declaration and clarify that it has flexible length. Also, adjust the
    memory allocation size to match the change.
    
    Suggested-by: Sathya Prakash Veerichetty <sathya.prakash@broadcom.com>
    Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Link: https://lore.kernel.org/r/20240323084155.166835-1-shinichiro.kawasaki@wdc.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: target: Fix SELinux error when systemd-modules loads the target module [+ + +]
Author: Maurizio Lombardi <mlombard@redhat.com>
Date:   Thu Feb 15 15:39:43 2024 +0100

    scsi: target: Fix SELinux error when systemd-modules loads the target module
    
    [ Upstream commit 97a54ef596c3fd24ec2b227ba8aaf2cf5415e779 ]
    
    If the systemd-modules service loads the target module, the credentials of
    that userspace process will be used to validate the access to the target db
    directory.  SELinux will prevent it, reporting an error like the following:
    
    kernel: audit: type=1400 audit(1676301082.205:4): avc: denied  { read }
    for  pid=1020 comm="systemd-modules" name="target" dev="dm-3"
    ino=4657583 scontext=system_u:system_r:systemd_modules_load_t:s0
    tcontext=system_u:object_r:targetd_etc_rw_t:s0 tclass=dir permissive=0
    
    Fix the error by using the kernel credentials to access the db directory
    
    Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
    Link: https://lore.kernel.org/r/20240215143944.847184-2-mlombard@redhat.com
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: WLUN suspend dev/link state error recovery [+ + +]
Author: Peter Wang <peter.wang@mediatek.com>
Date:   Fri Mar 29 09:50:36 2024 +0800

    scsi: ufs: core: WLUN suspend dev/link state error recovery
    
    [ Upstream commit 6bc5e70b1c792b31b497e48b4668a9a2909aca0d ]
    
    When wl suspend error occurs, for example BKOP or SSU timeout, the host
    triggers an error handler and returns -EBUSY to break the wl suspend
    process.  However, it is possible for the runtime PM to enter wl suspend
    again before the error handler has finished, and return -EINVAL because the
    device is in an error state. To address this, ensure that the rumtime PM
    waits for the error handler to finish, or trigger the error handler in such
    cases, because returning -EINVAL can cause the I/O to hang.
    
    Signed-off-by: Peter Wang <peter.wang@mediatek.com>
    Link: https://lore.kernel.org/r/20240329015036.15707-1-peter.wang@mediatek.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: timers: Fix valid-adjtimex signed left-shift undefined behavior [+ + +]
Author: John Stultz <jstultz@google.com>
Date:   Tue Apr 9 13:22:12 2024 -0700

    selftests: timers: Fix valid-adjtimex signed left-shift undefined behavior
    
    [ Upstream commit 076361362122a6d8a4c45f172ced5576b2d4a50d ]
    
    The struct adjtimex freq field takes a signed value who's units are in
    shifted (<<16) parts-per-million.
    
    Unfortunately for negative adjustments, the straightforward use of:
    
      freq = ppm << 16 trips undefined behavior warnings with clang:
    
    valid-adjtimex.c:66:6: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
            -499<<16,
            ~~~~^
    valid-adjtimex.c:67:6: warning: shifting a negative signed value is undefined [-Wshift-negative-value]
            -450<<16,
            ~~~~^
    ..
    
    Fix it by using a multiply by (1 << 16) instead of shifting negative values
    in the valid-adjtimex test case. Align the values for better readability.
    
    Reported-by: Lee Jones <joneslee@google.com>
    Reported-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Signed-off-by: John Stultz <jstultz@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Link: https://lore.kernel.org/r/20240409202222.2830476-1-jstultz@google.com
    Link: https://lore.kernel.org/lkml/0c6d4f0d-2064-4444-986b-1d1ed782135f@collabora.com/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
slimbus: qcom-ngd-ctrl: Add timeout for wait operation [+ + +]
Author: Viken Dadhaniya <quic_vdadhani@quicinc.com>
Date:   Tue Apr 30 10:12:38 2024 +0100

    slimbus: qcom-ngd-ctrl: Add timeout for wait operation
    
    commit 98241a774db49988f25b7b3657026ce51ccec293 upstream.
    
    In current driver qcom_slim_ngd_up_worker() indefinitely
    waiting for ctrl->qmi_up completion object. This is
    resulting in workqueue lockup on Kthread.
    
    Added wait_for_completion_interruptible_timeout to
    allow the thread to wait for specific timeout period and
    bail out instead waiting infinitely.
    
    Fixes: a899d324863a ("slimbus: qcom-ngd-ctrl: add Sub System Restart support")
    Cc: stable@vger.kernel.org
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Viken Dadhaniya <quic_vdadhani@quicinc.com>
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Link: https://lore.kernel.org/r/20240430091238.35209-2-srinivas.kandagatla@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb3: missing lock when picking channel [+ + +]
Author: Steve French <stfrench@microsoft.com>
Date:   Thu Apr 25 11:30:16 2024 -0500

    smb3: missing lock when picking channel
    
    [ Upstream commit 8094a600245e9b28eb36a13036f202ad67c1f887 ]
    
    Coverity spotted a place where we should have been holding the
    channel lock when accessing the ses channel index.
    
    Addresses-Coverity: 1582039 ("Data race condition (MISSING_LOCK)")
    Cc: stable@vger.kernel.org
    Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: axi-spi-engine: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Fri Mar 3 18:19:22 2023 +0100

    spi: axi-spi-engine: Convert to platform remove callback returning void
    
    [ Upstream commit fc87abbef23413943457459e2c473ce607b4dd24 ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is (mostly) ignored
    and this typically results in resource leaks. To improve here there is a
    quest to make the remove callback return void. In the first step of this
    quest all drivers are converted to .remove_new() which already returns
    void.
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/20230303172041.2103336-9-u.kleine-koenig@pengutronix.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: axi-spi-engine: fix version format string [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Fri Apr 12 17:52:48 2024 -0500

    spi: axi-spi-engine: fix version format string
    
    [ Upstream commit 0064db9ce4aa7cc794e6f4aed60dee0f94fc9bcf ]
    
    The version format string in the AXI SPI Engine driver was probably
    intended to print the version number in the same format as the DT
    compatible string (e.g. 1.00.a). However, the version just uses
    semantic versioning so formatting the patch number as a character
    is not correct and would result in printing control characters for
    patch numbers less than 32.
    
    Fixes: b1353d1c1d45 ("spi: Add Analog Devices AXI SPI Engine controller support")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20240412-axi-spi-engine-version-printf-v1-1-95e1e842c1a6@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: axi-spi-engine: move msg state to new struct [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Fri Nov 17 14:13:00 2023 -0600

    spi: axi-spi-engine: move msg state to new struct
    
    [ Upstream commit 7f970ecb77b6759d37ee743fc36fc0daba960e75 ]
    
    This moves the message state in the AXI SPI Engine driver to a new
    struct spi_engine_msg_state.
    
    Previously, the driver state contained various pointers that pointed
    to memory owned by a struct spi_message. However, it did not set any of
    these pointers to NULL when a message was completed. This could lead to
    use after free bugs.
    
    Example of how this could happen:
    1. SPI core calls into spi_engine_transfer_one_message() with msg1.
    2. Assume something was misconfigured and spi_engine_tx_next() is not
       called enough times in interrupt callbacks for msg1 such that
       spi_engine->tx_xfer is never set to NULL before the msg1 completes.
    3. SYNC interrupt is received and spi_finalize_current_message() is
       called for msg1. spi_engine->msg is set to NULL but no other
       message-specific state is reset.
    4. Caller that sent msg1 is notified of the completion and frees msg1
       and the associated xfers and tx/rx buffers.
    4. SPI core calls into spi_engine_transfer_one_message() with msg2.
    5. When spi_engine_tx_next() is called for msg2, spi_engine->tx_xfer is
       still be pointing to an xfer from msg1, which was already freed.
       spi_engine_xfer_next() tries to access xfer->transfer_list of one
       of the freed xfers and we get a segfault or undefined behavior.
    
    To avoid issues like this, instead of putting per-message state in the
    driver state struct, we can make use of the struct spi_message::state
    field to store a pointer to a new struct spi_engine_msg_state. This way,
    all of the state that belongs to specific message stays with that
    message and we don't have to remember to manually reset all aspects of
    the message state when a message is completed. Rather, a new state is
    allocated for each message.
    
    Most of the changes are just renames where the state is accessed. One
    place where this wasn't straightforward was the sync_id member. This
    has been changed to use ida_alloc_range() since we needed to separate
    the per-message sync_id from the per-controller next available sync_id.
    
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20231117-axi-spi-engine-series-1-v1-9-cc59db999b87@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: axi-spi-engine: simplify driver data allocation [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Fri Nov 17 14:12:54 2023 -0600

    spi: axi-spi-engine: simplify driver data allocation
    
    [ Upstream commit 9e4ce5220eedea2cc440f3961dec1b5122e815b2 ]
    
    This simplifies the private data allocation in the AXI SPI Engine driver
    by making use of the feature built into the spi_alloc_host() function
    instead of doing it manually.
    
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20231117-axi-spi-engine-series-1-v1-3-cc59db999b87@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: axi-spi-engine: use common AXI macros [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Fri Feb 2 15:31:32 2024 -0600

    spi: axi-spi-engine: use common AXI macros
    
    [ Upstream commit 88c2b56c2690061121cad03f0f551db465287575 ]
    
    This avoid duplicating the same macros in multiple drivers by reusing
    the common AXI macros for the version register.
    
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Reviewed-by: Nuno Sa <nuno.sa@analog.com>
    Link: https://lore.kernel.org/r/20240202213132.3863124-2-dlechner@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: axi-spi-engine: use devm_spi_alloc_host() [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Fri Nov 17 14:12:55 2023 -0600

    spi: axi-spi-engine: use devm_spi_alloc_host()
    
    [ Upstream commit e12cd96e8e93044646fdf4b2c9a1de62cfa01e7c ]
    
    This modifies the AXI SPI Engine driver to use devm_spi_alloc_host()
    instead of spi_alloc_host() to simplify the code a bit.
    
    In addition to simplifying the error paths in the probe function, we
    can also remove spi_controller_get/put() calls in the remove function
    since devm_spi_alloc_host() sets a flag to no longer decrement the
    controller reference count in the spi_unregister_controller() function.
    
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20231117-axi-spi-engine-series-1-v1-4-cc59db999b87@baylibre.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: fix null pointer dereference within spi_sync [+ + +]
Author: Mans Rullgard <mans@mansr.com>
Date:   Tue Apr 30 19:27:05 2024 +0100

    spi: fix null pointer dereference within spi_sync
    
    [ Upstream commit 4756fa529b2f12b7cb8f21fe229b0f6f47190829 ]
    
    If spi_sync() is called with the non-empty queue and the same spi_message
    is then reused, the complete callback for the message remains set while
    the context is cleared, leading to a null pointer dereference when the
    callback is invoked from spi_finalize_current_message().
    
    With function inlining disabled, the call stack might look like this:
    
      _raw_spin_lock_irqsave from complete_with_flags+0x18/0x58
      complete_with_flags from spi_complete+0x8/0xc
      spi_complete from spi_finalize_current_message+0xec/0x184
      spi_finalize_current_message from spi_transfer_one_message+0x2a8/0x474
      spi_transfer_one_message from __spi_pump_transfer_message+0x104/0x230
      __spi_pump_transfer_message from __spi_transfer_message_noqueue+0x30/0xc4
      __spi_transfer_message_noqueue from __spi_sync+0x204/0x248
      __spi_sync from spi_sync+0x24/0x3c
      spi_sync from mcp251xfd_regmap_crc_read+0x124/0x28c [mcp251xfd]
      mcp251xfd_regmap_crc_read [mcp251xfd] from _regmap_raw_read+0xf8/0x154
      _regmap_raw_read from _regmap_bus_read+0x44/0x70
      _regmap_bus_read from _regmap_read+0x60/0xd8
      _regmap_read from regmap_read+0x3c/0x5c
      regmap_read from mcp251xfd_alloc_can_err_skb+0x1c/0x54 [mcp251xfd]
      mcp251xfd_alloc_can_err_skb [mcp251xfd] from mcp251xfd_irq+0x194/0xe70 [mcp251xfd]
      mcp251xfd_irq [mcp251xfd] from irq_thread_fn+0x1c/0x78
      irq_thread_fn from irq_thread+0x118/0x1f4
      irq_thread from kthread+0xd8/0xf4
      kthread from ret_from_fork+0x14/0x28
    
    Fix this by also setting message->complete to NULL when the transfer is
    complete.
    
    Fixes: ae7d2346dc89 ("spi: Don't use the message queue if possible in spi_sync")
    
    Signed-off-by: Mans Rullgard <mans@mansr.com>
    Link: https://lore.kernel.org/r/20240430182705.13019-1-mans@mansr.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: hisi-kunpeng: Delete the dump interface of data registers in debugfs [+ + +]
Author: Devyn Liu <liudingyuan@huawei.com>
Date:   Tue Apr 16 09:58:39 2024 +0800

    spi: hisi-kunpeng: Delete the dump interface of data registers in debugfs
    
    [ Upstream commit 7430764f5a85d30314aeef2d5438dff1fb0b1d68 ]
    
    Due to the reading of FIFO during the dump of data registers in
    debugfs, if SPI transmission is in progress, it will be affected
    and may result in transmission failure. Therefore, the dump
    interface of data registers in debugfs is removed.
    
    Fixes: 2b2142f247eb ("spi: hisi-kunpeng: Add debugfs support")
    Signed-off-by: Devyn Liu <liudingyuan@huawei.com>
    Reviewed-by: Jay Fang <f.fangjian@huawei.com>
    Link: https://lore.kernel.org/r/20240416015839.3323398-1-liudingyuan@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: introduce new helpers with using modern naming [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Tue Oct 11 17:22:04 2022 +0800

    spi: introduce new helpers with using modern naming
    
    [ Upstream commit b8d3b056a78dcc941fd1a117697ab2b956c2953f ]
    
    For using modern names host/target to instead of all the legacy names,
    I think it takes 3 steps:
      - step1: introduce new helpers with modern naming.
      - step2: switch to use these new helpers in all drivers.
      - step3: remove all legacy helpers and update all legacy names.
    
    This patch is for step1, it introduces new helpers with host/target
    naming for drivers using.
    
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20221011092204.950288-1-yangyingliang@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: Merge spi_controller.{slave,target}_abort() [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Fri Nov 4 11:01:27 2022 +0100

    spi: Merge spi_controller.{slave,target}_abort()
    
    [ Upstream commit 6c6871cdaef96361f6b79a3e45d451a6475df4d6 ]
    
    Mixing SPI slave/target handlers and SPI slave/target controllers using
    legacy and modern naming does not work well: there are now two different
    callbacks for aborting a slave/target operation, of which only one is
    populated, while spi_{slave,target}_abort() check and use only one,
    which may be the unpopulated one.
    
    Fix this by merging the slave/target abort callbacks into a single
    callback using a union, like is already done for the slave/target flags.
    
    Fixes: b8d3b056a78dcc94 ("spi: introduce new helpers with using modern naming")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/809c82d54b85dd87ef7ee69fc93016085be85cec.1667555967.git.geert+renesas@glider.be
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: microchip-core-qspi: fix setting spi bus clock rate [+ + +]
Author: Conor Dooley <conor.dooley@microchip.com>
Date:   Wed May 8 16:46:51 2024 +0100

    spi: microchip-core-qspi: fix setting spi bus clock rate
    
    commit ef13561d2b163ac0ae6befa53bca58a26dc3320b upstream.
    
    Before ORing the new clock rate with the control register value read
    from the hardware, the existing clock rate needs to be masked off as
    otherwise the existing value will interfere with the new one.
    
    CC: stable@vger.kernel.org
    Fixes: 8596124c4c1b ("spi: microchip-core-qspi: Add support for microchip fpga qspi controllers")
    Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
    Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Link: https://lore.kernel.org/r/20240508-fox-unpiloted-b97e1535627b@spud
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: spi-axi-spi-engine: switch to use modern name [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Fri Jul 28 17:32:03 2023 +0800

    spi: spi-axi-spi-engine: switch to use modern name
    
    [ Upstream commit 9d5920b37ab4a970f658a6a30b54cc6d6a7d2d3d ]
    
    Change legacy name master to modern name host or controller.
    
    No functional changed.
    
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20230728093221.3312026-4-yangyingliang@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: spi-axi-spi-engine: Use helper function devm_clk_get_enabled() [+ + +]
Author: Li Zetao <lizetao1@huawei.com>
Date:   Wed Aug 23 21:39:18 2023 +0800

    spi: spi-axi-spi-engine: Use helper function devm_clk_get_enabled()
    
    [ Upstream commit a08199b309f833fd4221ab5ee2391c791fe26385 ]
    
    Since commit 7ef9651e9792 ("clk: Provide new devm_clk helpers for prepared
    and enabled clocks"), devm_clk_get() and clk_prepare_enable() can now be
    replaced by devm_clk_get_enabled() when driver enables (and possibly
    prepares) the clocks for the whole lifetime of the device. Moreover, it is
    no longer necessary to unprepare and disable the clocks explicitly.
    
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Li Zetao <lizetao1@huawei.com>
    Link: https://lore.kernel.org/r/20230823133938.1359106-6-lizetao1@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 0064db9ce4aa ("spi: axi-spi-engine: fix version format string")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sunrpc: add a struct rpc_stats arg to rpc_create_args [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Thu Feb 15 14:57:30 2024 -0500

    sunrpc: add a struct rpc_stats arg to rpc_create_args
    
    [ Upstream commit 2057a48d0dd00c6a2a94ded7df2bf1d3f2a4a0da ]
    
    We want to be able to have our rpc stats handled in a per network
    namespace manner, so add an option to rpc_create_args to specify a
    different rpc_stats struct instead of using the one on the rpc_program.
    
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Stable-dep-of: 24457f1be29f ("nfs: Handle error of rpc_proc_register() in nfs_net_init().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed May 1 12:54:48 2024 +0000

    tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets
    
    [ Upstream commit 94062790aedb505bdda209b10bea47b294d6394f ]
    
    TCP_SYN_RECV state is really special, it is only used by
    cross-syn connections, mostly used by fuzzers.
    
    In the following crash [1], syzbot managed to trigger a divide
    by zero in tcp_rcv_space_adjust()
    
    A socket makes the following state transitions,
    without ever calling tcp_init_transfer(),
    meaning tcp_init_buffer_space() is also not called.
    
             TCP_CLOSE
    connect()
             TCP_SYN_SENT
             TCP_SYN_RECV
    shutdown() -> tcp_shutdown(sk, SEND_SHUTDOWN)
             TCP_FIN_WAIT1
    
    To fix this issue, change tcp_shutdown() to not
    perform a TCP_SYN_RECV -> TCP_FIN_WAIT1 transition,
    which makes no sense anyway.
    
    When tcp_rcv_state_process() later changes socket state
    from TCP_SYN_RECV to TCP_ESTABLISH, then look at
    sk->sk_shutdown to finally enter TCP_FIN_WAIT1 state,
    and send a FIN packet from a sane socket state.
    
    This means tcp_send_fin() can now be called from BH
    context, and must use GFP_ATOMIC allocations.
    
    [1]
    divide error: 0000 [#1] PREEMPT SMP KASAN NOPTI
    CPU: 1 PID: 5084 Comm: syz-executor358 Not tainted 6.9.0-rc6-syzkaller-00022-g98369dccd2f8 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
     RIP: 0010:tcp_rcv_space_adjust+0x2df/0x890 net/ipv4/tcp_input.c:767
    Code: e3 04 4c 01 eb 48 8b 44 24 38 0f b6 04 10 84 c0 49 89 d5 0f 85 a5 03 00 00 41 8b 8e c8 09 00 00 89 e8 29 c8 48 0f af c3 31 d2 <48> f7 f1 48 8d 1c 43 49 8d 96 76 08 00 00 48 89 d0 48 c1 e8 03 48
    RSP: 0018:ffffc900031ef3f0 EFLAGS: 00010246
    RAX: 0c677a10441f8f42 RBX: 000000004fb95e7e RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    RBP: 0000000027d4b11f R08: ffffffff89e535a4 R09: 1ffffffff25e6ab7
    R10: dffffc0000000000 R11: ffffffff8135e920 R12: ffff88802a9f8d30
    R13: dffffc0000000000 R14: ffff88802a9f8d00 R15: 1ffff1100553f2da
    FS:  00005555775c0380(0000) GS:ffff8880b9500000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f1155bf2304 CR3: 000000002b9f2000 CR4: 0000000000350ef0
    Call Trace:
     <TASK>
      tcp_recvmsg_locked+0x106d/0x25a0 net/ipv4/tcp.c:2513
      tcp_recvmsg+0x25d/0x920 net/ipv4/tcp.c:2578
      inet6_recvmsg+0x16a/0x730 net/ipv6/af_inet6.c:680
      sock_recvmsg_nosec net/socket.c:1046 [inline]
      sock_recvmsg+0x109/0x280 net/socket.c:1068
      ____sys_recvmsg+0x1db/0x470 net/socket.c:2803
      ___sys_recvmsg net/socket.c:2845 [inline]
      do_recvmmsg+0x474/0xae0 net/socket.c:2939
      __sys_recvmmsg net/socket.c:3018 [inline]
      __do_sys_recvmmsg net/socket.c:3041 [inline]
      __se_sys_recvmmsg net/socket.c:3034 [inline]
      __x64_sys_recvmmsg+0x199/0x250 net/socket.c:3034
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7faeb6363db9
    Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 c1 17 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:00007ffcc1997168 EFLAGS: 00000246 ORIG_RAX: 000000000000012b
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007faeb6363db9
    RDX: 0000000000000001 RSI: 0000000020000bc0 RDI: 0000000000000005
    RBP: 0000000000000000 R08: 0000000000000000 R09: 000000000000001c
    R10: 0000000000000122 R11: 0000000000000246 R12: 0000000000000000
    R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000001
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Link: https://lore.kernel.org/r/20240501125448.896529-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp: Use refcount_inc_not_zero() in tcp_twsk_unique(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Wed May 1 14:31:45 2024 -0700

    tcp: Use refcount_inc_not_zero() in tcp_twsk_unique().
    
    [ Upstream commit f2db7230f73a80dbb179deab78f88a7947f0ab7e ]
    
    Anderson Nascimento reported a use-after-free splat in tcp_twsk_unique()
    with nice analysis.
    
    Since commit ec94c2696f0b ("tcp/dccp: avoid one atomic operation for
    timewait hashdance"), inet_twsk_hashdance() sets TIME-WAIT socket's
    sk_refcnt after putting it into ehash and releasing the bucket lock.
    
    Thus, there is a small race window where other threads could try to
    reuse the port during connect() and call sock_hold() in tcp_twsk_unique()
    for the TIME-WAIT socket with zero refcnt.
    
    If that happens, the refcnt taken by tcp_twsk_unique() is overwritten
    and sock_put() will cause underflow, triggering a real use-after-free
    somewhere else.
    
    To avoid the use-after-free, we need to use refcount_inc_not_zero() in
    tcp_twsk_unique() and give up on reusing the port if it returns false.
    
    [0]:
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 0 PID: 1039313 at lib/refcount.c:25 refcount_warn_saturate+0xe5/0x110
    CPU: 0 PID: 1039313 Comm: trigger Not tainted 6.8.6-200.fc39.x86_64 #1
    Hardware name: VMware, Inc. VMware20,1/440BX Desktop Reference Platform, BIOS VMW201.00V.21805430.B64.2305221830 05/22/2023
    RIP: 0010:refcount_warn_saturate+0xe5/0x110
    Code: 42 8e ff 0f 0b c3 cc cc cc cc 80 3d aa 13 ea 01 00 0f 85 5e ff ff ff 48 c7 c7 f8 8e b7 82 c6 05 96 13 ea 01 01 e8 7b 42 8e ff <0f> 0b c3 cc cc cc cc 48 c7 c7 50 8f b7 82 c6 05 7a 13 ea 01 01 e8
    RSP: 0018:ffffc90006b43b60 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff888009bb3ef0 RCX: 0000000000000027
    RDX: ffff88807be218c8 RSI: 0000000000000001 RDI: ffff88807be218c0
    RBP: 0000000000069d70 R08: 0000000000000000 R09: ffffc90006b439f0
    R10: ffffc90006b439e8 R11: 0000000000000003 R12: ffff8880029ede84
    R13: 0000000000004e20 R14: ffffffff84356dc0 R15: ffff888009bb3ef0
    FS:  00007f62c10926c0(0000) GS:ffff88807be00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000020ccb000 CR3: 000000004628c005 CR4: 0000000000f70ef0
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? refcount_warn_saturate+0xe5/0x110
     ? __warn+0x81/0x130
     ? refcount_warn_saturate+0xe5/0x110
     ? report_bug+0x171/0x1a0
     ? refcount_warn_saturate+0xe5/0x110
     ? handle_bug+0x3c/0x80
     ? exc_invalid_op+0x17/0x70
     ? asm_exc_invalid_op+0x1a/0x20
     ? refcount_warn_saturate+0xe5/0x110
     tcp_twsk_unique+0x186/0x190
     __inet_check_established+0x176/0x2d0
     __inet_hash_connect+0x74/0x7d0
     ? __pfx___inet_check_established+0x10/0x10
     tcp_v4_connect+0x278/0x530
     __inet_stream_connect+0x10f/0x3d0
     inet_stream_connect+0x3a/0x60
     __sys_connect+0xa8/0xd0
     __x64_sys_connect+0x18/0x20
     do_syscall_64+0x83/0x170
     entry_SYSCALL_64_after_hwframe+0x78/0x80
    RIP: 0033:0x7f62c11a885d
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 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 8b 0d a3 45 0c 00 f7 d8 64 89 01 48
    RSP: 002b:00007f62c1091e58 EFLAGS: 00000296 ORIG_RAX: 000000000000002a
    RAX: ffffffffffffffda RBX: 0000000020ccb004 RCX: 00007f62c11a885d
    RDX: 0000000000000010 RSI: 0000000020ccb000 RDI: 0000000000000003
    RBP: 00007f62c1091e90 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000296 R12: 00007f62c10926c0
    R13: ffffffffffffff88 R14: 0000000000000000 R15: 00007ffe237885b0
     </TASK>
    
    Fixes: ec94c2696f0b ("tcp/dccp: avoid one atomic operation for timewait hashdance")
    Reported-by: Anderson Nascimento <anderson@allelesecurity.com>
    Closes: https://lore.kernel.org/netdev/37a477a6-d39e-486b-9577-3463f655a6b7@allelesecurity.com/
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240501213145.62261-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
timers: Get rid of del_singleshot_timer_sync() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed Nov 23 21:18:37 2022 +0100

    timers: Get rid of del_singleshot_timer_sync()
    
    [ Upstream commit 9a5a305686971f4be10c6d7251c8348d74b3e014 ]
    
    del_singleshot_timer_sync() used to be an optimization for deleting timers
    which are not rearmed from the timer callback function.
    
    This optimization turned out to be broken and got mapped to
    del_timer_sync() about 17 years ago.
    
    Get rid of the undocumented indirection and use del_timer_sync() directly.
    
    No functional change.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
    Link: https://lore.kernel.org/r/20221123201624.706987932@linutronix.de
    Stable-dep-of: 4893b8b3ef8d ("hsr: Simplify code for announcing HSR nodes timer setup")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

timers: Rename del_timer() to timer_delete() [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed Nov 23 21:18:45 2022 +0100

    timers: Rename del_timer() to timer_delete()
    
    [ Upstream commit bb663f0f3c396c6d05f6c5eeeea96ced20ff112e ]
    
    The timer related functions do not have a strict timer_ prefixed namespace
    which is really annoying.
    
    Rename del_timer() to timer_delete() and provide del_timer()
    as a wrapper. Document that del_timer() is not for new code.
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
    Link: https://lore.kernel.org/r/20221123201625.015535022@linutronix.de
    Stable-dep-of: 4893b8b3ef8d ("hsr: Simplify code for announcing HSR nodes timer setup")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tipc: fix a possible memleak in tipc_buf_append [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Tue Apr 30 10:03:38 2024 -0400

    tipc: fix a possible memleak in tipc_buf_append
    
    [ Upstream commit 97bf6f81b29a8efaf5d0983251a7450e5794370d ]
    
    __skb_linearize() doesn't free the skb when it fails, so move
    '*buf = NULL' after __skb_linearize(), so that the skb can be
    freed on the err path.
    
    Fixes: b7df21cf1b79 ("tipc: skb_linearize the head skb when reassembling msgs")
    Reported-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Tung Nguyen <tung.q.nguyen@dektech.com.au>
    Link: https://lore.kernel.org/r/90710748c29a1521efac4f75ea01b3b7e61414cf.1714485818.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tipc: fix UAF in error path [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Apr 30 15:53:37 2024 +0200

    tipc: fix UAF in error path
    
    commit 080cbb890286cd794f1ee788bbc5463e2deb7c2b upstream.
    
    Sam Page (sam4k) working with Trend Micro Zero Day Initiative reported
    a UAF in the tipc_buf_append() error path:
    
    BUG: KASAN: slab-use-after-free in kfree_skb_list_reason+0x47e/0x4c0
    linux/net/core/skbuff.c:1183
    Read of size 8 at addr ffff88804d2a7c80 by task poc/8034
    
    CPU: 1 PID: 8034 Comm: poc Not tainted 6.8.2 #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.16.0-debian-1.16.0-5 04/01/2014
    Call Trace:
     <IRQ>
     __dump_stack linux/lib/dump_stack.c:88
     dump_stack_lvl+0xd9/0x1b0 linux/lib/dump_stack.c:106
     print_address_description linux/mm/kasan/report.c:377
     print_report+0xc4/0x620 linux/mm/kasan/report.c:488
     kasan_report+0xda/0x110 linux/mm/kasan/report.c:601
     kfree_skb_list_reason+0x47e/0x4c0 linux/net/core/skbuff.c:1183
     skb_release_data+0x5af/0x880 linux/net/core/skbuff.c:1026
     skb_release_all linux/net/core/skbuff.c:1094
     __kfree_skb linux/net/core/skbuff.c:1108
     kfree_skb_reason+0x12d/0x210 linux/net/core/skbuff.c:1144
     kfree_skb linux/./include/linux/skbuff.h:1244
     tipc_buf_append+0x425/0xb50 linux/net/tipc/msg.c:186
     tipc_link_input+0x224/0x7c0 linux/net/tipc/link.c:1324
     tipc_link_rcv+0x76e/0x2d70 linux/net/tipc/link.c:1824
     tipc_rcv+0x45f/0x10f0 linux/net/tipc/node.c:2159
     tipc_udp_recv+0x73b/0x8f0 linux/net/tipc/udp_media.c:390
     udp_queue_rcv_one_skb+0xad2/0x1850 linux/net/ipv4/udp.c:2108
     udp_queue_rcv_skb+0x131/0xb00 linux/net/ipv4/udp.c:2186
     udp_unicast_rcv_skb+0x165/0x3b0 linux/net/ipv4/udp.c:2346
     __udp4_lib_rcv+0x2594/0x3400 linux/net/ipv4/udp.c:2422
     ip_protocol_deliver_rcu+0x30c/0x4e0 linux/net/ipv4/ip_input.c:205
     ip_local_deliver_finish+0x2e4/0x520 linux/net/ipv4/ip_input.c:233
     NF_HOOK linux/./include/linux/netfilter.h:314
     NF_HOOK linux/./include/linux/netfilter.h:308
     ip_local_deliver+0x18e/0x1f0 linux/net/ipv4/ip_input.c:254
     dst_input linux/./include/net/dst.h:461
     ip_rcv_finish linux/net/ipv4/ip_input.c:449
     NF_HOOK linux/./include/linux/netfilter.h:314
     NF_HOOK linux/./include/linux/netfilter.h:308
     ip_rcv+0x2c5/0x5d0 linux/net/ipv4/ip_input.c:569
     __netif_receive_skb_one_core+0x199/0x1e0 linux/net/core/dev.c:5534
     __netif_receive_skb+0x1f/0x1c0 linux/net/core/dev.c:5648
     process_backlog+0x101/0x6b0 linux/net/core/dev.c:5976
     __napi_poll.constprop.0+0xba/0x550 linux/net/core/dev.c:6576
     napi_poll linux/net/core/dev.c:6645
     net_rx_action+0x95a/0xe90 linux/net/core/dev.c:6781
     __do_softirq+0x21f/0x8e7 linux/kernel/softirq.c:553
     do_softirq linux/kernel/softirq.c:454
     do_softirq+0xb2/0xf0 linux/kernel/softirq.c:441
     </IRQ>
     <TASK>
     __local_bh_enable_ip+0x100/0x120 linux/kernel/softirq.c:381
     local_bh_enable linux/./include/linux/bottom_half.h:33
     rcu_read_unlock_bh linux/./include/linux/rcupdate.h:851
     __dev_queue_xmit+0x871/0x3ee0 linux/net/core/dev.c:4378
     dev_queue_xmit linux/./include/linux/netdevice.h:3169
     neigh_hh_output linux/./include/net/neighbour.h:526
     neigh_output linux/./include/net/neighbour.h:540
     ip_finish_output2+0x169f/0x2550 linux/net/ipv4/ip_output.c:235
     __ip_finish_output linux/net/ipv4/ip_output.c:313
     __ip_finish_output+0x49e/0x950 linux/net/ipv4/ip_output.c:295
     ip_finish_output+0x31/0x310 linux/net/ipv4/ip_output.c:323
     NF_HOOK_COND linux/./include/linux/netfilter.h:303
     ip_output+0x13b/0x2a0 linux/net/ipv4/ip_output.c:433
     dst_output linux/./include/net/dst.h:451
     ip_local_out linux/net/ipv4/ip_output.c:129
     ip_send_skb+0x3e5/0x560 linux/net/ipv4/ip_output.c:1492
     udp_send_skb+0x73f/0x1530 linux/net/ipv4/udp.c:963
     udp_sendmsg+0x1a36/0x2b40 linux/net/ipv4/udp.c:1250
     inet_sendmsg+0x105/0x140 linux/net/ipv4/af_inet.c:850
     sock_sendmsg_nosec linux/net/socket.c:730
     __sock_sendmsg linux/net/socket.c:745
     __sys_sendto+0x42c/0x4e0 linux/net/socket.c:2191
     __do_sys_sendto linux/net/socket.c:2203
     __se_sys_sendto linux/net/socket.c:2199
     __x64_sys_sendto+0xe0/0x1c0 linux/net/socket.c:2199
     do_syscall_x64 linux/arch/x86/entry/common.c:52
     do_syscall_64+0xd8/0x270 linux/arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x6f/0x77 linux/arch/x86/entry/entry_64.S:120
    RIP: 0033:0x7f3434974f29
    Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 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 8b 0d 37 8f 0d 00 f7 d8 64 89 01 48
    RSP: 002b:00007fff9154f2b8 EFLAGS: 00000212 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f3434974f29
    RDX: 00000000000032c8 RSI: 00007fff9154f300 RDI: 0000000000000003
    RBP: 00007fff915532e0 R08: 00007fff91553360 R09: 0000000000000010
    R10: 0000000000000000 R11: 0000000000000212 R12: 000055ed86d261d0
    R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
     </TASK>
    
    In the critical scenario, either the relevant skb is freed or its
    ownership is transferred into a frag_lists. In both cases, the cleanup
    code must not free it again: we need to clear the skb reference earlier.
    
    Fixes: 1149557d64c9 ("tipc: eliminate unnecessary linearization of incoming buffers")
    Cc: stable@vger.kernel.org
    Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-23852
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/752f1ccf762223d109845365d07f55414058e5a3.1714484273.git.pabeni@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tools/power turbostat: Fix added raw MSR output [+ + +]
Author: Doug Smythies <dsmythies@telus.net>
Date:   Mon Apr 3 14:11:38 2023 -0700

    tools/power turbostat: Fix added raw MSR output
    
    [ Upstream commit e5f4e68eed85fa8495d78cd966eecc2b27bb9e53 ]
    
    When using --Summary mode, added MSRs in raw mode always
    print zeros. Print the actual register contents.
    
    Example, with patch:
    
    note the added column:
    --add msr0x64f,u32,package,raw,REASON
    
    Where:
    
    0x64F is MSR_CORE_PERF_LIMIT_REASONS
    
    Busy%   Bzy_MHz PkgTmp  PkgWatt CorWatt     REASON
    0.00    4800    35      1.42    0.76    0x00000000
    0.00    4801    34      1.42    0.76    0x00000000
    80.08   4531    66      108.17  107.52  0x08000000
    98.69   4530    66      133.21  132.54  0x08000000
    99.28   4505    66      128.26  127.60  0x0c000400
    99.65   4486    68      124.91  124.25  0x0c000400
    99.63   4483    68      124.90  124.25  0x0c000400
    79.34   4481    41      99.80   99.13   0x0c000000
    0.00    4801    41      1.40    0.73    0x0c000000
    
    Where, for the test processor (i5-10600K):
    
    PKG Limit #1: 125.000 Watts, 8.000000 sec
    MSR bit 26 = log; bit 10 = status
    
    PKG Limit #2: 136.000 Watts, 0.002441 sec
    MSR bit 27 = log; bit 11 = status
    
    Example, without patch:
    
    Busy%   Bzy_MHz PkgTmp  PkgWatt CorWatt     REASON
    0.01    4800    35      1.43    0.77    0x00000000
    0.00    4801    35      1.39    0.73    0x00000000
    83.49   4531    66      112.71  112.06  0x00000000
    98.69   4530    68      133.35  132.69  0x00000000
    99.31   4500    67      127.96  127.30  0x00000000
    99.63   4483    69      124.91  124.25  0x00000000
    99.61   4481    69      124.90  124.25  0x00000000
    99.61   4481    71      124.92  124.25  0x00000000
    59.35   4479    42      75.03   74.37   0x00000000
    0.00    4800    42      1.39    0.73    0x00000000
    0.00    4801    42      1.42    0.76    0x00000000
    
    c000000
    
    [lenb: simplified patch to apply only to package scope]
    
    Signed-off-by: Doug Smythies <dsmythies@telus.net>
    Signed-off-by: Len Brown <len.brown@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tools/power turbostat: Fix Bzy_MHz documentation typo [+ + +]
Author: Peng Liu <liupeng17@lenovo.com>
Date:   Sat Oct 7 13:46:22 2023 +0800

    tools/power turbostat: Fix Bzy_MHz documentation typo
    
    [ Upstream commit 0b13410b52c4636aacb6964a4253a797c0fa0d16 ]
    
    The code calculates Bzy_MHz by multiplying TSC_delta * APERF_delta/MPERF_delta
    The man page erroneously showed that TSC_delta was divided.
    
    Signed-off-by: Peng Liu <liupeng17@lenovo.com>
    Signed-off-by: Len Brown <len.brown@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tools/power turbostat: Increase the limit for fd opened [+ + +]
Author: Wyes Karny <wyes.karny@amd.com>
Date:   Tue Oct 3 05:07:51 2023 +0000

    tools/power turbostat: Increase the limit for fd opened
    
    [ Upstream commit 3ac1d14d0583a2de75d49a5234d767e2590384dd ]
    
    When running turbostat, a system with 512 cpus reaches the limit for
    maximum number of file descriptors that can be opened. To solve this
    problem, the limit is raised to 2^15, which is a large enough number.
    
    Below data is collected from AMD server systems while running turbostat:
    
    |-----------+-------------------------------|
    | # of cpus | # of opened fds for turbostat |
    |-----------+-------------------------------|
    | 128       | 260                           |
    |-----------+-------------------------------|
    | 192       | 388                           |
    |-----------+-------------------------------|
    | 512       | 1028                          |
    |-----------+-------------------------------|
    
    So, the new max limit would be sufficient up to 2^14 cpus (but this
    also depends on how many counters are enabled).
    
    Reviewed-by: Doug Smythies <dsmythies@telus.net>
    Tested-by: Doug Smythies <dsmythies@telus.net>
    Signed-off-by: Wyes Karny <wyes.karny@amd.com>
    Signed-off-by: Len Brown <len.brown@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools/power/turbostat: Fix uncore frequency file string [+ + +]
Author: Justin Ernst <justin.ernst@hpe.com>
Date:   Tue Apr 2 13:40:29 2024 -0400

    tools/power/turbostat: Fix uncore frequency file string
    
    [ Upstream commit 60add818ab2543b7e4f2bfeaacf2504743c1eb50 ]
    
    Running turbostat on a 16 socket HPE Scale-up Compute 3200 (SapphireRapids) fails with:
    turbostat: /sys/devices/system/cpu/intel_uncore_frequency/package_010_die_00/current_freq_khz: open failed: No such file or directory
    
    We observe the sysfs uncore frequency directories named:
    ...
    package_09_die_00/
    package_10_die_00/
    package_11_die_00/
    ...
    package_15_die_00/
    
    The culprit is an incorrect sprintf format string "package_0%d_die_0%d" used
    with each instance of reading uncore frequency files. uncore-frequency-common.c
    creates the sysfs directory with the format "package_%02d_die_%02d". Once the
    package value reaches double digits, the formats diverge.
    
    Change each instance of "package_0%d_die_0%d" to "package_%02d_die_%02d".
    
    [lenb: deleted the probe part of this patch, as it was already fixed]
    
    Signed-off-by: Justin Ernst <justin.ernst@hpe.com>
    Reviewed-by: Thomas Renninger <trenn@suse.de>
    Signed-off-by: Len Brown <len.brown@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
uio_hv_generic: Don't free decrypted memory [+ + +]
Author: Rick Edgecombe <rick.p.edgecombe@intel.com>
Date:   Mon Mar 11 09:15:57 2024 -0700

    uio_hv_generic: Don't free decrypted memory
    
    [ Upstream commit 3d788b2fbe6a1a1a9e3db09742b90809d51638b7 ]
    
    In CoCo VMs it is possible for the untrusted host to cause
    set_memory_encrypted() or set_memory_decrypted() to fail such that an
    error is returned and the resulting memory is shared. Callers need to
    take care to handle these errors to avoid returning decrypted (shared)
    memory to the page allocator, which could lead to functional or security
    issues.
    
    The VMBus device UIO driver could free decrypted/shared pages if
    set_memory_decrypted() fails. Check the decrypted field in the gpadl
    to decide whether to free the memory.
    
    Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Link: https://lore.kernel.org/r/20240311161558.1310-5-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20240311161558.1310-5-mhklinux@outlook.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: core: Fix access violation during port device removal [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Thu Apr 18 11:13:13 2024 -0400

    USB: core: Fix access violation during port device removal
    
    commit a4b46d450c49f32e9d4247b421e58083fde304ce upstream.
    
    Testing with KASAN and syzkaller revealed a bug in port.c:disable_store():
    usb_hub_to_struct_hub() can return NULL if the hub that the port belongs to
    is concurrently removed, but the function does not check for this
    possibility before dereferencing the returned value.
    
    It turns out that the first dereference is unnecessary, since hub->intfdev
    is the parent of the port device, so it can be changed easily.  Adding a
    check for hub == NULL prevents further problems.
    
    The same bug exists in the disable_show() routine, and it can be fixed the
    same way.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Reported-and-tested-by: Yue Sun <samsun1006219@gmail.com>
    Reported-by: xingwei lee <xrivendell7@gmail.com>
    Link: https://lore.kernel.org/linux-usb/CAEkJfYON+ry7xPx=AiLR9jzUNT+i_Va68ACajOC3HoacOfL1ig@mail.gmail.com/
    Fixes: f061f43d7418 ("usb: hub: port: add sysfs entry to switch port power")
    CC: Michael Grzeschik <m.grzeschik@pengutronix.de>
    CC: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/393aa580-15a5-44ca-ad3b-6462461cd313@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: dwc3: core: Prevent phy suspend during init [+ + +]
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Wed Apr 17 23:14:36 2024 +0000

    usb: dwc3: core: Prevent phy suspend during init
    
    commit 6d735722063a945de56472bdc6bfcb170fd43b86 upstream.
    
    GUSB3PIPECTL.SUSPENDENABLE and GUSB2PHYCFG.SUSPHY should be cleared
    during initialization. Suspend during initialization can result in
    undefined behavior due to clock synchronization failure, which often
    seen as core soft reset timeout.
    
    The programming guide recommended these bits to be cleared during
    initialization for DWC_usb3.0 version 1.94 and above (along with
    DWC_usb31 and DWC_usb32). The current check in the driver does not
    account if it's set by default setting from coreConsultant.
    
    This is especially the case for DRD when switching mode to ensure the
    phy clocks are available to change mode. Depending on the
    platforms/design, some may be affected more than others. This is noted
    in the DWC_usb3x programming guide under the above registers.
    
    Let's just disable them during driver load and mode switching. Restore
    them when the controller initialization completes.
    
    Note that some platforms workaround this issue by disabling phy suspend
    through "snps,dis_u3_susphy_quirk" and "snps,dis_u2_susphy_quirk" when
    they should not need to.
    
    Cc: stable@vger.kernel.org
    Fixes: 9ba3aca8fe82 ("usb: dwc3: Disable phy suspend after power-on reset")
    Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20da4e5a0c4678c9587d3da23f83bdd6d77353e9.1713394973.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: Fix regression caused by invalid ep0 maxpacket in virtual SuperSpeed device [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Tue Apr 30 10:33:48 2024 -0400

    usb: Fix regression caused by invalid ep0 maxpacket in virtual SuperSpeed device
    
    commit c78c3644b772e356ca452ae733a3c4de0fb11dc8 upstream.
    
    A virtual SuperSpeed device in the FreeBSD BVCP package
    (https://bhyve.npulse.net/) presents an invalid ep0 maxpacket size of 256.
    It stopped working with Linux following a recent commit because now we
    check these sizes more carefully than before.
    
    Fix this regression by using the bMaxpacketSize0 value in the device
    descriptor for SuperSpeed or faster devices, even if it is invalid.  This
    is a very simple-minded change; we might want to check more carefully for
    values that actually make some sense (for instance, no smaller than 64).
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Reported-and-tested-by: Roger Whittaker <roger.whittaker@suse.com>
    Closes: https://bugzilla.suse.com/show_bug.cgi?id=1220569
    Link: https://lore.kernel.org/linux-usb/9efbd569-7059-4575-983f-0ea30df41871@suse.com/
    Fixes: 59cf44575456 ("USB: core: Fix oversight in SuperSpeed initialization")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/4058ac05-237c-4db4-9ecc-5af42bdb4501@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: composite: fix OS descriptors w_value logic [+ + +]
Author: Peter Korsgaard <peter@korsgaard.com>
Date:   Thu Apr 4 12:06:35 2024 +0200

    usb: gadget: composite: fix OS descriptors w_value logic
    
    commit ec6ce7075ef879b91a8710829016005dc8170f17 upstream.
    
    The OS descriptors logic had the high/low byte of w_value inverted, causing
    the extended properties to not be accessible for interface != 0.
    
    >From the Microsoft documentation:
    https://learn.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-os-1-0-descriptors-specification
    
    OS_Desc_CompatID.doc (w_index = 0x4):
    
    - wValue:
    
      High Byte = InterfaceNumber.  InterfaceNumber is set to the number of the
      interface or function that is associated with the descriptor, typically
      0x00.  Because a device can have only one extended compat ID descriptor,
      it should ignore InterfaceNumber, regardless of the value, and simply
      return the descriptor.
    
      Low Byte = 0.  PageNumber is used to retrieve descriptors that are larger
      than 64 KB.  The header section is 16 bytes, so PageNumber is set to 0 for
      this request.
    
    We currently do not support >64KB compat ID descriptors, so verify that the
    low byte is 0.
    
    OS_Desc_Ext_Prop.doc (w_index = 0x5):
    
    - wValue:
    
      High byte = InterfaceNumber.  The high byte of wValue is set to the number
      of the interface or function that is associated with the descriptor.
    
      Low byte = PageNumber.  The low byte of wValue is used to retrieve
      descriptors that are larger than 64 KB.  The header section is 10 bytes, so
      PageNumber is set to 0 for this request.
    
    We also don't support >64KB extended properties, so verify that the low byte
    is 0 and use the high byte for the interface number.
    
    Fixes: 37a3a533429e ("usb: gadget: OS Feature Descriptors support")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
    Link: https://lore.kernel.org/r/20240404100635.3215340-1-peter@korsgaard.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_fs: Fix a race condition when processing setup packets. [+ + +]
Author: Chris Wulff <Chris.Wulff@biamp.com>
Date:   Tue Apr 23 18:02:15 2024 +0000

    usb: gadget: f_fs: Fix a race condition when processing setup packets.
    
    commit 0aea736ddb877b93f6d2dd8cf439840d6b4970a9 upstream.
    
    If the USB driver passes a pointer into the TRB buffer for creq, this
    buffer can be overwritten with the status response as soon as the event
    is queued. This can make the final check return USB_GADGET_DELAYED_STATUS
    when it shouldn't. Instead use the stored wLength.
    
    Fixes: 4d644abf2569 ("usb: gadget: f_fs: Only return delayed status when len is 0")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Chris Wulff <chris.wulff@biamp.com>
    Link: https://lore.kernel.org/r/CO1PR17MB5419BD664264A558B2395E28E1112@CO1PR17MB5419.namprd17.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: ohci: Prevent missed ohci interrupts [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Mon Apr 29 08:40:10 2024 -0700

    usb: ohci: Prevent missed ohci interrupts
    
    commit fe81f354841641c7f71163b84912b25c169ed8ec upstream.
    
    Testing ohci functionality with qemu's pci-ohci emulation often results
    in ohci interface stalls, resulting in hung task timeouts.
    
    The problem is caused by lost interrupts between the emulation and the
    Linux kernel code. Additional interrupts raised while the ohci interrupt
    handler in Linux is running and before the handler clears the interrupt
    status are not handled. The fix for a similar problem in ehci suggests
    that the problem is likely caused by edge-triggered MSI interrupts. See
    commit 0b60557230ad ("usb: ehci: Prevent missed ehci interrupts with
    edge-triggered MSI") for details.
    
    Ensure that the ohci interrupt code handles all pending interrupts before
    returning to solve the problem.
    
    Cc: Gerd Hoffmann <kraxel@redhat.com>
    Cc: David Laight <David.Laight@aculab.com>
    Cc: stable@vger.kernel.org
    Fixes: 306c54d0edb6 ("usb: hcd: Try MSI interrupts on PCI devices")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
    Link: https://lore.kernel.org/r/20240429154010.1507366-1-linux@roeck-us.net
    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:   Sat Apr 27 20:28:12 2024 +0000

    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>

usb: typec: tcpm: unregister existing source caps before re-registration [+ + +]
Author: Amit Sunil Dhamne <amitsd@google.com>
Date:   Wed Apr 24 15:32:16 2024 -0700

    usb: typec: tcpm: unregister existing source caps before re-registration
    
    commit 230ecdf71a644c9c73e0e6735b33173074ae3f94 upstream.
    
    Check and unregister existing source caps in tcpm_register_source_caps
    function before registering new ones. This change fixes following
    warning when port partner resends source caps after negotiating PD contract
    for the purpose of re-negotiation.
    
    [  343.135030][  T151] sysfs: cannot create duplicate filename '/devices/virtual/usb_power_delivery/pd1/source-capabilities'
    [  343.135071][  T151] Call trace:
    [  343.135076][  T151]  dump_backtrace+0xe8/0x108
    [  343.135099][  T151]  show_stack+0x18/0x24
    [  343.135106][  T151]  dump_stack_lvl+0x50/0x6c
    [  343.135119][  T151]  dump_stack+0x18/0x24
    [  343.135126][  T151]  sysfs_create_dir_ns+0xe0/0x140
    [  343.135137][  T151]  kobject_add_internal+0x228/0x424
    [  343.135146][  T151]  kobject_add+0x94/0x10c
    [  343.135152][  T151]  device_add+0x1b0/0x4c0
    [  343.135187][  T151]  device_register+0x20/0x34
    [  343.135195][  T151]  usb_power_delivery_register_capabilities+0x90/0x20c
    [  343.135209][  T151]  tcpm_pd_rx_handler+0x9f0/0x15b8
    [  343.135216][  T151]  kthread_worker_fn+0x11c/0x260
    [  343.135227][  T151]  kthread+0x114/0x1bc
    [  343.135235][  T151]  ret_from_fork+0x10/0x20
    [  343.135265][  T151] kobject: kobject_add_internal failed for source-capabilities with -EEXIST, don't try to register things with the same name in the same directory.
    
    Fixes: 8203d26905ee ("usb: typec: tcpm: Register USB Power Delivery Capabilities")
    Cc: linux-usb@vger.kernel.org
    Cc: stable@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: Mark Brown <broonie@kernel.org>
    Signed-off-by: Amit Sunil Dhamne <amitsd@google.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20240424223227.1807844-1-amitsd@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: Check for notifications after init [+ + +]
Author: Christian A. Ehrhardt <lk@c--e.de>
Date:   Wed Mar 20 08:39:23 2024 +0100

    usb: typec: ucsi: Check for notifications after init
    
    commit 808a8b9e0b87bbc72bcc1f7ddfe5d04746e7ce56 upstream.
    
    The completion notification for the final SET_NOTIFICATION_ENABLE
    command during initialization can include a connector change
    notification.  However, at the time this completion notification is
    processed, the ucsi struct is not ready to handle this notification.
    As a result the notification is ignored and the controller
    never sends an interrupt again.
    
    Re-check CCI for a pending connector state change after
    initialization is complete. Adjust the corresponding debug
    message accordingly.
    
    Fixes: 71a1fa0df2a3 ("usb: typec: ucsi: Store the notification mask")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian A. Ehrhardt <lk@c--e.de>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
    Link: https://lore.kernel.org/r/20240320073927.1641788-3-lk@c--e.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: Fix connector check on init [+ + +]
Author: Christian A. Ehrhardt <lk@c--e.de>
Date:   Mon Apr 1 23:05:15 2024 +0200

    usb: typec: ucsi: Fix connector check on init
    
    commit ce4c8d21054ae9396cd759fe6e8157b525616dc4 upstream.
    
    Fix issues when initially checking for a connector change:
    - Use the correct connector number not the entire CCI.
    - Call ->read under the PPM lock.
    - Remove a bogus READ_ONCE.
    
    Fixes: 808a8b9e0b87 ("usb: typec: ucsi: Check for notifications after init")
    Cc: stable@kernel.org
    Signed-off-by: Christian A. Ehrhardt <lk@c--e.de>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20240401210515.1902048-1-lk@c--e.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: xhci-plat: Don't include xhci.h [+ + +]
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Wed Apr 17 23:14:30 2024 +0000

    usb: xhci-plat: Don't include xhci.h
    
    commit 4a237d55446ff67655dc3eed2d4a41997536fc4c upstream.
    
    The xhci_plat.h should not need to include the entire xhci.h header.
    This can cause redefinition in dwc3 if it selectively includes some xHCI
    definitions. This is a prerequisite change for a fix to disable suspend
    during initialization for dwc3.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/310acfa01c957a10d9feaca3f7206269866ba2eb.1713394973.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
VFIO: Add the SPR_DSA and SPR_IAX devices to the denylist [+ + +]
Author: Arjan van de Ven <arjan@linux.intel.com>
Date:   Thu Mar 21 19:44:07 2024 +0000

    VFIO: Add the SPR_DSA and SPR_IAX devices to the denylist
    
    commit 95feb3160eef0caa6018e175a5560b816aee8e79 upstream.
    
    Due to an erratum with the SPR_DSA and SPR_IAX devices, it is not secure to assign
    these devices to virtual machines. Add the PCI IDs of these devices to the VFIO
    denylist to ensure that this is handled appropriately by the VFIO subsystem.
    
    The SPR_DSA and SPR_IAX devices are on-SOC devices for the Sapphire Rapids
    (and related) family of products that perform data movement and compression.
    
    Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vxlan: Pull inner IP header in vxlan_rcv(). [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Tue Apr 30 18:50:13 2024 +0200

    vxlan: Pull inner IP header in vxlan_rcv().
    
    [ Upstream commit f7789419137b18e3847d0cc41afd788c3c00663d ]
    
    Ensure the inner IP header is part of skb's linear data before reading
    its ECN bits. Otherwise we might read garbage.
    One symptom is the system erroneously logging errors like
    "vxlan: non-ECT from xxx.xxx.xxx.xxx with TOS=xxxx".
    
    Similar bugs have been fixed in geneve, ip_tunnel and ip6_tunnel (see
    commit 1ca1ba465e55 ("geneve: make sure to pull inner header in
    geneve_rx()") for example). So let's reuse the same code structure for
    consistency. Maybe we'll can add a common helper in the future.
    
    Fixes: d342894c5d2f ("vxlan: virtual extensible lan")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://lore.kernel.org/r/1239c8db54efec341dd6455c77e0380f58923a3c.1714495737.git.gnault@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: cfg80211: fix rdev_dump_mpp() arguments order [+ + +]
Author: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
Date:   Mon Mar 11 19:45:19 2024 +0300

    wifi: cfg80211: fix rdev_dump_mpp() arguments order
    
    [ Upstream commit ec50f3114e55406a1aad24b7dfaa1c3f4336d8eb ]
    
    Fix the order of arguments in the TP_ARGS macro
    for the rdev_dump_mpp tracepoint event.
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Signed-off-by: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
    Link: https://msgid.link/20240311164519.118398-1-Igor.A.Artemiev@mcst.ru
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: fix ieee80211_bss_*_flags kernel-doc [+ + +]
Author: Jeff Johnson <quic_jjohnson@quicinc.com>
Date:   Thu Mar 14 14:23:00 2024 -0700

    wifi: mac80211: fix ieee80211_bss_*_flags kernel-doc
    
    [ Upstream commit 774f8841f55d7ac4044c79812691649da203584a ]
    
    Running kernel-doc on ieee80211_i.h flagged the following:
    net/mac80211/ieee80211_i.h:145: warning: expecting prototype for enum ieee80211_corrupt_data_flags. Prototype was for enum ieee80211_bss_corrupt_data_flags instead
    net/mac80211/ieee80211_i.h:162: warning: expecting prototype for enum ieee80211_valid_data_flags. Prototype was for enum ieee80211_bss_valid_data_flags instead
    
    Fix these warnings.
    
    Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://msgid.link/20240314-kdoc-ieee80211_i-v1-1-72b91b55b257@quicinc.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: nl80211: don't free NULL coalescing rule [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Thu Apr 18 10:52:23 2024 +0200

    wifi: nl80211: don't free NULL coalescing rule
    
    [ Upstream commit 801ea33ae82d6a9d954074fbcf8ea9d18f1543a7 ]
    
    If the parsing fails, we can dereference a NULL pointer here.
    
    Cc: stable@vger.kernel.org
    Fixes: be29b99a9b51 ("cfg80211/nl80211: Add packet coalesce support")
    Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://msgid.link/20240418105220.b328f80406e7.Id75d961050deb05b3e4e354e024866f350c68103@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xdp: use flags field to disambiguate broadcast redirect [+ + +]
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date:   Thu Apr 18 09:18:39 2024 +0200

    xdp: use flags field to disambiguate broadcast redirect
    
    [ Upstream commit 5bcf0dcbf9066348058b88a510c57f70f384c92c ]
    
    When redirecting a packet using XDP, the bpf_redirect_map() helper will set
    up the redirect destination information in struct bpf_redirect_info (using
    the __bpf_xdp_redirect_map() helper function), and the xdp_do_redirect()
    function will read this information after the XDP program returns and pass
    the frame on to the right redirect destination.
    
    When using the BPF_F_BROADCAST flag to do multicast redirect to a whole
    map, __bpf_xdp_redirect_map() sets the 'map' pointer in struct
    bpf_redirect_info to point to the destination map to be broadcast. And
    xdp_do_redirect() reacts to the value of this map pointer to decide whether
    it's dealing with a broadcast or a single-value redirect. However, if the
    destination map is being destroyed before xdp_do_redirect() is called, the
    map pointer will be cleared out (by bpf_clear_redirect_map()) without
    waiting for any XDP programs to stop running. This causes xdp_do_redirect()
    to think that the redirect was to a single target, but the target pointer
    is also NULL (since broadcast redirects don't have a single target), so
    this causes a crash when a NULL pointer is passed to dev_map_enqueue().
    
    To fix this, change xdp_do_redirect() to react directly to the presence of
    the BPF_F_BROADCAST flag in the 'flags' value in struct bpf_redirect_info
    to disambiguate between a single-target and a broadcast redirect. And only
    read the 'map' pointer if the broadcast flag is set, aborting if that has
    been cleared out in the meantime. This prevents the crash, while keeping
    the atomic (cmpxchg-based) clearing of the map pointer itself, and without
    adding any more checks in the non-broadcast fast path.
    
    Fixes: e624d4ed4aa8 ("xdp: Extend xdp_redirect_map with broadcast support")
    Reported-and-tested-by: syzbot+af9492708df9797198d6@syzkaller.appspotmail.com
    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Stanislav Fomichev <sdf@google.com>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
    Link: https://lore.kernel.org/r/20240418071840.156411-1-toke@redhat.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfrm: Preserve vlan tags for transport mode software GRO [+ + +]
Author: Paul Davey <paul.davey@alliedtelesis.co.nz>
Date:   Tue Apr 23 18:00:24 2024 +1200

    xfrm: Preserve vlan tags for transport mode software GRO
    
    [ Upstream commit 58fbfecab965014b6e3cc956a76b4a96265a1add ]
    
    The software GRO path for esp transport mode uses skb_mac_header_rebuild
    prior to re-injecting the packet via the xfrm_napi_dev.  This only
    copies skb->mac_len bytes of header which may not be sufficient if the
    packet contains 802.1Q tags or other VLAN tags.  Worse copying only the
    initial header will leave a packet marked as being VLAN tagged but
    without the corresponding tag leading to mangling when it is later
    untagged.
    
    The VLAN tags are important when receiving the decrypted esp transport
    mode packet after GRO processing to ensure it is received on the correct
    interface.
    
    Therefore record the full mac header length in xfrm*_transport_input for
    later use in corresponding xfrm*_transport_finish to copy the entire mac
    header when rebuilding the mac header for GRO.  The skb->data pointer is
    left pointing skb->mac_header bytes after the start of the mac header as
    is expected by the network stack and network and transport header
    offsets reset to this location.
    
    Fixes: 7785bba299a8 ("esp: Add a software GRO codepath")
    Signed-off-by: Paul Davey <paul.davey@alliedtelesis.co.nz>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>