]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.4
authorSasha Levin <sashal@kernel.org>
Sun, 26 May 2024 17:04:03 +0000 (13:04 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 26 May 2024 17:04:03 +0000 (13:04 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
87 files changed:
queue-5.4/acpi-disable-wstringop-truncation.patch [new file with mode: 0644]
queue-5.4/af_packet-do-not-call-packet_read_pending-from-tpack.patch [new file with mode: 0644]
queue-5.4/af_unix-fix-data-races-in-unix_release_sock-unix_str.patch [new file with mode: 0644]
queue-5.4/asoc-da7219-aad-fix-usage-of-device_get_named_child_.patch [new file with mode: 0644]
queue-5.4/asoc-dt-bindings-rt5645-add-cbj-sleeve-gpio-property.patch [new file with mode: 0644]
queue-5.4/asoc-rt5645-fix-the-electric-noise-due-to-the-cbj-co.patch [new file with mode: 0644]
queue-5.4/asoc-tracing-export-snd_soc_dapm_dir_out-to-its-valu.patch [new file with mode: 0644]
queue-5.4/cpufreq-exit-callback-is-optional.patch [new file with mode: 0644]
queue-5.4/cpufreq-rearrange-locking-in-cpufreq_remove_dev.patch [new file with mode: 0644]
queue-5.4/cpufreq-reorganize-checks-in-cpufreq_offline.patch [new file with mode: 0644]
queue-5.4/cpufreq-split-cpufreq_offline.patch [new file with mode: 0644]
queue-5.4/crypto-bcm-fix-pointer-arithmetic.patch [new file with mode: 0644]
queue-5.4/crypto-ccp-drop-platform-ifdef-checks.patch [new file with mode: 0644]
queue-5.4/drm-amd-display-fix-potential-index-out-of-bounds-in.patch [new file with mode: 0644]
queue-5.4/drm-amd-display-set-color_mgmt_changed-to-true-on-un.patch [new file with mode: 0644]
queue-5.4/drm-amdkfd-flush-the-process-wq-before-creating-a-kf.patch [new file with mode: 0644]
queue-5.4/drm-arm-malidp-fix-a-possible-null-pointer-dereferen.patch [new file with mode: 0644]
queue-5.4/drm-mediatek-add-0-size-check-to-mtk_drm_gem_obj.patch [new file with mode: 0644]
queue-5.4/drm-panel-simple-add-missing-innolux-g121x1-l03-form.patch [new file with mode: 0644]
queue-5.4/ecryptfs-fix-buffer-size-for-tag-66-packet.patch [new file with mode: 0644]
queue-5.4/ext4-avoid-excessive-credit-estimate-in-ext4_tmpfile.patch [new file with mode: 0644]
queue-5.4/fbdev-sh7760fb-allow-modular-build.patch [new file with mode: 0644]
queue-5.4/fbdev-shmobile-fix-snprintf-truncation.patch [new file with mode: 0644]
queue-5.4/fbdev-sisfb-hide-unused-variables.patch [new file with mode: 0644]
queue-5.4/firmware-raspberrypi-use-correct-device-for-dma-mapp.patch [new file with mode: 0644]
queue-5.4/hid-intel-ish-hid-ipc-add-check-for-pci_alloc_irq_ve.patch [new file with mode: 0644]
queue-5.4/ipv6-sr-add-missing-seg6_local_exit.patch [new file with mode: 0644]
queue-5.4/ipv6-sr-fix-incorrect-unregister-order.patch [new file with mode: 0644]
queue-5.4/ipv6-sr-fix-invalid-unregister-error-path.patch [new file with mode: 0644]
queue-5.4/irqchip-alpine-msi-fix-off-by-one-in-allocation-erro.patch [new file with mode: 0644]
queue-5.4/jffs2-prevent-xattr-node-from-overflowing-the-eraseb.patch [new file with mode: 0644]
queue-5.4/m68k-fix-spinlock-race-in-kernel-thread-creation.patch [new file with mode: 0644]
queue-5.4/m68k-mac-fix-reboot-hang-on-mac-iici.patch [new file with mode: 0644]
queue-5.4/macintosh-via-macii-fix-bug-sleeping-function-called.patch [new file with mode: 0644]
queue-5.4/md-fix-resync-softlockup-when-bitmap-size-is-less-th.patch [new file with mode: 0644]
queue-5.4/media-ngene-add-dvb_ca_en50221_init-return-value-che.patch [new file with mode: 0644]
queue-5.4/media-radio-shark2-avoid-led_names-truncations.patch [new file with mode: 0644]
queue-5.4/mtd-rawnand-hynix-fixed-typo.patch [new file with mode: 0644]
queue-5.4/net-ethernet-cortina-locking-fixes.patch [new file with mode: 0644]
queue-5.4/net-openvswitch-fix-overwriting-ct-original-tuple-fo.patch [new file with mode: 0644]
queue-5.4/net-usb-qmi_wwan-add-telit-fn920c04-compositions.patch [new file with mode: 0644]
queue-5.4/net-usb-smsc95xx-stop-lying-about-skb-truesize.patch [new file with mode: 0644]
queue-5.4/net-usb-sr9700-stop-lying-about-skb-truesize.patch [new file with mode: 0644]
queue-5.4/netrom-fix-possible-dead-lock-in-nr_rt_ioctl.patch [new file with mode: 0644]
queue-5.4/nilfs2-fix-out-of-range-warning.patch [new file with mode: 0644]
queue-5.4/null_blk-fix-missing-mutex_destroy-at-module-removal.patch [new file with mode: 0644]
queue-5.4/nvme-find-numa-distance-only-if-controller-has-valid.patch [new file with mode: 0644]
queue-5.4/openpromfs-finish-conversion-to-the-new-mount-api.patch [new file with mode: 0644]
queue-5.4/parisc-add-missing-export-of-__cmpxchg_u8.patch [new file with mode: 0644]
queue-5.4/platform-x86-wmi-make-two-functions-static.patch [new file with mode: 0644]
queue-5.4/platform-x86-xiaomi-wmi-fix-race-condition-when-repo.patch [new file with mode: 0644]
queue-5.4/powerpc-fsl-soc-hide-unused-const-variable.patch [new file with mode: 0644]
queue-5.4/qed-avoid-truncating-work-queue-length.patch [new file with mode: 0644]
queue-5.4/rdma-hns-use-complete-parentheses-in-macros.patch [new file with mode: 0644]
queue-5.4/rdma-ipoib-fix-format-truncation-compilation-errors.patch [new file with mode: 0644]
queue-5.4/revert-sh-handle-calling-csum_partial-with-misaligne.patch [new file with mode: 0644]
queue-5.4/s390-cio-fix-tracepoint-subchannel-type-field.patch [new file with mode: 0644]
queue-5.4/sched-fair-allow-disabling-sched_balance_newidle-wit.patch [new file with mode: 0644]
queue-5.4/sched-topology-don-t-set-sd_balance_wake-on-cpuset-d.patch [new file with mode: 0644]
queue-5.4/scsi-bfa-ensure-the-copied-buf-is-nul-terminated.patch [new file with mode: 0644]
queue-5.4/scsi-hpsa-fix-allocation-size-for-scsi_host-private-.patch [new file with mode: 0644]
queue-5.4/scsi-libsas-fix-the-failure-of-adding-phy-with-zero-.patch [new file with mode: 0644]
queue-5.4/scsi-qedf-ensure-the-copied-buf-is-nul-terminated.patch [new file with mode: 0644]
queue-5.4/scsi-ufs-cdns-pltfrm-perform-read-back-after-writing.patch [new file with mode: 0644]
queue-5.4/scsi-ufs-core-perform-read-back-after-disabling-inte.patch [new file with mode: 0644]
queue-5.4/scsi-ufs-core-perform-read-back-after-disabling-uic_.patch [new file with mode: 0644]
queue-5.4/scsi-ufs-qcom-perform-read-back-after-writing-reset-.patch [new file with mode: 0644]
queue-5.4/selftests-kcmp-make-the-test-output-consistent-and-c.patch [new file with mode: 0644]
queue-5.4/selftests-kcmp-remove-unused-open-mode.patch [new file with mode: 0644]
queue-5.4/series
queue-5.4/sh-kprobes-merge-arch_copy_kprobe-into-arch_prepare_.patch [new file with mode: 0644]
queue-5.4/sunrpc-fix-gss_free_in_token_pages.patch [new file with mode: 0644]
queue-5.4/sunrpc-removed-redundant-procp-check.patch [new file with mode: 0644]
queue-5.4/tcp-avoid-premature-drops-in-tcp_add_backlog.patch [new file with mode: 0644]
queue-5.4/tcp-fix-a-signed-integer-overflow-bug-in-tcp_add_bac.patch [new file with mode: 0644]
queue-5.4/tcp-minor-optimization-in-tcp_add_backlog.patch [new file with mode: 0644]
queue-5.4/usb-aqc111-stop-lying-about-skb-truesize.patch [new file with mode: 0644]
queue-5.4/wifi-ar5523-enable-proper-endpoint-verification.patch [new file with mode: 0644]
queue-5.4/wifi-ath10k-fix-an-error-code-problem-in-ath10k_dbg_.patch [new file with mode: 0644]
queue-5.4/wifi-ath10k-poll-service-ready-message-before-failin.patch [new file with mode: 0644]
queue-5.4/wifi-ath10k-populate-board-data-for-wcn3990.patch [new file with mode: 0644]
queue-5.4/wifi-carl9170-add-a-proper-sanity-check-for-endpoint.patch [new file with mode: 0644]
queue-5.4/wifi-cfg80211-fix-the-order-of-arguments-for-trace-e.patch [new file with mode: 0644]
queue-5.4/wifi-mwl8k-initialize-cmd-addr-properly.patch [new file with mode: 0644]
queue-5.4/x86-boot-ignore-relocations-in-.notes-sections-in-wa.patch [new file with mode: 0644]
queue-5.4/x86-insn-fix-push-instruction-in-x86-instruction-dec.patch [new file with mode: 0644]
queue-5.4/x86-purgatory-switch-to-the-position-independent-sma.patch [new file with mode: 0644]

diff --git a/queue-5.4/acpi-disable-wstringop-truncation.patch b/queue-5.4/acpi-disable-wstringop-truncation.patch
new file mode 100644 (file)
index 0000000..d1dfab1
--- /dev/null
@@ -0,0 +1,48 @@
+From 9e6f929a566b8ccf2b7ee369b8ced1dfeff3a4c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 9 Apr 2024 16:00:55 +0200
+Subject: ACPI: disable -Wstringop-truncation
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit a3403d304708f60565582d60af4316289d0316a0 ]
+
+gcc -Wstringop-truncation warns about copying a string that results in a
+missing nul termination:
+
+drivers/acpi/acpica/tbfind.c: In function 'acpi_tb_find_table':
+drivers/acpi/acpica/tbfind.c:60:9: error: 'strncpy' specified bound 6 equals destination size [-Werror=stringop-truncation]
+   60 |         strncpy(header.oem_id, oem_id, ACPI_OEM_ID_SIZE);
+      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/acpi/acpica/tbfind.c:61:9: error: 'strncpy' specified bound 8 equals destination size [-Werror=stringop-truncation]
+   61 |         strncpy(header.oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE);
+      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The code works as intended, and the warning could be addressed by using
+a memcpy(), but turning the warning off for this file works equally well
+and may be easier to merge.
+
+Fixes: 47c08729bf1c ("ACPICA: Fix for LoadTable operator, input strings")
+Link: https://lore.kernel.org/lkml/CAJZ5v0hoUfv54KW7y4223Mn9E7D4xvR7whRFNLTBqCZMUxT50Q@mail.gmail.com/#t
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/acpica/Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/acpi/acpica/Makefile b/drivers/acpi/acpica/Makefile
+index f919811156b1f..b6cf9c9bd6396 100644
+--- a/drivers/acpi/acpica/Makefile
++++ b/drivers/acpi/acpica/Makefile
+@@ -5,6 +5,7 @@
+ ccflags-y                     := -D_LINUX -DBUILDING_ACPICA
+ ccflags-$(CONFIG_ACPI_DEBUG)  += -DACPI_DEBUG_OUTPUT
++CFLAGS_tbfind.o               += $(call cc-disable-warning, stringop-truncation)
+ # use acpi.o to put all files here into acpi.o modparam namespace
+ obj-y += acpi.o
+-- 
+2.43.0
+
diff --git a/queue-5.4/af_packet-do-not-call-packet_read_pending-from-tpack.patch b/queue-5.4/af_packet-do-not-call-packet_read_pending-from-tpack.patch
new file mode 100644 (file)
index 0000000..d546795
--- /dev/null
@@ -0,0 +1,49 @@
+From 7df99704a6763b449fded63b0775b8f80d8c6968 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 May 2024 16:33:58 +0000
+Subject: af_packet: do not call packet_read_pending() from
+ tpacket_destruct_skb()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit 581073f626e387d3e7eed55c48c8495584ead7ba ]
+
+trafgen performance considerably sank on hosts with many cores
+after the blamed commit.
+
+packet_read_pending() is very expensive, and calling it
+in af_packet fast path defeats Daniel intent in commit
+b013840810c2 ("packet: use percpu mmap tx frame pending refcount")
+
+tpacket_destruct_skb() makes room for one packet, we can immediately
+wakeup a producer, no need to completely drain the tx ring.
+
+Fixes: 89ed5b519004 ("af_packet: Block execution of tasks waiting for transmit to complete in AF_PACKET")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Neil Horman <nhorman@tuxdriver.com>
+Cc: Daniel Borkmann <daniel@iogearbox.net>
+Reviewed-by: Willem de Bruijn <willemb@google.com>
+Link: https://lore.kernel.org/r/20240515163358.4105915-1-edumazet@google.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/packet/af_packet.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
+index 9fc020fd7ecc1..1efa42b15c5b9 100644
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -2461,8 +2461,7 @@ static void tpacket_destruct_skb(struct sk_buff *skb)
+               ts = __packet_set_timestamp(po, ph, skb);
+               __packet_set_status(po, ph, TP_STATUS_AVAILABLE | ts);
+-              if (!packet_read_pending(&po->tx_ring))
+-                      complete(&po->skb_completion);
++              complete(&po->skb_completion);
+       }
+       sock_wfree(skb);
+-- 
+2.43.0
+
diff --git a/queue-5.4/af_unix-fix-data-races-in-unix_release_sock-unix_str.patch b/queue-5.4/af_unix-fix-data-races-in-unix_release_sock-unix_str.patch
new file mode 100644 (file)
index 0000000..472c0a0
--- /dev/null
@@ -0,0 +1,76 @@
+From 0b1d5e4e1df14169cd22c25944fee5bb75d7a6b3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 01:14:46 -0700
+Subject: af_unix: Fix data races in unix_release_sock/unix_stream_sendmsg
+
+From: Breno Leitao <leitao@debian.org>
+
+[ Upstream commit 540bf24fba16b88c1b3b9353927204b4f1074e25 ]
+
+A data-race condition has been identified in af_unix. In one data path,
+the write function unix_release_sock() atomically writes to
+sk->sk_shutdown using WRITE_ONCE. However, on the reader side,
+unix_stream_sendmsg() does not read it atomically. Consequently, this
+issue is causing the following KCSAN splat to occur:
+
+       BUG: KCSAN: data-race in unix_release_sock / unix_stream_sendmsg
+
+       write (marked) to 0xffff88867256ddbb of 1 bytes by task 7270 on cpu 28:
+       unix_release_sock (net/unix/af_unix.c:640)
+       unix_release (net/unix/af_unix.c:1050)
+       sock_close (net/socket.c:659 net/socket.c:1421)
+       __fput (fs/file_table.c:422)
+       __fput_sync (fs/file_table.c:508)
+       __se_sys_close (fs/open.c:1559 fs/open.c:1541)
+       __x64_sys_close (fs/open.c:1541)
+       x64_sys_call (arch/x86/entry/syscall_64.c:33)
+       do_syscall_64 (arch/x86/entry/common.c:?)
+       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
+
+       read to 0xffff88867256ddbb of 1 bytes by task 989 on cpu 14:
+       unix_stream_sendmsg (net/unix/af_unix.c:2273)
+       __sock_sendmsg (net/socket.c:730 net/socket.c:745)
+       ____sys_sendmsg (net/socket.c:2584)
+       __sys_sendmmsg (net/socket.c:2638 net/socket.c:2724)
+       __x64_sys_sendmmsg (net/socket.c:2753 net/socket.c:2750 net/socket.c:2750)
+       x64_sys_call (arch/x86/entry/syscall_64.c:33)
+       do_syscall_64 (arch/x86/entry/common.c:?)
+       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
+
+       value changed: 0x01 -> 0x03
+
+The line numbers are related to commit dd5a440a31fa ("Linux 6.9-rc7").
+
+Commit e1d09c2c2f57 ("af_unix: Fix data races around sk->sk_shutdown.")
+addressed a comparable issue in the past regarding sk->sk_shutdown.
+However, it overlooked resolving this particular data path.
+This patch only offending unix_stream_sendmsg() function, since the
+other reads seem to be protected by unix_state_lock() as discussed in
+Link: https://lore.kernel.org/all/20240508173324.53565-1-kuniyu@amazon.com/
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Signed-off-by: Breno Leitao <leitao@debian.org>
+Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
+Link: https://lore.kernel.org/r/20240509081459.2807828-1-leitao@debian.org
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/unix/af_unix.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
+index 53335989a6f0c..e8bad973285e4 100644
+--- a/net/unix/af_unix.c
++++ b/net/unix/af_unix.c
+@@ -1890,7 +1890,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg,
+                       goto out_err;
+       }
+-      if (sk->sk_shutdown & SEND_SHUTDOWN)
++      if (READ_ONCE(sk->sk_shutdown) & SEND_SHUTDOWN)
+               goto pipe_err;
+       while (sent < len) {
+-- 
+2.43.0
+
diff --git a/queue-5.4/asoc-da7219-aad-fix-usage-of-device_get_named_child_.patch b/queue-5.4/asoc-da7219-aad-fix-usage-of-device_get_named_child_.patch
new file mode 100644 (file)
index 0000000..1c65ed8
--- /dev/null
@@ -0,0 +1,55 @@
+From 9e01d53c3bee3d9f5d117e52b2844f4d85223ff5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 26 Apr 2024 10:30:33 -0500
+Subject: ASoC: da7219-aad: fix usage of device_get_named_child_node()
+
+From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+
+[ Upstream commit e8a6a5ad73acbafd98e8fd3f0cbf6e379771bb76 ]
+
+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>
+Link: https://lore.kernel.org/r/20240426153033.38500-1-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/da7219-aad.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-aad.c
+index e4e314604c0a1..06caca22a55a0 100644
+--- a/sound/soc/codecs/da7219-aad.c
++++ b/sound/soc/codecs/da7219-aad.c
+@@ -630,8 +630,10 @@ static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct snd_soc_component
+               return NULL;
+       aad_pdata = devm_kzalloc(dev, sizeof(*aad_pdata), GFP_KERNEL);
+-      if (!aad_pdata)
++      if (!aad_pdata) {
++              fwnode_handle_put(aad_np);
+               return NULL;
++      }
+       aad_pdata->irq = i2c->irq;
+@@ -706,6 +708,8 @@ static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct snd_soc_component
+       else
+               aad_pdata->adc_1bit_rpt = DA7219_AAD_ADC_1BIT_RPT_1;
++      fwnode_handle_put(aad_np);
++
+       return aad_pdata;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/asoc-dt-bindings-rt5645-add-cbj-sleeve-gpio-property.patch b/queue-5.4/asoc-dt-bindings-rt5645-add-cbj-sleeve-gpio-property.patch
new file mode 100644 (file)
index 0000000..dbe962e
--- /dev/null
@@ -0,0 +1,48 @@
+From 7a08ba6eab09d9355f0fae45375eefc4c6357456 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Apr 2024 17:10:57 +0800
+Subject: ASoC: dt-bindings: rt5645: add cbj sleeve gpio property
+
+From: Derek Fang <derek.fang@realtek.com>
+
+[ Upstream commit 306b38e3fa727d22454a148a364123709e356600 ]
+
+Add an optional gpio property to control external CBJ circuits
+to avoid some electric noise caused by sleeve/ring2 contacts floating.
+
+Signed-off-by: Derek Fang <derek.fang@realtek.com>
+
+Link: https://msgid.link/r/20240408091057.14165-2-derek.fang@realtek.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ Documentation/devicetree/bindings/sound/rt5645.txt | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/Documentation/devicetree/bindings/sound/rt5645.txt b/Documentation/devicetree/bindings/sound/rt5645.txt
+index a03f9a872a716..bfb2217a9a658 100644
+--- a/Documentation/devicetree/bindings/sound/rt5645.txt
++++ b/Documentation/devicetree/bindings/sound/rt5645.txt
+@@ -16,6 +16,11 @@ Optional properties:
+   a GPIO spec for the external headphone detect pin. If jd-mode = 0,
+   we will get the JD status by getting the value of hp-detect-gpios.
++- cbj-sleeve-gpios:
++  a GPIO spec to control the external combo jack circuit to tie the sleeve/ring2
++  contacts to the ground or floating. It could avoid some electric noise from the
++  active speaker jacks.
++
+ - realtek,in2-differential
+   Boolean. Indicate MIC2 input are differential, rather than single-ended.
+@@ -64,6 +69,7 @@ codec: rt5650@1a {
+       compatible = "realtek,rt5650";
+       reg = <0x1a>;
+       hp-detect-gpios = <&gpio 19 0>;
++      cbj-sleeve-gpios = <&gpio 20 0>;
+       interrupt-parent = <&gpio>;
+       interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
+       realtek,dmic-en = "true";
+-- 
+2.43.0
+
diff --git a/queue-5.4/asoc-rt5645-fix-the-electric-noise-due-to-the-cbj-co.patch b/queue-5.4/asoc-rt5645-fix-the-electric-noise-due-to-the-cbj-co.patch
new file mode 100644 (file)
index 0000000..bf998a7
--- /dev/null
@@ -0,0 +1,105 @@
+From a6ca38f08ae4726938aa332ebdcdc8a484f0868a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Apr 2024 17:10:56 +0800
+Subject: ASoC: rt5645: Fix the electric noise due to the CBJ contacts floating
+
+From: Derek Fang <derek.fang@realtek.com>
+
+[ Upstream commit 103abab975087e1f01b76fcb54c91dbb65dbc249 ]
+
+The codec leaves tie combo jack's sleeve/ring2 to floating status
+default. It would cause electric noise while connecting the active
+speaker jack during boot or shutdown.
+This patch requests a gpio to control the additional jack circuit
+to tie the contacts to the ground or floating.
+
+Signed-off-by: Derek Fang <derek.fang@realtek.com>
+
+Link: https://msgid.link/r/20240408091057.14165-1-derek.fang@realtek.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/rt5645.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
+index c78d5833c9cd9..6aab552eda777 100644
+--- a/sound/soc/codecs/rt5645.c
++++ b/sound/soc/codecs/rt5645.c
+@@ -414,6 +414,7 @@ struct rt5645_priv {
+       struct regmap *regmap;
+       struct i2c_client *i2c;
+       struct gpio_desc *gpiod_hp_det;
++      struct gpio_desc *gpiod_cbj_sleeve;
+       struct snd_soc_jack *hp_jack;
+       struct snd_soc_jack *mic_jack;
+       struct snd_soc_jack *btn_jack;
+@@ -3169,6 +3170,9 @@ static int rt5645_jack_detect(struct snd_soc_component *component, int jack_inse
+               regmap_update_bits(rt5645->regmap, RT5645_IN1_CTRL2,
+                       RT5645_CBJ_MN_JD, 0);
++              if (rt5645->gpiod_cbj_sleeve)
++                      gpiod_set_value(rt5645->gpiod_cbj_sleeve, 1);
++
+               msleep(600);
+               regmap_read(rt5645->regmap, RT5645_IN1_CTRL3, &val);
+               val &= 0x7;
+@@ -3185,6 +3189,8 @@ static int rt5645_jack_detect(struct snd_soc_component *component, int jack_inse
+                       snd_soc_dapm_disable_pin(dapm, "Mic Det Power");
+                       snd_soc_dapm_sync(dapm);
+                       rt5645->jack_type = SND_JACK_HEADPHONE;
++                      if (rt5645->gpiod_cbj_sleeve)
++                              gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
+               }
+               if (rt5645->pdata.level_trigger_irq)
+                       regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
+@@ -3210,6 +3216,9 @@ static int rt5645_jack_detect(struct snd_soc_component *component, int jack_inse
+               if (rt5645->pdata.level_trigger_irq)
+                       regmap_update_bits(rt5645->regmap, RT5645_IRQ_CTRL2,
+                               RT5645_JD_1_1_MASK, RT5645_JD_1_1_INV);
++
++              if (rt5645->gpiod_cbj_sleeve)
++                      gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
+       }
+       return rt5645->jack_type;
+@@ -3861,6 +3870,16 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
+                       return ret;
+       }
++      rt5645->gpiod_cbj_sleeve = devm_gpiod_get_optional(&i2c->dev, "cbj-sleeve",
++                                                         GPIOD_OUT_LOW);
++
++      if (IS_ERR(rt5645->gpiod_cbj_sleeve)) {
++              ret = PTR_ERR(rt5645->gpiod_cbj_sleeve);
++              dev_info(&i2c->dev, "failed to initialize gpiod, ret=%d\n", ret);
++              if (ret != -ENOENT)
++                      return ret;
++      }
++
+       for (i = 0; i < ARRAY_SIZE(rt5645->supplies); i++)
+               rt5645->supplies[i].supply = rt5645_supply_names[i];
+@@ -4104,6 +4123,9 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
+       cancel_delayed_work_sync(&rt5645->jack_detect_work);
+       cancel_delayed_work_sync(&rt5645->rcclock_work);
++      if (rt5645->gpiod_cbj_sleeve)
++              gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
++
+       regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
+       return 0;
+@@ -4121,6 +4143,9 @@ static void rt5645_i2c_shutdown(struct i2c_client *i2c)
+               0);
+       msleep(20);
+       regmap_write(rt5645->regmap, RT5645_RESET, 0);
++
++      if (rt5645->gpiod_cbj_sleeve)
++              gpiod_set_value(rt5645->gpiod_cbj_sleeve, 0);
+ }
+ static struct i2c_driver rt5645_i2c_driver = {
+-- 
+2.43.0
+
diff --git a/queue-5.4/asoc-tracing-export-snd_soc_dapm_dir_out-to-its-valu.patch b/queue-5.4/asoc-tracing-export-snd_soc_dapm_dir_out-to-its-valu.patch
new file mode 100644 (file)
index 0000000..13d6ad8
--- /dev/null
@@ -0,0 +1,48 @@
+From 736fbe38a70962aa2a359a17cf8c34d5aefd9af4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Apr 2024 00:03:03 -0400
+Subject: ASoC: tracing: Export SND_SOC_DAPM_DIR_OUT to its value
+
+From: Steven Rostedt <rostedt@goodmis.org>
+
+[ Upstream commit 58300f8d6a48e58d1843199be743f819e2791ea3 ]
+
+The string SND_SOC_DAPM_DIR_OUT is printed in the snd_soc_dapm_path trace
+event instead of its value:
+
+   (((REC->path_dir) == SND_SOC_DAPM_DIR_OUT) ? "->" : "<-")
+
+User space cannot parse this, as it has no idea what SND_SOC_DAPM_DIR_OUT
+is. Use TRACE_DEFINE_ENUM() to convert it to its value:
+
+   (((REC->path_dir) == 1) ? "->" : "<-")
+
+So that user space tools, such as perf and trace-cmd, can parse it
+correctly.
+
+Reported-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Fixes: 6e588a0d839b5 ("ASoC: dapm: Consolidate path trace events")
+Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+Link: https://lore.kernel.org/r/20240416000303.04670cdf@rorschach.local.home
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/trace/events/asoc.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/trace/events/asoc.h b/include/trace/events/asoc.h
+index 40c300fe704da..f62d5b7024261 100644
+--- a/include/trace/events/asoc.h
++++ b/include/trace/events/asoc.h
+@@ -11,6 +11,8 @@
+ #define DAPM_DIRECT "(direct)"
+ #define DAPM_ARROW(dir) (((dir) == SND_SOC_DAPM_DIR_OUT) ? "->" : "<-")
++TRACE_DEFINE_ENUM(SND_SOC_DAPM_DIR_OUT);
++
+ struct snd_soc_jack;
+ struct snd_soc_card;
+ struct snd_soc_dapm_widget;
+-- 
+2.43.0
+
diff --git a/queue-5.4/cpufreq-exit-callback-is-optional.patch b/queue-5.4/cpufreq-exit-callback-is-optional.patch
new file mode 100644 (file)
index 0000000..857d010
--- /dev/null
@@ -0,0 +1,58 @@
+From b803d8d41ddc79aa52ac7717285c48b72a10bcc1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Apr 2024 11:19:20 +0530
+Subject: cpufreq: exit() callback is optional
+
+From: Viresh Kumar <viresh.kumar@linaro.org>
+
+[ Upstream commit b8f85833c05730d631576008daaa34096bc7f3ce ]
+
+The exit() callback is optional and shouldn't be called without checking
+a valid pointer first.
+
+Also, we must clear freq_table pointer even if the exit() callback isn't
+present.
+
+Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
+Fixes: 91a12e91dc39 ("cpufreq: Allow light-weight tear down and bring up of CPUs")
+Fixes: f339f3541701 ("cpufreq: Rearrange locking in cpufreq_remove_dev()")
+Reported-by: Lizhe <sensor1010@163.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpufreq/cpufreq.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
+index e727282f56963..c79bbd8cc125c 100644
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -1600,10 +1600,13 @@ static void __cpufreq_offline(unsigned int cpu, struct cpufreq_policy *policy)
+        */
+       if (cpufreq_driver->offline) {
+               cpufreq_driver->offline(policy);
+-      } else if (cpufreq_driver->exit) {
+-              cpufreq_driver->exit(policy);
+-              policy->freq_table = NULL;
++              return;
+       }
++
++      if (cpufreq_driver->exit)
++              cpufreq_driver->exit(policy);
++
++      policy->freq_table = NULL;
+ }
+ static int cpufreq_offline(unsigned int cpu)
+@@ -1653,7 +1656,7 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
+       }
+       /* We did light-weight exit earlier, do full tear down now */
+-      if (cpufreq_driver->offline)
++      if (cpufreq_driver->offline && cpufreq_driver->exit)
+               cpufreq_driver->exit(policy);
+       up_write(&policy->rwsem);
+-- 
+2.43.0
+
diff --git a/queue-5.4/cpufreq-rearrange-locking-in-cpufreq_remove_dev.patch b/queue-5.4/cpufreq-rearrange-locking-in-cpufreq_remove_dev.patch
new file mode 100644 (file)
index 0000000..4316228
--- /dev/null
@@ -0,0 +1,70 @@
+From cd0b768b1aef6c56bd43bd43fc1fedbfbd026a56 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 17:51:39 +0200
+Subject: cpufreq: Rearrange locking in cpufreq_remove_dev()
+
+From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+
+[ Upstream commit f339f3541701d824a0256ad4bf14c26ceb6d79c3 ]
+
+Currently, cpufreq_remove_dev() invokes the ->exit() driver callback
+without holding the policy rwsem which is inconsistent with what
+happens if ->exit() is invoked directly from cpufreq_offline().
+
+It also manipulates the real_cpus mask and removes the CPU device
+symlink without holding the policy rwsem, but cpufreq_offline() holds
+the rwsem around the modifications thereof.
+
+For consistency, modify cpufreq_remove_dev() to hold the policy rwsem
+until the ->exit() callback has been called (or it has been determined
+that it is not necessary to call it).
+
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
+Stable-dep-of: b8f85833c057 ("cpufreq: exit() callback is optional")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpufreq/cpufreq.c | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
+index 549788a2a9676..e727282f56963 100644
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -1639,19 +1639,26 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
+       if (!policy)
+               return;
++      down_write(&policy->rwsem);
++
+       if (cpu_online(cpu))
+-              cpufreq_offline(cpu);
++              __cpufreq_offline(cpu, policy);
+       cpumask_clear_cpu(cpu, policy->real_cpus);
+       remove_cpu_dev_symlink(policy, dev);
+-      if (cpumask_empty(policy->real_cpus)) {
+-              /* We did light-weight exit earlier, do full tear down now */
+-              if (cpufreq_driver->offline)
+-                      cpufreq_driver->exit(policy);
+-
+-              cpufreq_policy_free(policy);
++      if (!cpumask_empty(policy->real_cpus)) {
++              up_write(&policy->rwsem);
++              return;
+       }
++
++      /* We did light-weight exit earlier, do full tear down now */
++      if (cpufreq_driver->offline)
++              cpufreq_driver->exit(policy);
++
++      up_write(&policy->rwsem);
++
++      cpufreq_policy_free(policy);
+ }
+ /**
+-- 
+2.43.0
+
diff --git a/queue-5.4/cpufreq-reorganize-checks-in-cpufreq_offline.patch b/queue-5.4/cpufreq-reorganize-checks-in-cpufreq_offline.patch
new file mode 100644 (file)
index 0000000..eb4c73e
--- /dev/null
@@ -0,0 +1,73 @@
+From 91fb28bcc08b3736a25efb07473a1141e99e6715 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 17:48:41 +0200
+Subject: cpufreq: Reorganize checks in cpufreq_offline()
+
+From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+
+[ Upstream commit e1e962c5b9edbc628a335bcdbd010331a12d3e5b ]
+
+Notice that cpufreq_offline() only needs to check policy_is_inactive()
+once and rearrange the code in there to make that happen.
+
+No expected functional impact.
+
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
+Stable-dep-of: b8f85833c057 ("cpufreq: exit() callback is optional")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpufreq/cpufreq.c | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
+index 11b9edc713baa..09be815190124 100644
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -1567,24 +1567,18 @@ static int cpufreq_offline(unsigned int cpu)
+       }
+       down_write(&policy->rwsem);
++
+       if (has_target())
+               cpufreq_stop_governor(policy);
+       cpumask_clear_cpu(cpu, policy->cpus);
+-      if (policy_is_inactive(policy)) {
+-              if (has_target())
+-                      strncpy(policy->last_governor, policy->governor->name,
+-                              CPUFREQ_NAME_LEN);
+-              else
+-                      policy->last_policy = policy->policy;
+-      } else if (cpu == policy->cpu) {
+-              /* Nominate new CPU */
+-              policy->cpu = cpumask_any(policy->cpus);
+-      }
+-
+-      /* Start governor again for active policy */
+       if (!policy_is_inactive(policy)) {
++              /* Nominate a new CPU if necessary. */
++              if (cpu == policy->cpu)
++                      policy->cpu = cpumask_any(policy->cpus);
++
++              /* Start the governor again for the active policy. */
+               if (has_target()) {
+                       ret = cpufreq_start_governor(policy);
+                       if (ret)
+@@ -1594,6 +1588,12 @@ static int cpufreq_offline(unsigned int cpu)
+               goto unlock;
+       }
++      if (has_target())
++              strncpy(policy->last_governor, policy->governor->name,
++                      CPUFREQ_NAME_LEN);
++      else
++              policy->last_policy = policy->policy;
++
+       if (cpufreq_thermal_control_enabled(cpufreq_driver)) {
+               cpufreq_cooling_unregister(policy->cdev);
+               policy->cdev = NULL;
+-- 
+2.43.0
+
diff --git a/queue-5.4/cpufreq-split-cpufreq_offline.patch b/queue-5.4/cpufreq-split-cpufreq_offline.patch
new file mode 100644 (file)
index 0000000..d121f41
--- /dev/null
@@ -0,0 +1,91 @@
+From e89e03bc8b4f5536a78b78b10a06e8c6093efb21 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 May 2022 17:50:09 +0200
+Subject: cpufreq: Split cpufreq_offline()
+
+From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+
+[ Upstream commit fddd8f86dff4a24742a7f0322ccbb34c6c1c9850 ]
+
+Split the "core" part running under the policy rwsem out of
+cpufreq_offline() to allow the locking in cpufreq_remove_dev() to be
+rearranged more easily.
+
+As a side-effect this eliminates the unlock label that's not needed
+any more.
+
+No expected functional impact.
+
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
+Stable-dep-of: b8f85833c057 ("cpufreq: exit() callback is optional")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/cpufreq/cpufreq.c | 33 +++++++++++++++++++--------------
+ 1 file changed, 19 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
+index 09be815190124..549788a2a9676 100644
+--- a/drivers/cpufreq/cpufreq.c
++++ b/drivers/cpufreq/cpufreq.c
+@@ -1553,21 +1553,10 @@ static int cpufreq_add_dev(struct device *dev, struct subsys_interface *sif)
+       return 0;
+ }
+-static int cpufreq_offline(unsigned int cpu)
++static void __cpufreq_offline(unsigned int cpu, struct cpufreq_policy *policy)
+ {
+-      struct cpufreq_policy *policy;
+       int ret;
+-      pr_debug("%s: unregistering CPU %u\n", __func__, cpu);
+-
+-      policy = cpufreq_cpu_get_raw(cpu);
+-      if (!policy) {
+-              pr_debug("%s: No cpu_data found\n", __func__);
+-              return 0;
+-      }
+-
+-      down_write(&policy->rwsem);
+-
+       if (has_target())
+               cpufreq_stop_governor(policy);
+@@ -1585,7 +1574,7 @@ static int cpufreq_offline(unsigned int cpu)
+                               pr_err("%s: Failed to start governor\n", __func__);
+               }
+-              goto unlock;
++              return;
+       }
+       if (has_target())
+@@ -1615,8 +1604,24 @@ static int cpufreq_offline(unsigned int cpu)
+               cpufreq_driver->exit(policy);
+               policy->freq_table = NULL;
+       }
++}
++
++static int cpufreq_offline(unsigned int cpu)
++{
++      struct cpufreq_policy *policy;
++
++      pr_debug("%s: unregistering CPU %u\n", __func__, cpu);
++
++      policy = cpufreq_cpu_get_raw(cpu);
++      if (!policy) {
++              pr_debug("%s: No cpu_data found\n", __func__);
++              return 0;
++      }
++
++      down_write(&policy->rwsem);
++
++      __cpufreq_offline(cpu, policy);
+-unlock:
+       up_write(&policy->rwsem);
+       return 0;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/crypto-bcm-fix-pointer-arithmetic.patch b/queue-5.4/crypto-bcm-fix-pointer-arithmetic.patch
new file mode 100644 (file)
index 0000000..917a056
--- /dev/null
@@ -0,0 +1,40 @@
+From 82056182cfb578f3d6bb72c7c67e6daa2e653c73 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Mar 2024 23:59:15 +0300
+Subject: crypto: bcm - Fix pointer arithmetic
+
+From: Aleksandr Mishin <amishin@t-argos.ru>
+
+[ Upstream commit 2b3460cbf454c6b03d7429e9ffc4fe09322eb1a9 ]
+
+In spu2_dump_omd() value of ptr is increased by ciph_key_len
+instead of hash_iv_len which could lead to going beyond the
+buffer boundaries.
+Fix this bug by changing ciph_key_len to hash_iv_len.
+
+Found by Linux Verification Center (linuxtesting.org) with SVACE.
+
+Fixes: 9d12ba86f818 ("crypto: brcm - Add Broadcom SPU driver")
+Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/crypto/bcm/spu2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/crypto/bcm/spu2.c b/drivers/crypto/bcm/spu2.c
+index 2add51024575c..a8d4cbc8d3f9f 100644
+--- a/drivers/crypto/bcm/spu2.c
++++ b/drivers/crypto/bcm/spu2.c
+@@ -495,7 +495,7 @@ static void spu2_dump_omd(u8 *omd, u16 hash_key_len, u16 ciph_key_len,
+       if (hash_iv_len) {
+               packet_log("  Hash IV Length %u bytes\n", hash_iv_len);
+               packet_dump("  hash IV: ", ptr, hash_iv_len);
+-              ptr += ciph_key_len;
++              ptr += hash_iv_len;
+       }
+       if (ciph_iv_len) {
+-- 
+2.43.0
+
diff --git a/queue-5.4/crypto-ccp-drop-platform-ifdef-checks.patch b/queue-5.4/crypto-ccp-drop-platform-ifdef-checks.patch
new file mode 100644 (file)
index 0000000..b87096d
--- /dev/null
@@ -0,0 +1,94 @@
+From 4c400e5939d346e84df1eff788dbb658fd9ad32e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Apr 2024 10:06:42 +0200
+Subject: crypto: ccp - drop platform ifdef checks
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 42c2d7d02977ef09d434b1f5b354f5bc6c1027ab ]
+
+When both ACPI and OF are disabled, the dev_vdata variable is unused:
+
+drivers/crypto/ccp/sp-platform.c:33:34: error: unused variable 'dev_vdata' [-Werror,-Wunused-const-variable]
+
+This is not a useful configuration, and there is not much point in saving
+a few bytes when only one of the two is enabled, so just remove all
+these ifdef checks and rely on of_match_node() and acpi_match_device()
+returning NULL when these subsystems are disabled.
+
+Fixes: 6c5063434098 ("crypto: ccp - Add ACPI support")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/crypto/ccp/sp-platform.c | 14 ++------------
+ 1 file changed, 2 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/crypto/ccp/sp-platform.c b/drivers/crypto/ccp/sp-platform.c
+index 831aac1393a2f..d7a226b9d6221 100644
+--- a/drivers/crypto/ccp/sp-platform.c
++++ b/drivers/crypto/ccp/sp-platform.c
+@@ -39,44 +39,38 @@ static const struct sp_dev_vdata dev_vdata[] = {
+       },
+ };
+-#ifdef CONFIG_ACPI
+ static const struct acpi_device_id sp_acpi_match[] = {
+       { "AMDI0C00", (kernel_ulong_t)&dev_vdata[0] },
+       { },
+ };
+ MODULE_DEVICE_TABLE(acpi, sp_acpi_match);
+-#endif
+-#ifdef CONFIG_OF
+ static const struct of_device_id sp_of_match[] = {
+       { .compatible = "amd,ccp-seattle-v1a",
+         .data = (const void *)&dev_vdata[0] },
+       { },
+ };
+ MODULE_DEVICE_TABLE(of, sp_of_match);
+-#endif
+ static struct sp_dev_vdata *sp_get_of_version(struct platform_device *pdev)
+ {
+-#ifdef CONFIG_OF
+       const struct of_device_id *match;
+       match = of_match_node(sp_of_match, pdev->dev.of_node);
+       if (match && match->data)
+               return (struct sp_dev_vdata *)match->data;
+-#endif
++
+       return NULL;
+ }
+ static struct sp_dev_vdata *sp_get_acpi_version(struct platform_device *pdev)
+ {
+-#ifdef CONFIG_ACPI
+       const struct acpi_device_id *match;
+       match = acpi_match_device(sp_acpi_match, &pdev->dev);
+       if (match && match->driver_data)
+               return (struct sp_dev_vdata *)match->driver_data;
+-#endif
++
+       return NULL;
+ }
+@@ -222,12 +216,8 @@ static int sp_platform_resume(struct platform_device *pdev)
+ static struct platform_driver sp_platform_driver = {
+       .driver = {
+               .name = "ccp",
+-#ifdef CONFIG_ACPI
+               .acpi_match_table = sp_acpi_match,
+-#endif
+-#ifdef CONFIG_OF
+               .of_match_table = sp_of_match,
+-#endif
+       },
+       .probe = sp_platform_probe,
+       .remove = sp_platform_remove,
+-- 
+2.43.0
+
diff --git a/queue-5.4/drm-amd-display-fix-potential-index-out-of-bounds-in.patch b/queue-5.4/drm-amd-display-fix-potential-index-out-of-bounds-in.patch
new file mode 100644 (file)
index 0000000..edcd41f
--- /dev/null
@@ -0,0 +1,58 @@
+From a89edf985955c017b037975c67c40543d1ab31a5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 26 Feb 2024 18:38:08 +0530
+Subject: drm/amd/display: Fix potential index out of bounds in color
+ transformation function
+
+From: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
+
+[ Upstream commit 63ae548f1054a0b71678d0349c7dc9628ddd42ca ]
+
+Fixes index out of bounds issue in the color transformation function.
+The issue could occur when the index 'i' exceeds the number of transfer
+function points (TRANSFER_FUNC_POINTS).
+
+The fix adds a check to ensure 'i' is within bounds before accessing the
+transfer function points. If 'i' is out of bounds, an error message is
+logged and the function returns false to indicate an error.
+
+Reported by smatch:
+drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:405 cm_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.red' 1025 <= s32max
+drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:406 cm_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.green' 1025 <= s32max
+drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:407 cm_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.blue' 1025 <= s32max
+
+Fixes: b629596072e5 ("drm/amd/display: Build unity lut for shaper")
+Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
+Cc: Charlene Liu <Charlene.Liu@amd.com>
+Cc: Harry Wentland <harry.wentland@amd.com>
+Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
+Cc: Roman Li <roman.li@amd.com>
+Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
+Cc: Tom Chung <chiahsuan.chung@amd.com>
+Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
+Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
+index bbd6e01b3eca4..f1b1bc8da175b 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_cm_common.c
+@@ -380,6 +380,11 @@ bool cm_helper_translate_curve_to_hw_format(
+                               i += increment) {
+                       if (j == hw_points - 1)
+                               break;
++                      if (i >= TRANSFER_FUNC_POINTS) {
++                              DC_LOG_ERROR("Index out of bounds: i=%d, TRANSFER_FUNC_POINTS=%d\n",
++                                           i, TRANSFER_FUNC_POINTS);
++                              return false;
++                      }
+                       rgb_resulted[j].red = output_tf->tf_pts.red[i];
+                       rgb_resulted[j].green = output_tf->tf_pts.green[i];
+                       rgb_resulted[j].blue = output_tf->tf_pts.blue[i];
+-- 
+2.43.0
+
diff --git a/queue-5.4/drm-amd-display-set-color_mgmt_changed-to-true-on-un.patch b/queue-5.4/drm-amd-display-set-color_mgmt_changed-to-true-on-un.patch
new file mode 100644 (file)
index 0000000..2b86582
--- /dev/null
@@ -0,0 +1,37 @@
+From b272da900375dab519c81165e0849f2441ff2920 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 2 Nov 2023 04:21:55 +0000
+Subject: drm/amd/display: Set color_mgmt_changed to true on unsuspend
+
+From: Joshua Ashton <joshua@froggi.es>
+
+[ Upstream commit 2eb9dd497a698dc384c0dd3e0311d541eb2e13dd ]
+
+Otherwise we can end up with a frame on unsuspend where color management
+is not applied when userspace has not committed themselves.
+
+Fixes re-applying color management on Steam Deck/Gamescope on S3 resume.
+
+Signed-off-by: Joshua Ashton <joshua@froggi.es>
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index 3f3242783e1c3..3bfc4aa328c6f 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -1251,6 +1251,7 @@ static int dm_resume(void *handle)
+                       dc_stream_release(dm_new_crtc_state->stream);
+                       dm_new_crtc_state->stream = NULL;
+               }
++              dm_new_crtc_state->base.color_mgmt_changed = true;
+       }
+       for_each_new_plane_in_state(dm->cached_state, plane, new_plane_state, i) {
+-- 
+2.43.0
+
diff --git a/queue-5.4/drm-amdkfd-flush-the-process-wq-before-creating-a-kf.patch b/queue-5.4/drm-amdkfd-flush-the-process-wq-before-creating-a-kf.patch
new file mode 100644 (file)
index 0000000..ee079f8
--- /dev/null
@@ -0,0 +1,61 @@
+From 2d49a2c35f185fe69d374ca94598eb0c0a6305e1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 10 Apr 2024 14:14:13 +0100
+Subject: drm/amdkfd: Flush the process wq before creating a kfd_process
+
+From: Lancelot SIX <lancelot.six@amd.com>
+
+[ Upstream commit f5b9053398e70a0c10aa9cb4dd5910ab6bc457c5 ]
+
+There is a race condition when re-creating a kfd_process for a process.
+This has been observed when a process under the debugger executes
+exec(3).  In this scenario:
+- The process executes exec.
+ - This will eventually release the process's mm, which will cause the
+   kfd_process object associated with the process to be freed
+   (kfd_process_free_notifier decrements the reference count to the
+   kfd_process to 0).  This causes kfd_process_ref_release to enqueue
+   kfd_process_wq_release to the kfd_process_wq.
+- The debugger receives the PTRACE_EVENT_EXEC notification, and tries to
+  re-enable AMDGPU traps (KFD_IOC_DBG_TRAP_ENABLE).
+ - When handling this request, KFD tries to re-create a kfd_process.
+   This eventually calls kfd_create_process and kobject_init_and_add.
+
+At this point the call to kobject_init_and_add can fail because the
+old kfd_process.kobj has not been freed yet by kfd_process_wq_release.
+
+This patch proposes to avoid this race by making sure to drain
+kfd_process_wq before creating a new kfd_process object.  This way, we
+know that any cleanup task is done executing when we reach
+kobject_init_and_add.
+
+Signed-off-by: Lancelot SIX <lancelot.six@amd.com>
+Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdkfd/kfd_process.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+index aa0a617b8d445..662e4d973f13a 100644
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+@@ -289,6 +289,14 @@ struct kfd_process *kfd_create_process(struct file *filep)
+       if (process) {
+               pr_debug("Process already found\n");
+       } else {
++              /* If the process just called exec(3), it is possible that the
++               * cleanup of the kfd_process (following the release of the mm
++               * of the old process image) is still in the cleanup work queue.
++               * Make sure to drain any job before trying to recreate any
++               * resource for this process.
++               */
++              flush_workqueue(kfd_process_wq);
++
+               process = create_process(thread);
+               if (IS_ERR(process))
+                       goto out;
+-- 
+2.43.0
+
diff --git a/queue-5.4/drm-arm-malidp-fix-a-possible-null-pointer-dereferen.patch b/queue-5.4/drm-arm-malidp-fix-a-possible-null-pointer-dereferen.patch
new file mode 100644 (file)
index 0000000..f064995
--- /dev/null
@@ -0,0 +1,42 @@
+From 106f5040669e18716ff6565156db53db9d792a6e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 7 Apr 2024 14:30:53 +0800
+Subject: drm/arm/malidp: fix a possible null pointer dereference
+
+From: Huai-Yuan Liu <qq810974084@gmail.com>
+
+[ Upstream commit a1f95aede6285dba6dd036d907196f35ae3a11ea ]
+
+In malidp_mw_connector_reset, new memory is allocated with kzalloc, but
+no check is performed. In order to prevent null pointer dereferencing,
+ensure that mw_state is checked before calling
+__drm_atomic_helper_connector_reset.
+
+Fixes: 8cbc5caf36ef ("drm: mali-dp: Add writeback connector")
+Signed-off-by: Huai-Yuan Liu <qq810974084@gmail.com>
+Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20240407063053.5481-1-qq810974084@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/arm/malidp_mw.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/arm/malidp_mw.c b/drivers/gpu/drm/arm/malidp_mw.c
+index 7d0e7b031e447..fa5e77ee3af86 100644
+--- a/drivers/gpu/drm/arm/malidp_mw.c
++++ b/drivers/gpu/drm/arm/malidp_mw.c
+@@ -70,7 +70,10 @@ static void malidp_mw_connector_reset(struct drm_connector *connector)
+               __drm_atomic_helper_connector_destroy_state(connector->state);
+       kfree(connector->state);
+-      __drm_atomic_helper_connector_reset(connector, &mw_state->base);
++      connector->state = NULL;
++
++      if (mw_state)
++              __drm_atomic_helper_connector_reset(connector, &mw_state->base);
+ }
+ static enum drm_connector_status
+-- 
+2.43.0
+
diff --git a/queue-5.4/drm-mediatek-add-0-size-check-to-mtk_drm_gem_obj.patch b/queue-5.4/drm-mediatek-add-0-size-check-to-mtk_drm_gem_obj.patch
new file mode 100644 (file)
index 0000000..f8ff0c4
--- /dev/null
@@ -0,0 +1,44 @@
+From 7a11f572dbb28babadfc333deebaaa6ffbe016d7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Mar 2024 13:00:51 -0500
+Subject: drm/mediatek: Add 0 size check to mtk_drm_gem_obj
+
+From: Justin Green <greenjustin@chromium.org>
+
+[ Upstream commit 1e4350095e8ab2577ee05f8c3b044e661b5af9a0 ]
+
+Add a check to mtk_drm_gem_init if we attempt to allocate a GEM object
+of 0 bytes. Currently, no such check exists and the kernel will panic if
+a userspace application attempts to allocate a 0x0 GBM buffer.
+
+Tested by attempting to allocate a 0x0 GBM buffer on an MT8188 and
+verifying that we now return EINVAL.
+
+Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
+Signed-off-by: Justin Green <greenjustin@chromium.org>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
+Reviewed-by: CK Hu <ck.hu@mediatek.com>
+Link: https://patchwork.kernel.org/project/dri-devel/patch/20240307180051.4104425-1-greenjustin@chromium.org/
+Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/mediatek/mtk_drm_gem.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
+index 5f87d56d2d1d8..de15cf6105d97 100644
+--- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c
++++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
+@@ -21,6 +21,9 @@ static struct mtk_drm_gem_obj *mtk_drm_gem_init(struct drm_device *dev,
+       size = round_up(size, PAGE_SIZE);
++      if (size == 0)
++              return ERR_PTR(-EINVAL);
++
+       mtk_gem_obj = kzalloc(sizeof(*mtk_gem_obj), GFP_KERNEL);
+       if (!mtk_gem_obj)
+               return ERR_PTR(-ENOMEM);
+-- 
+2.43.0
+
diff --git a/queue-5.4/drm-panel-simple-add-missing-innolux-g121x1-l03-form.patch b/queue-5.4/drm-panel-simple-add-missing-innolux-g121x1-l03-form.patch
new file mode 100644 (file)
index 0000000..e46bfe8
--- /dev/null
@@ -0,0 +1,50 @@
+From 4df27c8f580f45880ed4235be059802d7cb12020 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Mar 2024 11:27:36 +0100
+Subject: drm/panel: simple: Add missing Innolux G121X1-L03 format, flags,
+ connector
+
+From: Marek Vasut <marex@denx.de>
+
+[ Upstream commit 11ac72d033b9f577e8ba0c7a41d1c312bb232593 ]
+
+The .bpc = 6 implies .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG ,
+add the missing bus_format. Add missing connector type and bus_flags
+as well.
+
+Documentation [1] 1.4 GENERAL SPECIFICATI0NS indicates this panel is
+capable of both RGB 18bit/24bit panel, the current configuration uses
+18bit mode, .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG , .bpc = 6.
+
+Support for the 24bit mode would require another entry in panel-simple
+with .bus_format = MEDIA_BUS_FMT_RGB666_1X7X4_SPWG and .bpc = 8, which
+is out of scope of this fix.
+
+[1] https://www.distec.de/fileadmin/pdf/produkte/TFT-Displays/Innolux/G121X1-L03_Datasheet.pdf
+
+Fixes: f8fa17ba812b ("drm/panel: simple: Add support for Innolux G121X1-L03")
+Signed-off-by: Marek Vasut <marex@denx.de>
+Acked-by: Jessica Zhang <quic_jesszhan@quicinc.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20240328102746.17868-2-marex@denx.de
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/panel/panel-simple.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
+index fd8b16dcf13e7..83cba00f854d6 100644
+--- a/drivers/gpu/drm/panel/panel-simple.c
++++ b/drivers/gpu/drm/panel/panel-simple.c
+@@ -1729,6 +1729,9 @@ static const struct panel_desc innolux_g121x1_l03 = {
+               .unprepare = 200,
+               .disable = 400,
+       },
++      .bus_format = MEDIA_BUS_FMT_RGB666_1X7X3_SPWG,
++      .bus_flags = DRM_BUS_FLAG_DE_HIGH,
++      .connector_type = DRM_MODE_CONNECTOR_LVDS,
+ };
+ /*
+-- 
+2.43.0
+
diff --git a/queue-5.4/ecryptfs-fix-buffer-size-for-tag-66-packet.patch b/queue-5.4/ecryptfs-fix-buffer-size-for-tag-66-packet.patch
new file mode 100644 (file)
index 0000000..2db46ab
--- /dev/null
@@ -0,0 +1,116 @@
+From 49394d26b0ec33e8baf56026b9847db008e26b94 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 Mar 2024 07:46:00 -0700
+Subject: ecryptfs: Fix buffer size for tag 66 packet
+
+From: Brian Kubisiak <brian@kubisiak.com>
+
+[ Upstream commit 85a6a1aff08ec9f5b929d345d066e2830e8818e5 ]
+
+The 'TAG 66 Packet Format' description is missing the cipher code and
+checksum fields that are packed into the message packet. As a result,
+the buffer allocated for the packet is 3 bytes too small and
+write_tag_66_packet() will write up to 3 bytes past the end of the
+buffer.
+
+Fix this by increasing the size of the allocation so the whole packet
+will always fit in the buffer.
+
+This fixes the below kasan slab-out-of-bounds bug:
+
+  BUG: KASAN: slab-out-of-bounds in ecryptfs_generate_key_packet_set+0x7d6/0xde0
+  Write of size 1 at addr ffff88800afbb2a5 by task touch/181
+
+  CPU: 0 PID: 181 Comm: touch Not tainted 6.6.13-gnu #1 4c9534092be820851bb687b82d1f92a426598dc6
+  Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2/GNU Guix 04/01/2014
+  Call Trace:
+   <TASK>
+   dump_stack_lvl+0x4c/0x70
+   print_report+0xc5/0x610
+   ? ecryptfs_generate_key_packet_set+0x7d6/0xde0
+   ? kasan_complete_mode_report_info+0x44/0x210
+   ? ecryptfs_generate_key_packet_set+0x7d6/0xde0
+   kasan_report+0xc2/0x110
+   ? ecryptfs_generate_key_packet_set+0x7d6/0xde0
+   __asan_store1+0x62/0x80
+   ecryptfs_generate_key_packet_set+0x7d6/0xde0
+   ? __pfx_ecryptfs_generate_key_packet_set+0x10/0x10
+   ? __alloc_pages+0x2e2/0x540
+   ? __pfx_ovl_open+0x10/0x10 [overlay 30837f11141636a8e1793533a02e6e2e885dad1d]
+   ? dentry_open+0x8f/0xd0
+   ecryptfs_write_metadata+0x30a/0x550
+   ? __pfx_ecryptfs_write_metadata+0x10/0x10
+   ? ecryptfs_get_lower_file+0x6b/0x190
+   ecryptfs_initialize_file+0x77/0x150
+   ecryptfs_create+0x1c2/0x2f0
+   path_openat+0x17cf/0x1ba0
+   ? __pfx_path_openat+0x10/0x10
+   do_filp_open+0x15e/0x290
+   ? __pfx_do_filp_open+0x10/0x10
+   ? __kasan_check_write+0x18/0x30
+   ? _raw_spin_lock+0x86/0xf0
+   ? __pfx__raw_spin_lock+0x10/0x10
+   ? __kasan_check_write+0x18/0x30
+   ? alloc_fd+0xf4/0x330
+   do_sys_openat2+0x122/0x160
+   ? __pfx_do_sys_openat2+0x10/0x10
+   __x64_sys_openat+0xef/0x170
+   ? __pfx___x64_sys_openat+0x10/0x10
+   do_syscall_64+0x60/0xd0
+   entry_SYSCALL_64_after_hwframe+0x6e/0xd8
+  RIP: 0033:0x7f00a703fd67
+  Code: 25 00 00 41 00 3d 00 00 41 00 74 37 64 8b 04 25 18 00 00 00 85 c0 75 5b 44 89 e2 48 89 ee bf 9c ff ff ff b8 01 01 00 00 0f 05 <48> 3d 00 f0 ff ff 0f 87 85 00 00 00 48 83 c4 68 5d 41 5c c3 0f 1f
+  RSP: 002b:00007ffc088e30b0 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
+  RAX: ffffffffffffffda RBX: 00007ffc088e3368 RCX: 00007f00a703fd67
+  RDX: 0000000000000941 RSI: 00007ffc088e48d7 RDI: 00000000ffffff9c
+  RBP: 00007ffc088e48d7 R08: 0000000000000001 R09: 0000000000000000
+  R10: 00000000000001b6 R11: 0000000000000246 R12: 0000000000000941
+  R13: 0000000000000000 R14: 00007ffc088e48d7 R15: 00007f00a7180040
+   </TASK>
+
+  Allocated by task 181:
+   kasan_save_stack+0x2f/0x60
+   kasan_set_track+0x29/0x40
+   kasan_save_alloc_info+0x25/0x40
+   __kasan_kmalloc+0xc5/0xd0
+   __kmalloc+0x66/0x160
+   ecryptfs_generate_key_packet_set+0x6d2/0xde0
+   ecryptfs_write_metadata+0x30a/0x550
+   ecryptfs_initialize_file+0x77/0x150
+   ecryptfs_create+0x1c2/0x2f0
+   path_openat+0x17cf/0x1ba0
+   do_filp_open+0x15e/0x290
+   do_sys_openat2+0x122/0x160
+   __x64_sys_openat+0xef/0x170
+   do_syscall_64+0x60/0xd0
+   entry_SYSCALL_64_after_hwframe+0x6e/0xd8
+
+Fixes: dddfa461fc89 ("[PATCH] eCryptfs: Public key; packet management")
+Signed-off-by: Brian Kubisiak <brian@kubisiak.com>
+Link: https://lore.kernel.org/r/5j2q56p6qkhezva6b2yuqfrsurmvrrqtxxzrnp3wqu7xrz22i7@hoecdztoplbl
+Signed-off-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ecryptfs/keystore.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c
+index 4dc09638de8fa..41a1d7e49ecf8 100644
+--- a/fs/ecryptfs/keystore.c
++++ b/fs/ecryptfs/keystore.c
+@@ -300,9 +300,11 @@ write_tag_66_packet(char *signature, u8 cipher_code,
+        *         | Key Identifier Size      | 1 or 2 bytes |
+        *         | Key Identifier           | arbitrary    |
+        *         | File Encryption Key Size | 1 or 2 bytes |
++       *         | Cipher Code              | 1 byte       |
+        *         | File Encryption Key      | arbitrary    |
++       *         | Checksum                 | 2 bytes      |
+        */
+-      data_len = (5 + ECRYPTFS_SIG_SIZE_HEX + crypt_stat->key_size);
++      data_len = (8 + ECRYPTFS_SIG_SIZE_HEX + crypt_stat->key_size);
+       *packet = kmalloc(data_len, GFP_KERNEL);
+       message = *packet;
+       if (!message) {
+-- 
+2.43.0
+
diff --git a/queue-5.4/ext4-avoid-excessive-credit-estimate-in-ext4_tmpfile.patch b/queue-5.4/ext4-avoid-excessive-credit-estimate-in-ext4_tmpfile.patch
new file mode 100644 (file)
index 0000000..4084f77
--- /dev/null
@@ -0,0 +1,52 @@
+From 7131abf332b89d79e3e9e53fd20a557b9611bc48 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Mar 2024 12:53:20 +0100
+Subject: ext4: avoid excessive credit estimate in ext4_tmpfile()
+
+From: Jan Kara <jack@suse.cz>
+
+[ Upstream commit 35a1f12f0ca857fee1d7a04ef52cbd5f1f84de13 ]
+
+A user with minimum journal size (1024 blocks these days) complained
+about the following error triggered by generic/697 test in
+ext4_tmpfile():
+
+run fstests generic/697 at 2024-02-28 05:34:46
+JBD2: vfstest wants too many credits credits:260 rsv_credits:0 max:256
+EXT4-fs error (device loop0) in __ext4_new_inode:1083: error 28
+
+Indeed the credit estimate in ext4_tmpfile() is huge.
+EXT4_MAXQUOTAS_INIT_BLOCKS() is 219, then 10 credits from ext4_tmpfile()
+itself and then ext4_xattr_credits_for_new_inode() adds more credits
+needed for security attributes and ACLs. Now the
+EXT4_MAXQUOTAS_INIT_BLOCKS() is in fact unnecessary because we've
+already initialized quotas with dquot_init() shortly before and so
+EXT4_MAXQUOTAS_TRANS_BLOCKS() is enough (which boils down to 3 credits).
+
+Fixes: af51a2ac36d1 ("ext4: ->tmpfile() support")
+Signed-off-by: Jan Kara <jack@suse.cz>
+Tested-by: Luis Henriques <lhenriques@suse.de>
+Tested-by: Disha Goel <disgoel@linux.ibm.com>
+Link: https://lore.kernel.org/r/20240307115320.28949-1-jack@suse.cz
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/namei.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
+index 87c6d619a564b..71e67ad3af02d 100644
+--- a/fs/ext4/namei.c
++++ b/fs/ext4/namei.c
+@@ -2723,7 +2723,7 @@ static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
+       inode = ext4_new_inode_start_handle(dir, mode,
+                                           NULL, 0, NULL,
+                                           EXT4_HT_DIR,
+-                      EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) +
++                      EXT4_MAXQUOTAS_TRANS_BLOCKS(dir->i_sb) +
+                         4 + EXT4_XATTR_TRANS_BLOCKS);
+       handle = ext4_journal_current_handle();
+       err = PTR_ERR(inode);
+-- 
+2.43.0
+
diff --git a/queue-5.4/fbdev-sh7760fb-allow-modular-build.patch b/queue-5.4/fbdev-sh7760fb-allow-modular-build.patch
new file mode 100644 (file)
index 0000000..38d72aa
--- /dev/null
@@ -0,0 +1,50 @@
+From 394174d10a063c5774ccb5581c5d835dc0e28382 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 9 Feb 2024 21:39:38 -0800
+Subject: fbdev: sh7760fb: allow modular build
+
+From: Randy Dunlap <rdunlap@infradead.org>
+
+[ Upstream commit 51084f89d687e14d96278241e5200cde4b0985c7 ]
+
+There is no reason to prohibit sh7760fb from being built as a
+loadable module as suggested by Geert, so change the config symbol
+from bool to tristate to allow that and change the FB dependency as
+needed.
+
+Fixes: f75f71b2c418 ("fbdev/sh7760fb: Depend on FB=y")
+Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
+Cc: Thomas Zimmermann <tzimmermann@suse.de>
+Cc: Javier Martinez Canillas <javierm@redhat.com>
+Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+Cc: Sam Ravnborg <sam@ravnborg.org>
+Cc: Helge Deller <deller@gmx.de>
+Cc: linux-fbdev@vger.kernel.org
+Cc: dri-devel@lists.freedesktop.org
+Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+Acked-by: Javier Martinez Canillas <javierm@redhat.com>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/Kconfig | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
+index 0396df868bc79..8a3014455327b 100644
+--- a/drivers/video/fbdev/Kconfig
++++ b/drivers/video/fbdev/Kconfig
+@@ -2031,8 +2031,8 @@ config FB_COBALT
+       depends on FB && MIPS_COBALT
+ config FB_SH7760
+-      bool "SH7760/SH7763/SH7720/SH7721 LCDC support"
+-      depends on FB=y && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \
++      tristate "SH7760/SH7763/SH7720/SH7721 LCDC support"
++      depends on FB && (CPU_SUBTYPE_SH7760 || CPU_SUBTYPE_SH7763 \
+               || CPU_SUBTYPE_SH7720 || CPU_SUBTYPE_SH7721)
+       select FB_CFB_FILLRECT
+       select FB_CFB_COPYAREA
+-- 
+2.43.0
+
diff --git a/queue-5.4/fbdev-shmobile-fix-snprintf-truncation.patch b/queue-5.4/fbdev-shmobile-fix-snprintf-truncation.patch
new file mode 100644 (file)
index 0000000..bc62331
--- /dev/null
@@ -0,0 +1,40 @@
+From d9f8ac758a31a86c204b0e5097507044100a6976 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Mar 2024 23:38:00 +0100
+Subject: fbdev: shmobile: fix snprintf truncation
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 26c8cfb9d1e4b252336d23dd5127a8cbed414a32 ]
+
+The name of the overlay does not fit into the fixed-length field:
+
+drivers/video/fbdev/sh_mobile_lcdcfb.c:1577:2: error: 'snprintf' will always be truncated; specified size is 16, but format string expands to at least 25
+
+Make it short enough by changing the string.
+
+Fixes: c5deac3c9b22 ("fbdev: sh_mobile_lcdc: Implement overlays support")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/sh_mobile_lcdcfb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/video/fbdev/sh_mobile_lcdcfb.c b/drivers/video/fbdev/sh_mobile_lcdcfb.c
+index c249763dbf0bf..85af63f32d5e4 100644
+--- a/drivers/video/fbdev/sh_mobile_lcdcfb.c
++++ b/drivers/video/fbdev/sh_mobile_lcdcfb.c
+@@ -1580,7 +1580,7 @@ sh_mobile_lcdc_overlay_fb_init(struct sh_mobile_lcdc_overlay *ovl)
+        */
+       info->fix = sh_mobile_lcdc_overlay_fix;
+       snprintf(info->fix.id, sizeof(info->fix.id),
+-               "SH Mobile LCDC Overlay %u", ovl->index);
++               "SHMobile ovl %u", ovl->index);
+       info->fix.smem_start = ovl->dma_handle;
+       info->fix.smem_len = ovl->fb_size;
+       info->fix.line_length = ovl->pitch;
+-- 
+2.43.0
+
diff --git a/queue-5.4/fbdev-sisfb-hide-unused-variables.patch b/queue-5.4/fbdev-sisfb-hide-unused-variables.patch
new file mode 100644 (file)
index 0000000..440dbe3
--- /dev/null
@@ -0,0 +1,68 @@
+From de948e3a95307497d2a3e6c8163713fecdaf6ff7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Apr 2024 10:06:31 +0200
+Subject: fbdev: sisfb: hide unused variables
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 688cf598665851b9e8cb5083ff1d208ce43d10ff ]
+
+Building with W=1 shows that a couple of variables in this driver are only
+used in certain configurations:
+
+drivers/video/fbdev/sis/init301.c:239:28: error: 'SiS_Part2CLVX_6' defined but not used [-Werror=unused-const-variable=]
+  239 | static const unsigned char SiS_Part2CLVX_6[] = {   /* 1080i */
+      |                            ^~~~~~~~~~~~~~~
+drivers/video/fbdev/sis/init301.c:230:28: error: 'SiS_Part2CLVX_5' defined but not used [-Werror=unused-const-variable=]
+  230 | static const unsigned char SiS_Part2CLVX_5[] = {   /* 750p */
+      |                            ^~~~~~~~~~~~~~~
+drivers/video/fbdev/sis/init301.c:211:28: error: 'SiS_Part2CLVX_4' defined but not used [-Werror=unused-const-variable=]
+  211 | static const unsigned char SiS_Part2CLVX_4[] = {   /* PAL */
+      |                            ^~~~~~~~~~~~~~~
+drivers/video/fbdev/sis/init301.c:192:28: error: 'SiS_Part2CLVX_3' defined but not used [-Werror=unused-const-variable=]
+  192 | static const unsigned char SiS_Part2CLVX_3[] = {  /* NTSC, 525i, 525p */
+      |                            ^~~~~~~~~~~~~~~
+drivers/video/fbdev/sis/init301.c:184:28: error: 'SiS_Part2CLVX_2' defined but not used [-Werror=unused-const-variable=]
+  184 | static const unsigned char SiS_Part2CLVX_2[] = {
+      |                            ^~~~~~~~~~~~~~~
+drivers/video/fbdev/sis/init301.c:176:28: error: 'SiS_Part2CLVX_1' defined but not used [-Werror=unused-const-variable=]
+  176 | static const unsigned char SiS_Part2CLVX_1[] = {
+      |                            ^~~~~~~~~~~~~~~
+
+This started showing up after the definitions were moved into the
+source file from the header, which was not flagged by the compiler.
+Move the definition into the appropriate #ifdef block that already
+exists next to them.
+
+Fixes: 5908986ef348 ("video: fbdev: sis: avoid mismatched prototypes")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Helge Deller <deller@gmx.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/video/fbdev/sis/init301.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/video/fbdev/sis/init301.c b/drivers/video/fbdev/sis/init301.c
+index a8fb41f1a2580..09329072004f4 100644
+--- a/drivers/video/fbdev/sis/init301.c
++++ b/drivers/video/fbdev/sis/init301.c
+@@ -172,7 +172,7 @@ static const unsigned char SiS_HiTVGroup3_2[] = {
+ };
+ /* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
+-
++#ifdef CONFIG_FB_SIS_315
+ static const unsigned char SiS_Part2CLVX_1[] = {
+     0x00,0x00,
+     0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
+@@ -245,7 +245,6 @@ static const unsigned char SiS_Part2CLVX_6[] = {   /* 1080i */
+     0xFF,0xFF,
+ };
+-#ifdef CONFIG_FB_SIS_315
+ /* 661 et al LCD data structure (2.03.00) */
+ static const unsigned char SiS_LCDStruct661[] = {
+     /* 1024x768 */
+-- 
+2.43.0
+
diff --git a/queue-5.4/firmware-raspberrypi-use-correct-device-for-dma-mapp.patch b/queue-5.4/firmware-raspberrypi-use-correct-device-for-dma-mapp.patch
new file mode 100644 (file)
index 0000000..38ea819
--- /dev/null
@@ -0,0 +1,65 @@
+From 5d9b7d7e61999c0f56d3c6f7b0b2e621b3b2a12d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Mar 2024 21:58:06 +0200
+Subject: firmware: raspberrypi: Use correct device for DMA mappings
+
+From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+
+[ Upstream commit df518a0ae1b982a4dcf2235464016c0c4576a34d ]
+
+The buffer used to transfer data over the mailbox interface is mapped
+using the client's device. This is incorrect, as the device performing
+the DMA transfer is the mailbox itself. Fix it by using the mailbox
+controller device instead.
+
+This requires including the mailbox_controller.h header to dereference
+the mbox_chan and mbox_controller structures. The header is not meant to
+be included by clients. This could be fixed by extending the client API
+with a function to access the controller's device.
+
+Fixes: 4e3d60656a72 ("ARM: bcm2835: Add the Raspberry Pi firmware driver")
+Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
+Tested-by: Ivan T. Ivanov <iivanov@suse.de>
+Link: https://lore.kernel.org/r/20240326195807.15163-3-laurent.pinchart@ideasonboard.com
+Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/raspberrypi.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
+index 1a690b2c1e2ff..9fdebb1171e55 100644
+--- a/drivers/firmware/raspberrypi.c
++++ b/drivers/firmware/raspberrypi.c
+@@ -9,6 +9,7 @@
+ #include <linux/dma-mapping.h>
+ #include <linux/kref.h>
+ #include <linux/mailbox_client.h>
++#include <linux/mailbox_controller.h>
+ #include <linux/module.h>
+ #include <linux/of_platform.h>
+ #include <linux/platform_device.h>
+@@ -96,8 +97,8 @@ int rpi_firmware_property_list(struct rpi_firmware *fw,
+       if (size & 3)
+               return -EINVAL;
+-      buf = dma_alloc_coherent(fw->cl.dev, PAGE_ALIGN(size), &bus_addr,
+-                               GFP_ATOMIC);
++      buf = dma_alloc_coherent(fw->chan->mbox->dev, PAGE_ALIGN(size),
++                               &bus_addr, GFP_ATOMIC);
+       if (!buf)
+               return -ENOMEM;
+@@ -125,7 +126,7 @@ int rpi_firmware_property_list(struct rpi_firmware *fw,
+               ret = -EINVAL;
+       }
+-      dma_free_coherent(fw->cl.dev, PAGE_ALIGN(size), buf, bus_addr);
++      dma_free_coherent(fw->chan->mbox->dev, PAGE_ALIGN(size), buf, bus_addr);
+       return ret;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/hid-intel-ish-hid-ipc-add-check-for-pci_alloc_irq_ve.patch b/queue-5.4/hid-intel-ish-hid-ipc-add-check-for-pci_alloc_irq_ve.patch
new file mode 100644 (file)
index 0000000..d0f3d67
--- /dev/null
@@ -0,0 +1,41 @@
+From 51aa605b32b1710b0ba632948d504d3b2242fe65 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 29 Apr 2024 16:54:22 +0800
+Subject: HID: intel-ish-hid: ipc: Add check for pci_alloc_irq_vectors
+
+From: Chen Ni <nichen@iscas.ac.cn>
+
+[ Upstream commit 6baa4524027fd64d7ca524e1717c88c91a354b93 ]
+
+Add a check for the return value of pci_alloc_irq_vectors() and return
+error if it fails.
+
+[jkosina@suse.com: reworded changelog based on Srinivas' suggestion]
+Fixes: 74fbc7d371d9 ("HID: intel-ish-hid: add MSI interrupt support")
+Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
+Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hid/intel-ish-hid/ipc/pci-ish.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
+index f491d8b4e24c7..05134ee802778 100644
+--- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
++++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
+@@ -159,6 +159,11 @@ static int ish_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+       /* request and enable interrupt */
+       ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
++      if (ret < 0) {
++              dev_err(dev, "ISH: Failed to allocate IRQ vectors\n");
++              return ret;
++      }
++
+       if (!pdev->msi_enabled && !pdev->msix_enabled)
+               irq_flag = IRQF_SHARED;
+-- 
+2.43.0
+
diff --git a/queue-5.4/ipv6-sr-add-missing-seg6_local_exit.patch b/queue-5.4/ipv6-sr-add-missing-seg6_local_exit.patch
new file mode 100644 (file)
index 0000000..83af03b
--- /dev/null
@@ -0,0 +1,38 @@
+From e8dde1190f21ecbc3c7ffe438989914a3b3641e6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 21:18:10 +0800
+Subject: ipv6: sr: add missing seg6_local_exit
+
+From: Hangbin Liu <liuhangbin@gmail.com>
+
+[ Upstream commit 3321687e321307629c71b664225b861ebf3e5753 ]
+
+Currently, we only call seg6_local_exit() in seg6_init() if
+seg6_local_init() failed. But forgot to call it in seg6_exit().
+
+Fixes: d1df6fd8a1d2 ("ipv6: sr: define core operations for seg6local lightweight tunnel")
+Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
+Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
+Reviewed-by: David Ahern <dsahern@kernel.org>
+Link: https://lore.kernel.org/r/20240509131812.1662197-2-liuhangbin@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/seg6.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
+index 7094f8691ac68..7d8fbbc363ec0 100644
+--- a/net/ipv6/seg6.c
++++ b/net/ipv6/seg6.c
+@@ -493,6 +493,7 @@ void seg6_exit(void)
+       seg6_hmac_exit();
+ #endif
+ #ifdef CONFIG_IPV6_SEG6_LWTUNNEL
++      seg6_local_exit();
+       seg6_iptunnel_exit();
+ #endif
+       unregister_pernet_subsys(&ip6_segments_ops);
+-- 
+2.43.0
+
diff --git a/queue-5.4/ipv6-sr-fix-incorrect-unregister-order.patch b/queue-5.4/ipv6-sr-fix-incorrect-unregister-order.patch
new file mode 100644 (file)
index 0000000..fce5dcd
--- /dev/null
@@ -0,0 +1,39 @@
+From 71b5d5f611aa1bc35b9b0596c1d61900657302d1 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 21:18:11 +0800
+Subject: ipv6: sr: fix incorrect unregister order
+
+From: Hangbin Liu <liuhangbin@gmail.com>
+
+[ Upstream commit 6e370a771d2985107e82d0f6174381c1acb49c20 ]
+
+Commit 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and
+null-ptr-deref") changed the register order in seg6_init(). But the
+unregister order in seg6_exit() is not updated.
+
+Fixes: 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and null-ptr-deref")
+Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
+Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
+Reviewed-by: David Ahern <dsahern@kernel.org>
+Link: https://lore.kernel.org/r/20240509131812.1662197-3-liuhangbin@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/seg6.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
+index 7d8fbbc363ec0..98ee76b33b622 100644
+--- a/net/ipv6/seg6.c
++++ b/net/ipv6/seg6.c
+@@ -496,6 +496,6 @@ void seg6_exit(void)
+       seg6_local_exit();
+       seg6_iptunnel_exit();
+ #endif
+-      unregister_pernet_subsys(&ip6_segments_ops);
+       genl_unregister_family(&seg6_genl_family);
++      unregister_pernet_subsys(&ip6_segments_ops);
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/ipv6-sr-fix-invalid-unregister-error-path.patch b/queue-5.4/ipv6-sr-fix-invalid-unregister-error-path.patch
new file mode 100644 (file)
index 0000000..82cba36
--- /dev/null
@@ -0,0 +1,46 @@
+From 1bd1e83ca74845327ac1f6d7022af22df817987c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 21:18:12 +0800
+Subject: ipv6: sr: fix invalid unregister error path
+
+From: Hangbin Liu <liuhangbin@gmail.com>
+
+[ Upstream commit 160e9d2752181fcf18c662e74022d77d3164cd45 ]
+
+The error path of seg6_init() is wrong in case CONFIG_IPV6_SEG6_LWTUNNEL
+is not defined. In that case if seg6_hmac_init() fails, the
+genl_unregister_family() isn't called.
+
+This issue exist since commit 46738b1317e1 ("ipv6: sr: add option to control
+lwtunnel support"), and commit 5559cea2d5aa ("ipv6: sr: fix possible
+use-after-free and null-ptr-deref") replaced unregister_pernet_subsys()
+with genl_unregister_family() in this error path.
+
+Fixes: 46738b1317e1 ("ipv6: sr: add option to control lwtunnel support")
+Reported-by: Guillaume Nault <gnault@redhat.com>
+Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
+Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
+Reviewed-by: David Ahern <dsahern@kernel.org>
+Link: https://lore.kernel.org/r/20240509131812.1662197-4-liuhangbin@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/seg6.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
+index 98ee76b33b622..8962816925438 100644
+--- a/net/ipv6/seg6.c
++++ b/net/ipv6/seg6.c
+@@ -480,6 +480,8 @@ int __init seg6_init(void)
+ #endif
+ #ifdef CONFIG_IPV6_SEG6_LWTUNNEL
+ out_unregister_genl:
++#endif
++#if IS_ENABLED(CONFIG_IPV6_SEG6_LWTUNNEL) || IS_ENABLED(CONFIG_IPV6_SEG6_HMAC)
+       genl_unregister_family(&seg6_genl_family);
+ #endif
+ out_unregister_pernet:
+-- 
+2.43.0
+
diff --git a/queue-5.4/irqchip-alpine-msi-fix-off-by-one-in-allocation-erro.patch b/queue-5.4/irqchip-alpine-msi-fix-off-by-one-in-allocation-erro.patch
new file mode 100644 (file)
index 0000000..41a7173
--- /dev/null
@@ -0,0 +1,40 @@
+From 24fab7b8ff388a5b50e777721beacf1aef0c7408 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Mar 2024 22:23:05 +0800
+Subject: irqchip/alpine-msi: Fix off-by-one in allocation error path
+
+From: Zenghui Yu <yuzenghui@huawei.com>
+
+[ Upstream commit ff3669a71afa06208de58d6bea1cc49d5e3fcbd1 ]
+
+When alpine_msix_gic_domain_alloc() fails, there is an off-by-one in the
+number of interrupts to be freed.
+
+Fix it by passing the number of successfully allocated interrupts, instead
+of the relative index of the last allocated one.
+
+Fixes: 3841245e8498 ("irqchip/alpine-msi: Fix freeing of interrupts on allocation error path")
+Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Link: https://lore.kernel.org/r/20240327142305.1048-1-yuzenghui@huawei.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/irqchip/irq-alpine-msi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/irqchip/irq-alpine-msi.c b/drivers/irqchip/irq-alpine-msi.c
+index 1819bb1d27230..aedbc4befcdf0 100644
+--- a/drivers/irqchip/irq-alpine-msi.c
++++ b/drivers/irqchip/irq-alpine-msi.c
+@@ -165,7 +165,7 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain,
+       return 0;
+ err_sgi:
+-      irq_domain_free_irqs_parent(domain, virq, i - 1);
++      irq_domain_free_irqs_parent(domain, virq, i);
+       alpine_msix_free_sgi(priv, sgi, nr_irqs);
+       return err;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/jffs2-prevent-xattr-node-from-overflowing-the-eraseb.patch b/queue-5.4/jffs2-prevent-xattr-node-from-overflowing-the-eraseb.patch
new file mode 100644 (file)
index 0000000..6c4fb79
--- /dev/null
@@ -0,0 +1,81 @@
+From c89c1250ba72a567c6e4173b08205d5f68cae227 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Apr 2024 18:53:54 +0300
+Subject: jffs2: prevent xattr node from overflowing the eraseblock
+
+From: Ilya Denisyev <dev@elkcl.ru>
+
+[ Upstream commit c6854e5a267c28300ff045480b5a7ee7f6f1d913 ]
+
+Add a check to make sure that the requested xattr node size is no larger
+than the eraseblock minus the cleanmarker.
+
+Unlike the usual inode nodes, the xattr nodes aren't split into parts
+and spread across multiple eraseblocks, which means that a xattr node
+must not occupy more than one eraseblock. If the requested xattr value is
+too large, the xattr node can spill onto the next eraseblock, overwriting
+the nodes and causing errors such as:
+
+jffs2: argh. node added in wrong place at 0x0000b050(2)
+jffs2: nextblock 0x0000a000, expected at 0000b00c
+jffs2: error: (823) do_verify_xattr_datum: node CRC failed at 0x01e050,
+read=0xfc892c93, calc=0x000000
+jffs2: notice: (823) jffs2_get_inode_nodes: Node header CRC failed
+at 0x01e00c. {848f,2fc4,0fef511f,59a3d171}
+jffs2: Node at 0x0000000c with length 0x00001044 would run over the
+end of the erase block
+jffs2: Perhaps the file system was created with the wrong erase size?
+jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found
+at 0x00000010: 0x1044 instead
+
+This breaks the filesystem and can lead to KASAN crashes such as:
+
+BUG: KASAN: slab-out-of-bounds in jffs2_sum_add_kvec+0x125e/0x15d0
+Read of size 4 at addr ffff88802c31e914 by task repro/830
+CPU: 0 PID: 830 Comm: repro Not tainted 6.9.0-rc3+ #1
+Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
+BIOS Arch Linux 1.16.3-1-1 04/01/2014
+Call Trace:
+ <TASK>
+ dump_stack_lvl+0xc6/0x120
+ print_report+0xc4/0x620
+ ? __virt_addr_valid+0x308/0x5b0
+ kasan_report+0xc1/0xf0
+ ? jffs2_sum_add_kvec+0x125e/0x15d0
+ ? jffs2_sum_add_kvec+0x125e/0x15d0
+ jffs2_sum_add_kvec+0x125e/0x15d0
+ jffs2_flash_direct_writev+0xa8/0xd0
+ jffs2_flash_writev+0x9c9/0xef0
+ ? __x64_sys_setxattr+0xc4/0x160
+ ? do_syscall_64+0x69/0x140
+ ? entry_SYSCALL_64_after_hwframe+0x76/0x7e
+ [...]
+
+Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
+
+Fixes: aa98d7cf59b5 ("[JFFS2][XATTR] XATTR support on JFFS2 (version. 5)")
+Signed-off-by: Ilya Denisyev <dev@elkcl.ru>
+Link: https://lore.kernel.org/r/20240412155357.237803-1-dev@elkcl.ru
+Signed-off-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jffs2/xattr.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/fs/jffs2/xattr.c b/fs/jffs2/xattr.c
+index acb4492f5970c..5a31220f96f5f 100644
+--- a/fs/jffs2/xattr.c
++++ b/fs/jffs2/xattr.c
+@@ -1111,6 +1111,9 @@ int do_jffs2_setxattr(struct inode *inode, int xprefix, const char *xname,
+               return rc;
+       request = PAD(sizeof(struct jffs2_raw_xattr) + strlen(xname) + 1 + size);
++      if (request > c->sector_size - c->cleanmarker_size)
++              return -ERANGE;
++
+       rc = jffs2_reserve_space(c, request, &length,
+                                ALLOC_NORMAL, JFFS2_SUMMARY_XATTR_SIZE);
+       if (rc) {
+-- 
+2.43.0
+
diff --git a/queue-5.4/m68k-fix-spinlock-race-in-kernel-thread-creation.patch b/queue-5.4/m68k-fix-spinlock-race-in-kernel-thread-creation.patch
new file mode 100644 (file)
index 0000000..d7f0e93
--- /dev/null
@@ -0,0 +1,77 @@
+From d27ca6fe195588a5abebb99479f2e8746413ed26 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 11 Apr 2024 15:36:31 +1200
+Subject: m68k: Fix spinlock race in kernel thread creation
+
+From: Michael Schmitz <schmitzmic@gmail.com>
+
+[ Upstream commit da89ce46f02470ef08f0f580755d14d547da59ed ]
+
+Context switching does take care to retain the correct lock owner across
+the switch from 'prev' to 'next' tasks.  This does rely on interrupts
+remaining disabled for the entire duration of the switch.
+
+This condition is guaranteed for normal process creation and context
+switching between already running processes, because both 'prev' and
+'next' already have interrupts disabled in their saved copies of the
+status register.
+
+The situation is different for newly created kernel threads.  The status
+register is set to PS_S in copy_thread(), which does leave the IPL at 0.
+Upon restoring the 'next' thread's status register in switch_to() aka
+resume(), interrupts then become enabled prematurely.  resume() then
+returns via ret_from_kernel_thread() and schedule_tail() where run queue
+lock is released (see finish_task_switch() and finish_lock_switch()).
+
+A timer interrupt calling scheduler_tick() before the lock is released
+in finish_task_switch() will find the lock already taken, with the
+current task as lock owner.  This causes a spinlock recursion warning as
+reported by Guenter Roeck.
+
+As far as I can ascertain, this race has been opened in commit
+533e6903bea0 ("m68k: split ret_from_fork(), simplify kernel_thread()")
+but I haven't done a detailed study of kernel history so it may well
+predate that commit.
+
+Interrupts cannot be disabled in the saved status register copy for
+kernel threads (init will complain about interrupts disabled when
+finally starting user space).  Disable interrupts temporarily when
+switching the tasks' register sets in resume().
+
+Note that a simple oriw 0x700,%sr after restoring sr is not enough here
+- this leaves enough of a race for the 'spinlock recursion' warning to
+still be observed.
+
+Tested on ARAnyM and qemu (Quadra 800 emulation).
+
+Fixes: 533e6903bea0 ("m68k: split ret_from_fork(), simplify kernel_thread()")
+Reported-by: Guenter Roeck <linux@roeck-us.net>
+Closes: https://lore.kernel.org/all/07811b26-677c-4d05-aeb4-996cd880b789@roeck-us.net
+Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
+Tested-by: Guenter Roeck <linux@roeck-us.net>
+Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Link: https://lore.kernel.org/r/20240411033631.16335-1-schmitzmic@gmail.com
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/m68k/kernel/entry.S | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S
+index 9a66657773beb..417d8f0e89627 100644
+--- a/arch/m68k/kernel/entry.S
++++ b/arch/m68k/kernel/entry.S
+@@ -425,7 +425,9 @@ resume:
+       movec   %a0,%dfc
+       /* restore status register */
+-      movew   %a1@(TASK_THREAD+THREAD_SR),%sr
++      movew   %a1@(TASK_THREAD+THREAD_SR),%d0
++      oriw    #0x0700,%d0
++      movew   %d0,%sr
+       rts
+-- 
+2.43.0
+
diff --git a/queue-5.4/m68k-mac-fix-reboot-hang-on-mac-iici.patch b/queue-5.4/m68k-mac-fix-reboot-hang-on-mac-iici.patch
new file mode 100644 (file)
index 0000000..f30f91f
--- /dev/null
@@ -0,0 +1,99 @@
+From 47ef1bd750b07f6d81ddfb9b1ce5cc67169fb012 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 4 May 2024 14:31:12 +1000
+Subject: m68k: mac: Fix reboot hang on Mac IIci
+
+From: Finn Thain <fthain@linux-m68k.org>
+
+[ Upstream commit 265a3b322df9a973ff1fc63da70af456ab6ae1d6 ]
+
+Calling mac_reset() on a Mac IIci does reset the system, but what
+follows is a POST failure that requires a manual reset to resolve.
+Avoid that by using the 68030 asm implementation instead of the C
+implementation.
+
+Apparently the SE/30 has a similar problem as it has used the asm
+implementation since before git. This patch extends that solution to
+other systems with a similar ROM.
+
+After this patch, the only systems still using the C implementation are
+68040 systems where adb_type is either MAC_ADB_IOP or MAC_ADB_II. This
+implies a 1 MiB Quadra ROM.
+
+This now includes the Quadra 900/950, which previously fell through to
+the "should never get here" catch-all.
+
+Reported-and-tested-by: Stan Johnson <userm57@yahoo.com>
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Signed-off-by: Finn Thain <fthain@linux-m68k.org>
+Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Link: https://lore.kernel.org/r/480ebd1249d229c6dc1f3f1c6d599b8505483fd8.1714797072.git.fthain@linux-m68k.org
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/m68k/mac/misc.c | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/arch/m68k/mac/misc.c b/arch/m68k/mac/misc.c
+index 90f4e9ca1276b..d3b34dd7590de 100644
+--- a/arch/m68k/mac/misc.c
++++ b/arch/m68k/mac/misc.c
+@@ -452,30 +452,18 @@ void mac_poweroff(void)
+ void mac_reset(void)
+ {
+-      if (macintosh_config->adb_type == MAC_ADB_II &&
+-          macintosh_config->ident != MAC_MODEL_SE30) {
+-              /* need ROMBASE in booter */
+-              /* indeed, plus need to MAP THE ROM !! */
+-
+-              if (mac_bi_data.rombase == 0)
+-                      mac_bi_data.rombase = 0x40800000;
+-
+-              /* works on some */
+-              rom_reset = (void *) (mac_bi_data.rombase + 0xa);
+-
+-              local_irq_disable();
+-              rom_reset();
+ #ifdef CONFIG_ADB_CUDA
+-      } else if (macintosh_config->adb_type == MAC_ADB_EGRET ||
+-                 macintosh_config->adb_type == MAC_ADB_CUDA) {
++      if (macintosh_config->adb_type == MAC_ADB_EGRET ||
++          macintosh_config->adb_type == MAC_ADB_CUDA) {
+               cuda_restart();
++      } else
+ #endif
+ #ifdef CONFIG_ADB_PMU
+-      } else if (macintosh_config->adb_type == MAC_ADB_PB2) {
++      if (macintosh_config->adb_type == MAC_ADB_PB2) {
+               pmu_restart();
++      } else
+ #endif
+-      } else if (CPU_IS_030) {
+-
++      if (CPU_IS_030) {
+               /* 030-specific reset routine.  The idea is general, but the
+                * specific registers to reset are '030-specific.  Until I
+                * have a non-030 machine, I can't test anything else.
+@@ -523,6 +511,18 @@ void mac_reset(void)
+                   "jmp %/a0@\n\t" /* jump to the reset vector */
+                   ".chip 68k"
+                   : : "r" (offset), "a" (rombase) : "a0");
++      } else {
++              /* need ROMBASE in booter */
++              /* indeed, plus need to MAP THE ROM !! */
++
++              if (mac_bi_data.rombase == 0)
++                      mac_bi_data.rombase = 0x40800000;
++
++              /* works on some */
++              rom_reset = (void *)(mac_bi_data.rombase + 0xa);
++
++              local_irq_disable();
++              rom_reset();
+       }
+       /* should never get here */
+-- 
+2.43.0
+
diff --git a/queue-5.4/macintosh-via-macii-fix-bug-sleeping-function-called.patch b/queue-5.4/macintosh-via-macii-fix-bug-sleeping-function-called.patch
new file mode 100644 (file)
index 0000000..6bb13fc
--- /dev/null
@@ -0,0 +1,59 @@
+From 002c2ab69addb900670b7c17a40b17b1aab004cf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Mar 2024 13:53:41 +1100
+Subject: macintosh/via-macii: Fix "BUG: sleeping function called from invalid
+ context"
+
+From: Finn Thain <fthain@linux-m68k.org>
+
+[ Upstream commit d301a71c76ee4c384b4e03cdc320a55f5cf1df05 ]
+
+The via-macii ADB driver calls request_irq() after disabling hard
+interrupts. But disabling interrupts isn't necessary here because the
+VIA shift register interrupt was masked during VIA1 initialization.
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Signed-off-by: Finn Thain <fthain@linux-m68k.org>
+Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Link: https://lore.kernel.org/r/419fcc09d0e563b425c419053d02236b044d86b0.1710298421.git.fthain@linux-m68k.org
+Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/macintosh/via-macii.c | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/macintosh/via-macii.c b/drivers/macintosh/via-macii.c
+index 6aa903529570d..9344452deaa3c 100644
+--- a/drivers/macintosh/via-macii.c
++++ b/drivers/macintosh/via-macii.c
+@@ -135,24 +135,19 @@ static int macii_probe(void)
+ /* Initialize the driver */
+ int macii_init(void)
+ {
+-      unsigned long flags;
+       int err;
+-      local_irq_save(flags);
+-
+       err = macii_init_via();
+       if (err)
+-              goto out;
++              return err;
+       err = request_irq(IRQ_MAC_ADB, macii_interrupt, 0, "ADB",
+                         macii_interrupt);
+       if (err)
+-              goto out;
++              return err;
+       macii_state = idle;
+-out:
+-      local_irq_restore(flags);
+-      return err;
++      return 0;
+ }
+ /* initialize the hardware */
+-- 
+2.43.0
+
diff --git a/queue-5.4/md-fix-resync-softlockup-when-bitmap-size-is-less-th.patch b/queue-5.4/md-fix-resync-softlockup-when-bitmap-size-is-less-th.patch
new file mode 100644 (file)
index 0000000..649b81f
--- /dev/null
@@ -0,0 +1,93 @@
+From e7d55b720e2e7346c2d544e717a93e1ed0ec971d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 22 Apr 2024 14:58:24 +0800
+Subject: md: fix resync softlockup when bitmap size is less than array size
+
+From: Yu Kuai <yukuai3@huawei.com>
+
+[ Upstream commit f0e729af2eb6bee9eb58c4df1087f14ebaefe26b ]
+
+Is is reported that for dm-raid10, lvextend + lvchange --syncaction will
+trigger following softlockup:
+
+kernel:watchdog: BUG: soft lockup - CPU#3 stuck for 26s! [mdX_resync:6976]
+CPU: 7 PID: 3588 Comm: mdX_resync Kdump: loaded Not tainted 6.9.0-rc4-next-20240419 #1
+RIP: 0010:_raw_spin_unlock_irq+0x13/0x30
+Call Trace:
+ <TASK>
+ md_bitmap_start_sync+0x6b/0xf0
+ raid10_sync_request+0x25c/0x1b40 [raid10]
+ md_do_sync+0x64b/0x1020
+ md_thread+0xa7/0x170
+ kthread+0xcf/0x100
+ ret_from_fork+0x30/0x50
+ ret_from_fork_asm+0x1a/0x30
+
+And the detailed process is as follows:
+
+md_do_sync
+ j = mddev->resync_min
+ while (j < max_sectors)
+  sectors = raid10_sync_request(mddev, j, &skipped)
+   if (!md_bitmap_start_sync(..., &sync_blocks))
+    // md_bitmap_start_sync set sync_blocks to 0
+    return sync_blocks + sectors_skippe;
+  // sectors = 0;
+  j += sectors;
+  // j never change
+
+Root cause is that commit 301867b1c168 ("md/raid10: check
+slab-out-of-bounds in md_bitmap_get_counter") return early from
+md_bitmap_get_counter(), without setting returned blocks.
+
+Fix this problem by always set returned blocks from
+md_bitmap_get_counter"(), as it used to be.
+
+Noted that this patch just fix the softlockup problem in kernel, the
+case that bitmap size doesn't match array size still need to be fixed.
+
+Fixes: 301867b1c168 ("md/raid10: check slab-out-of-bounds in md_bitmap_get_counter")
+Reported-and-tested-by: Nigel Croxon <ncroxon@redhat.com>
+Closes: https://lore.kernel.org/all/71ba5272-ab07-43ba-8232-d2da642acb4e@redhat.com/
+Signed-off-by: Yu Kuai <yukuai3@huawei.com>
+Link: https://lore.kernel.org/r/20240422065824.2516-1-yukuai1@huaweicloud.com
+Signed-off-by: Song Liu <song@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/md-bitmap.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
+index 843139447a964..8fc85b6251e48 100644
+--- a/drivers/md/md-bitmap.c
++++ b/drivers/md/md-bitmap.c
+@@ -1359,7 +1359,7 @@ __acquires(bitmap->lock)
+       sector_t chunk = offset >> bitmap->chunkshift;
+       unsigned long page = chunk >> PAGE_COUNTER_SHIFT;
+       unsigned long pageoff = (chunk & PAGE_COUNTER_MASK) << COUNTER_BYTE_SHIFT;
+-      sector_t csize;
++      sector_t csize = ((sector_t)1) << bitmap->chunkshift;
+       int err;
+       if (page >= bitmap->pages) {
+@@ -1368,6 +1368,7 @@ __acquires(bitmap->lock)
+                * End-of-device while looking for a whole page or
+                * user set a huge number to sysfs bitmap_set_bits.
+                */
++              *blocks = csize - (offset & (csize - 1));
+               return NULL;
+       }
+       err = md_bitmap_checkpage(bitmap, page, create, 0);
+@@ -1376,8 +1377,7 @@ __acquires(bitmap->lock)
+           bitmap->bp[page].map == NULL)
+               csize = ((sector_t)1) << (bitmap->chunkshift +
+                                         PAGE_COUNTER_SHIFT);
+-      else
+-              csize = ((sector_t)1) << bitmap->chunkshift;
++
+       *blocks = csize - (offset & (csize - 1));
+       if (err < 0)
+-- 
+2.43.0
+
diff --git a/queue-5.4/media-ngene-add-dvb_ca_en50221_init-return-value-che.patch b/queue-5.4/media-ngene-add-dvb_ca_en50221_init-return-value-che.patch
new file mode 100644 (file)
index 0000000..3084168
--- /dev/null
@@ -0,0 +1,40 @@
+From 12183eaea0db0beb1163f4e9becfa6469a871069 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 Mar 2024 14:15:53 +0300
+Subject: media: ngene: Add dvb_ca_en50221_init return value check
+
+From: Aleksandr Burakov <a.burakov@rosalinux.ru>
+
+[ Upstream commit 9bb1fd7eddcab2d28cfc11eb20f1029154dac718 ]
+
+The return value of dvb_ca_en50221_init() is not checked here that may
+cause undefined behavior in case of nonzero value return.
+
+Found by Linux Verification Center (linuxtesting.org) with SVACE.
+
+Fixes: 25aee3debe04 ("[media] Rename media/dvb as media/pci")
+Signed-off-by: Aleksandr Burakov <a.burakov@rosalinux.ru>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/pci/ngene/ngene-core.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/media/pci/ngene/ngene-core.c b/drivers/media/pci/ngene/ngene-core.c
+index 919b297e645c5..622b2d2950a77 100644
+--- a/drivers/media/pci/ngene/ngene-core.c
++++ b/drivers/media/pci/ngene/ngene-core.c
+@@ -1488,7 +1488,9 @@ static int init_channel(struct ngene_channel *chan)
+       }
+       if (dev->ci.en && (io & NGENE_IO_TSOUT)) {
+-              dvb_ca_en50221_init(adapter, dev->ci.en, 0, 1);
++              ret = dvb_ca_en50221_init(adapter, dev->ci.en, 0, 1);
++              if (ret != 0)
++                      goto err;
+               set_transfer(chan, 1);
+               chan->dev->channel[2].DataFormatFlags = DF_SWAP32;
+               set_transfer(&chan->dev->channel[2], 1);
+-- 
+2.43.0
+
diff --git a/queue-5.4/media-radio-shark2-avoid-led_names-truncations.patch b/queue-5.4/media-radio-shark2-avoid-led_names-truncations.patch
new file mode 100644 (file)
index 0000000..aece7a7
--- /dev/null
@@ -0,0 +1,40 @@
+From 177116f2b3f4ae42e9c1a983a5faebf0f69135cd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 25 Mar 2024 14:50:24 +0000
+Subject: media: radio-shark2: Avoid led_names truncations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ricardo Ribalda <ribalda@chromium.org>
+
+[ Upstream commit 1820e16a3019b6258e6009d34432946a6ddd0a90 ]
+
+Increase the size of led_names so it can fit any valid v4l2 device name.
+
+Fixes:
+drivers/media/radio/radio-shark2.c:197:17: warning: â€˜%s’ directive output may be truncated writing up to 35 bytes into a region of size 32 [-Wformat-truncation=]
+
+Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/radio/radio-shark2.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/media/radio/radio-shark2.c b/drivers/media/radio/radio-shark2.c
+index f1c5c0a6a335c..e3e6aa87fe081 100644
+--- a/drivers/media/radio/radio-shark2.c
++++ b/drivers/media/radio/radio-shark2.c
+@@ -62,7 +62,7 @@ struct shark_device {
+ #ifdef SHARK_USE_LEDS
+       struct work_struct led_work;
+       struct led_classdev leds[NO_LEDS];
+-      char led_names[NO_LEDS][32];
++      char led_names[NO_LEDS][64];
+       atomic_t brightness[NO_LEDS];
+       unsigned long brightness_new;
+ #endif
+-- 
+2.43.0
+
diff --git a/queue-5.4/mtd-rawnand-hynix-fixed-typo.patch b/queue-5.4/mtd-rawnand-hynix-fixed-typo.patch
new file mode 100644 (file)
index 0000000..e173be7
--- /dev/null
@@ -0,0 +1,43 @@
+From 8ff48ed5f5bffaa182fa96e9ac36420e12644bad Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Mar 2024 13:27:20 +0300
+Subject: mtd: rawnand: hynix: fixed typo
+
+From: Maxim Korotkov <korotkov.maxim.s@gmail.com>
+
+[ Upstream commit 6819db94e1cd3ce24a432f3616cd563ed0c4eaba ]
+
+The function hynix_nand_rr_init() should probably return an error code.
+Judging by the usage, it seems that the return code is passed up
+the call stack.
+Right now, it always returns 0 and the function hynix_nand_cleanup()
+in hynix_nand_init() has never been called.
+
+Found by RASU JSC and Linux Verification Center (linuxtesting.org)
+
+Fixes: 626994e07480 ("mtd: nand: hynix: Add read-retry support for 1x nm MLC NANDs")
+
+Signed-off-by: Maxim Korotkov <korotkov.maxim.s@gmail.com>
+Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
+Link: https://lore.kernel.org/linux-mtd/20240313102721.1991299-1-korotkov.maxim.s@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mtd/nand/raw/nand_hynix.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/mtd/nand/raw/nand_hynix.c b/drivers/mtd/nand/raw/nand_hynix.c
+index 194e4227aefe9..15131e5953127 100644
+--- a/drivers/mtd/nand/raw/nand_hynix.c
++++ b/drivers/mtd/nand/raw/nand_hynix.c
+@@ -402,7 +402,7 @@ static int hynix_nand_rr_init(struct nand_chip *chip)
+       if (ret)
+               pr_warn("failed to initialize read-retry infrastructure");
+-      return 0;
++      return ret;
+ }
+ static void hynix_nand_extract_oobsize(struct nand_chip *chip,
+-- 
+2.43.0
+
diff --git a/queue-5.4/net-ethernet-cortina-locking-fixes.patch b/queue-5.4/net-ethernet-cortina-locking-fixes.patch
new file mode 100644 (file)
index 0000000..03d2148
--- /dev/null
@@ -0,0 +1,86 @@
+From 0254dce79f6b839a05bbe448f312fb552b914161 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 09:44:54 +0200
+Subject: net: ethernet: cortina: Locking fixes
+
+From: Linus Walleij <linus.walleij@linaro.org>
+
+[ Upstream commit 812552808f7ff71133fc59768cdc253c5b8ca1bf ]
+
+This fixes a probably long standing problem in the Cortina
+Gemini ethernet driver: there are some paths in the code
+where the IRQ registers are written without taking the proper
+locks.
+
+Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Link: https://lore.kernel.org/r/20240509-gemini-ethernet-locking-v1-1-afd00a528b95@linaro.org
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/cortina/gemini.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c
+index 4bcdb48b0e9cc..91952d086f226 100644
+--- a/drivers/net/ethernet/cortina/gemini.c
++++ b/drivers/net/ethernet/cortina/gemini.c
+@@ -1115,10 +1115,13 @@ static void gmac_tx_irq_enable(struct net_device *netdev,
+ {
+       struct gemini_ethernet_port *port = netdev_priv(netdev);
+       struct gemini_ethernet *geth = port->geth;
++      unsigned long flags;
+       u32 val, mask;
+       netdev_dbg(netdev, "%s device %d\n", __func__, netdev->dev_id);
++      spin_lock_irqsave(&geth->irq_lock, flags);
++
+       mask = GMAC0_IRQ0_TXQ0_INTS << (6 * netdev->dev_id + txq);
+       if (en)
+@@ -1127,6 +1130,8 @@ static void gmac_tx_irq_enable(struct net_device *netdev,
+       val = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
+       val = en ? val | mask : val & ~mask;
+       writel(val, geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
++
++      spin_unlock_irqrestore(&geth->irq_lock, flags);
+ }
+ static void gmac_tx_irq(struct net_device *netdev, unsigned int txq_num)
+@@ -1432,15 +1437,19 @@ static unsigned int gmac_rx(struct net_device *netdev, unsigned int budget)
+       union gmac_rxdesc_3 word3;
+       struct page *page = NULL;
+       unsigned int page_offs;
++      unsigned long flags;
+       unsigned short r, w;
+       union dma_rwptr rw;
+       dma_addr_t mapping;
+       int frag_nr = 0;
++      spin_lock_irqsave(&geth->irq_lock, flags);
+       rw.bits32 = readl(ptr_reg);
+       /* Reset interrupt as all packages until here are taken into account */
+       writel(DEFAULT_Q0_INT_BIT << netdev->dev_id,
+              geth->base + GLOBAL_INTERRUPT_STATUS_1_REG);
++      spin_unlock_irqrestore(&geth->irq_lock, flags);
++
+       r = rw.bits.rptr;
+       w = rw.bits.wptr;
+@@ -1743,10 +1752,9 @@ static irqreturn_t gmac_irq(int irq, void *data)
+               gmac_update_hw_stats(netdev);
+       if (val & (GMAC0_RX_OVERRUN_INT_BIT << (netdev->dev_id * 8))) {
++              spin_lock(&geth->irq_lock);
+               writel(GMAC0_RXDERR_INT_BIT << (netdev->dev_id * 8),
+                      geth->base + GLOBAL_INTERRUPT_STATUS_4_REG);
+-
+-              spin_lock(&geth->irq_lock);
+               u64_stats_update_begin(&port->ir_stats_syncp);
+               ++port->stats.rx_fifo_errors;
+               u64_stats_update_end(&port->ir_stats_syncp);
+-- 
+2.43.0
+
diff --git a/queue-5.4/net-openvswitch-fix-overwriting-ct-original-tuple-fo.patch b/queue-5.4/net-openvswitch-fix-overwriting-ct-original-tuple-fo.patch
new file mode 100644 (file)
index 0000000..8fc7034
--- /dev/null
@@ -0,0 +1,86 @@
+From 0e3c2a2c48122ac3d22709c05d8ee42c9fa51a4c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 11:38:05 +0200
+Subject: net: openvswitch: fix overwriting ct original tuple for ICMPv6
+
+From: Ilya Maximets <i.maximets@ovn.org>
+
+[ Upstream commit 7c988176b6c16c516474f6fceebe0f055af5eb56 ]
+
+OVS_PACKET_CMD_EXECUTE has 3 main attributes:
+ - OVS_PACKET_ATTR_KEY - Packet metadata in a netlink format.
+ - OVS_PACKET_ATTR_PACKET - Binary packet content.
+ - OVS_PACKET_ATTR_ACTIONS - Actions to execute on the packet.
+
+OVS_PACKET_ATTR_KEY is parsed first to populate sw_flow_key structure
+with the metadata like conntrack state, input port, recirculation id,
+etc.  Then the packet itself gets parsed to populate the rest of the
+keys from the packet headers.
+
+Whenever the packet parsing code starts parsing the ICMPv6 header, it
+first zeroes out fields in the key corresponding to Neighbor Discovery
+information even if it is not an ND packet.
+
+It is an 'ipv6.nd' field.  However, the 'ipv6' is a union that shares
+the space between 'nd' and 'ct_orig' that holds the original tuple
+conntrack metadata parsed from the OVS_PACKET_ATTR_KEY.
+
+ND packets should not normally have conntrack state, so it's fine to
+share the space, but normal ICMPv6 Echo packets or maybe other types of
+ICMPv6 can have the state attached and it should not be overwritten.
+
+The issue results in all but the last 4 bytes of the destination
+address being wiped from the original conntrack tuple leading to
+incorrect packet matching and potentially executing wrong actions
+in case this packet recirculates within the datapath or goes back
+to userspace.
+
+ND fields should not be accessed in non-ND packets, so not clearing
+them should be fine.  Executing memset() only for actual ND packets to
+avoid the issue.
+
+Initializing the whole thing before parsing is needed because ND packet
+may not contain all the options.
+
+The issue only affects the OVS_PACKET_CMD_EXECUTE path and doesn't
+affect packets entering OVS datapath from network interfaces, because
+in this case CT metadata is populated from skb after the packet is
+already parsed.
+
+Fixes: 9dd7f8907c37 ("openvswitch: Add original direction conntrack tuple to sw_flow_key.")
+Reported-by: Antonin Bas <antonin.bas@broadcom.com>
+Closes: https://github.com/openvswitch/ovs-issues/issues/327
+Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
+Acked-by: Aaron Conole <aconole@redhat.com>
+Acked-by: Eelco Chaudron <echaudro@redhat.com>
+Link: https://lore.kernel.org/r/20240509094228.1035477-1-i.maximets@ovn.org
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/openvswitch/flow.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c
+index 989175ce81d4d..8e4a82b0dffc8 100644
+--- a/net/openvswitch/flow.c
++++ b/net/openvswitch/flow.c
+@@ -412,7 +412,6 @@ static int parse_icmpv6(struct sk_buff *skb, struct sw_flow_key *key,
+        */
+       key->tp.src = htons(icmp->icmp6_type);
+       key->tp.dst = htons(icmp->icmp6_code);
+-      memset(&key->ipv6.nd, 0, sizeof(key->ipv6.nd));
+       if (icmp->icmp6_code == 0 &&
+           (icmp->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION ||
+@@ -421,6 +420,8 @@ static int parse_icmpv6(struct sk_buff *skb, struct sw_flow_key *key,
+               struct nd_msg *nd;
+               int offset;
++              memset(&key->ipv6.nd, 0, sizeof(key->ipv6.nd));
++
+               /* In order to process neighbor discovery options, we need the
+                * entire packet.
+                */
+-- 
+2.43.0
+
diff --git a/queue-5.4/net-usb-qmi_wwan-add-telit-fn920c04-compositions.patch b/queue-5.4/net-usb-qmi_wwan-add-telit-fn920c04-compositions.patch
new file mode 100644 (file)
index 0000000..08df32b
--- /dev/null
@@ -0,0 +1,108 @@
+From f7eb43c8a15cfe43ac9f43e2557c1a77a5c9beb4 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 18 Apr 2024 13:12:07 +0200
+Subject: net: usb: qmi_wwan: add Telit FN920C04 compositions
+
+From: Daniele Palmas <dnlplm@gmail.com>
+
+[ Upstream commit 0b8fe5bd73249dc20be2e88a12041f8920797b59 ]
+
+Add the following Telit FN920C04 compositions:
+
+0x10a0: rmnet + tty (AT/NMEA) + tty (AT) + tty (diag)
+T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  5 Spd=480  MxCh= 0
+D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
+P:  Vendor=1bc7 ProdID=10a0 Rev=05.15
+S:  Manufacturer=Telit Cinterion
+S:  Product=FN920
+S:  SerialNumber=92c4c4d8
+C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
+I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
+E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
+I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=84(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= 512 Ivl=0ms
+E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
+I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
+E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+0x10a4: rmnet + tty (AT) + tty (AT) + tty (diag)
+T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  8 Spd=480  MxCh= 0
+D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
+P:  Vendor=1bc7 ProdID=10a4 Rev=05.15
+S:  Manufacturer=Telit Cinterion
+S:  Product=FN920
+S:  SerialNumber=92c4c4d8
+C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
+I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
+E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
+I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=84(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= 512 Ivl=0ms
+E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
+I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
+E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+0x10a9: rmnet + tty (AT) + tty (diag) + DPL (data packet logging) + adb
+T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  9 Spd=480  MxCh= 0
+D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
+P:  Vendor=1bc7 ProdID=10a9 Rev=05.15
+S:  Manufacturer=Telit Cinterion
+S:  Product=FN920
+S:  SerialNumber=92c4c4d8
+C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
+I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
+E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
+I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
+E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
+I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
+E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
+E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
+E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/usb/qmi_wwan.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
+index 1c48d3d9522ba..7cad9850e6f15 100644
+--- a/drivers/net/usb/qmi_wwan.c
++++ b/drivers/net/usb/qmi_wwan.c
+@@ -1323,6 +1323,9 @@ static const struct usb_device_id products[] = {
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1060, 2)}, /* Telit LN920 */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1070, 2)}, /* Telit FN990 */
+       {QMI_QUIRK_SET_DTR(0x1bc7, 0x1080, 2)}, /* Telit FE990 */
++      {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a0, 0)}, /* Telit FN920C04 */
++      {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a4, 0)}, /* Telit FN920C04 */
++      {QMI_QUIRK_SET_DTR(0x1bc7, 0x10a9, 0)}, /* Telit FN920C04 */
+       {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)},    /* Telit ME910 */
+       {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)},    /* Telit ME910 dual modem */
+       {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)},    /* Telit LE920 */
+-- 
+2.43.0
+
diff --git a/queue-5.4/net-usb-smsc95xx-stop-lying-about-skb-truesize.patch b/queue-5.4/net-usb-smsc95xx-stop-lying-about-skb-truesize.patch
new file mode 100644 (file)
index 0000000..e4a29a4
--- /dev/null
@@ -0,0 +1,87 @@
+From 78a5b8d7bfa08290599a3df30a00a2bc934caa4f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 08:33:13 +0000
+Subject: net: usb: smsc95xx: stop lying about skb->truesize
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit d50729f1d60bca822ef6d9c1a5fb28d486bd7593 ]
+
+Some usb drivers try to set small skb->truesize and break
+core networking stacks.
+
+In this patch, I removed one of the skb->truesize override.
+
+I also replaced one skb_clone() by an allocation of a fresh
+and small skb, to get minimally sized skbs, like we did
+in commit 1e2c61172342 ("net: cdc_ncm: reduce skb truesize
+in rx path") and 4ce62d5b2f7a ("net: usb: ax88179_178a:
+stop lying about skb->truesize")
+
+v3: also fix a sparse error ( https://lore.kernel.org/oe-kbuild-all/202405091310.KvncIecx-lkp@intel.com/ )
+v2: leave the skb_trim() game because smsc95xx_rx_csum_offload()
+    needs the csum part. (Jakub)
+    While we are it, use get_unaligned() in smsc95xx_rx_csum_offload().
+
+Fixes: 2f7ca802bdae ("net: Add SMSC LAN9500 USB2.0 10/100 ethernet adapter driver")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Steve Glendinning <steve.glendinning@shawell.net>
+Cc: UNGLinuxDriver@microchip.com
+Reviewed-by: Simon Horman <horms@kernel.org>
+Link: https://lore.kernel.org/r/20240509083313.2113832-1-edumazet@google.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/usb/smsc95xx.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
+index 7c579b038be75..1aa99727d40c7 100644
+--- a/drivers/net/usb/smsc95xx.c
++++ b/drivers/net/usb/smsc95xx.c
+@@ -1910,9 +1910,11 @@ static int smsc95xx_reset_resume(struct usb_interface *intf)
+ static void smsc95xx_rx_csum_offload(struct sk_buff *skb)
+ {
+-      skb->csum = *(u16 *)(skb_tail_pointer(skb) - 2);
++      u16 *csum_ptr = (u16 *)(skb_tail_pointer(skb) - 2);
++
++      skb->csum = (__force __wsum)get_unaligned(csum_ptr);
+       skb->ip_summed = CHECKSUM_COMPLETE;
+-      skb_trim(skb, skb->len - 2);
++      skb_trim(skb, skb->len - 2); /* remove csum */
+ }
+ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+@@ -1970,25 +1972,22 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+                               if (dev->net->features & NETIF_F_RXCSUM)
+                                       smsc95xx_rx_csum_offload(skb);
+                               skb_trim(skb, skb->len - 4); /* remove fcs */
+-                              skb->truesize = size + sizeof(struct sk_buff);
+                               return 1;
+                       }
+-                      ax_skb = skb_clone(skb, GFP_ATOMIC);
++                      ax_skb = netdev_alloc_skb_ip_align(dev->net, size);
+                       if (unlikely(!ax_skb)) {
+                               netdev_warn(dev->net, "Error allocating skb\n");
+                               return 0;
+                       }
+-                      ax_skb->len = size;
+-                      ax_skb->data = packet;
+-                      skb_set_tail_pointer(ax_skb, size);
++                      skb_put(ax_skb, size);
++                      memcpy(ax_skb->data, packet, size);
+                       if (dev->net->features & NETIF_F_RXCSUM)
+                               smsc95xx_rx_csum_offload(ax_skb);
+                       skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
+-                      ax_skb->truesize = size + sizeof(struct sk_buff);
+                       usbnet_skb_return(dev, ax_skb);
+               }
+-- 
+2.43.0
+
diff --git a/queue-5.4/net-usb-sr9700-stop-lying-about-skb-truesize.patch b/queue-5.4/net-usb-sr9700-stop-lying-about-skb-truesize.patch
new file mode 100644 (file)
index 0000000..822cbd0
--- /dev/null
@@ -0,0 +1,59 @@
+From 53be20b6ea9cc5a8f8a8adbb1163f8bb0fbb09b7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 May 2024 14:39:39 +0000
+Subject: net: usb: sr9700: stop lying about skb->truesize
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit 05417aa9c0c038da2464a0c504b9d4f99814a23b ]
+
+Some usb drivers set small skb->truesize and break
+core networking stacks.
+
+In this patch, I removed one of the skb->truesize override.
+
+I also replaced one skb_clone() by an allocation of a fresh
+and small skb, to get minimally sized skbs, like we did
+in commit 1e2c61172342 ("net: cdc_ncm: reduce skb truesize
+in rx path") and 4ce62d5b2f7a ("net: usb: ax88179_178a:
+stop lying about skb->truesize")
+
+Fixes: c9b37458e956 ("USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Link: https://lore.kernel.org/r/20240506143939.3673865-1-edumazet@google.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/usb/sr9700.c | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/net/usb/sr9700.c b/drivers/net/usb/sr9700.c
+index 811c8751308c6..3fac642bec772 100644
+--- a/drivers/net/usb/sr9700.c
++++ b/drivers/net/usb/sr9700.c
+@@ -418,19 +418,15 @@ static int sr9700_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+                       skb_pull(skb, 3);
+                       skb->len = len;
+                       skb_set_tail_pointer(skb, len);
+-                      skb->truesize = len + sizeof(struct sk_buff);
+                       return 2;
+               }
+-              /* skb_clone is used for address align */
+-              sr_skb = skb_clone(skb, GFP_ATOMIC);
++              sr_skb = netdev_alloc_skb_ip_align(dev->net, len);
+               if (!sr_skb)
+                       return 0;
+-              sr_skb->len = len;
+-              sr_skb->data = skb->data + 3;
+-              skb_set_tail_pointer(sr_skb, len);
+-              sr_skb->truesize = len + sizeof(struct sk_buff);
++              skb_put(sr_skb, len);
++              memcpy(sr_skb->data, skb->data + 3, len);
+               usbnet_skb_return(dev, sr_skb);
+               skb_pull(skb, len + SR_RX_OVERHEAD);
+-- 
+2.43.0
+
diff --git a/queue-5.4/netrom-fix-possible-dead-lock-in-nr_rt_ioctl.patch b/queue-5.4/netrom-fix-possible-dead-lock-in-nr_rt_ioctl.patch
new file mode 100644 (file)
index 0000000..6b2c8ee
--- /dev/null
@@ -0,0 +1,192 @@
+From aaea17f695bfd9a89a827ef96a16765514ef1ae5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 May 2024 14:29:34 +0000
+Subject: netrom: fix possible dead-lock in nr_rt_ioctl()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit e03e7f20ebf7e1611d40d1fdc1bde900fd3335f6 ]
+
+syzbot loves netrom, and found a possible deadlock in nr_rt_ioctl [1]
+
+Make sure we always acquire nr_node_list_lock before nr_node_lock(nr_node)
+
+[1]
+WARNING: possible circular locking dependency detected
+6.9.0-rc7-syzkaller-02147-g654de42f3fc6 #0 Not tainted
+------------------------------------------------------
+syz-executor350/5129 is trying to acquire lock:
+ ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
+ ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: nr_node_lock include/net/netrom.h:152 [inline]
+ ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: nr_dec_obs net/netrom/nr_route.c:464 [inline]
+ ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: nr_rt_ioctl+0x1bb/0x1090 net/netrom/nr_route.c:697
+
+but task is already holding lock:
+ ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
+ ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_dec_obs net/netrom/nr_route.c:462 [inline]
+ ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_rt_ioctl+0x10a/0x1090 net/netrom/nr_route.c:697
+
+which lock already depends on the new lock.
+
+the existing dependency chain (in reverse order) is:
+
+-> #1 (nr_node_list_lock){+...}-{2:2}:
+        lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
+        __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
+        _raw_spin_lock_bh+0x35/0x50 kernel/locking/spinlock.c:178
+        spin_lock_bh include/linux/spinlock.h:356 [inline]
+        nr_remove_node net/netrom/nr_route.c:299 [inline]
+        nr_del_node+0x4b4/0x820 net/netrom/nr_route.c:355
+        nr_rt_ioctl+0xa95/0x1090 net/netrom/nr_route.c:683
+        sock_do_ioctl+0x158/0x460 net/socket.c:1222
+        sock_ioctl+0x629/0x8e0 net/socket.c:1341
+        vfs_ioctl fs/ioctl.c:51 [inline]
+        __do_sys_ioctl fs/ioctl.c:904 [inline]
+        __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
+        do_syscall_x64 arch/x86/entry/common.c:52 [inline]
+        do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
+       entry_SYSCALL_64_after_hwframe+0x77/0x7f
+
+-> #0 (&nr_node->node_lock){+...}-{2:2}:
+        check_prev_add kernel/locking/lockdep.c:3134 [inline]
+        check_prevs_add kernel/locking/lockdep.c:3253 [inline]
+        validate_chain+0x18cb/0x58e0 kernel/locking/lockdep.c:3869
+        __lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
+        lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
+        __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
+        _raw_spin_lock_bh+0x35/0x50 kernel/locking/spinlock.c:178
+        spin_lock_bh include/linux/spinlock.h:356 [inline]
+        nr_node_lock include/net/netrom.h:152 [inline]
+        nr_dec_obs net/netrom/nr_route.c:464 [inline]
+        nr_rt_ioctl+0x1bb/0x1090 net/netrom/nr_route.c:697
+        sock_do_ioctl+0x158/0x460 net/socket.c:1222
+        sock_ioctl+0x629/0x8e0 net/socket.c:1341
+        vfs_ioctl fs/ioctl.c:51 [inline]
+        __do_sys_ioctl fs/ioctl.c:904 [inline]
+        __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
+        do_syscall_x64 arch/x86/entry/common.c:52 [inline]
+        do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
+       entry_SYSCALL_64_after_hwframe+0x77/0x7f
+
+other info that might help us debug this:
+
+ Possible unsafe locking scenario:
+
+       CPU0                    CPU1
+       ----                    ----
+  lock(nr_node_list_lock);
+                               lock(&nr_node->node_lock);
+                               lock(nr_node_list_lock);
+  lock(&nr_node->node_lock);
+
+ *** DEADLOCK ***
+
+1 lock held by syz-executor350/5129:
+  #0: ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
+  #0: ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_dec_obs net/netrom/nr_route.c:462 [inline]
+  #0: ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_rt_ioctl+0x10a/0x1090 net/netrom/nr_route.c:697
+
+stack backtrace:
+CPU: 0 PID: 5129 Comm: syz-executor350 Not tainted 6.9.0-rc7-syzkaller-02147-g654de42f3fc6 #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
+Call Trace:
+ <TASK>
+  __dump_stack lib/dump_stack.c:88 [inline]
+  dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
+  check_noncircular+0x36a/0x4a0 kernel/locking/lockdep.c:2187
+  check_prev_add kernel/locking/lockdep.c:3134 [inline]
+  check_prevs_add kernel/locking/lockdep.c:3253 [inline]
+  validate_chain+0x18cb/0x58e0 kernel/locking/lockdep.c:3869
+  __lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
+  lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
+  __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
+  _raw_spin_lock_bh+0x35/0x50 kernel/locking/spinlock.c:178
+  spin_lock_bh include/linux/spinlock.h:356 [inline]
+  nr_node_lock include/net/netrom.h:152 [inline]
+  nr_dec_obs net/netrom/nr_route.c:464 [inline]
+  nr_rt_ioctl+0x1bb/0x1090 net/netrom/nr_route.c:697
+  sock_do_ioctl+0x158/0x460 net/socket.c:1222
+  sock_ioctl+0x629/0x8e0 net/socket.c:1341
+  vfs_ioctl fs/ioctl.c:51 [inline]
+  __do_sys_ioctl fs/ioctl.c:904 [inline]
+  __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
+  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: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Reported-by: syzbot <syzkaller@googlegroups.com>
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reviewed-by: Simon Horman <horms@kernel.org>
+Link: https://lore.kernel.org/r/20240515142934.3708038-1-edumazet@google.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netrom/nr_route.c | 19 +++++++------------
+ 1 file changed, 7 insertions(+), 12 deletions(-)
+
+diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c
+index 37cfa880c2d05..85e4637dc8ab1 100644
+--- a/net/netrom/nr_route.c
++++ b/net/netrom/nr_route.c
+@@ -284,22 +284,14 @@ static int __must_check nr_add_node(ax25_address *nr, const char *mnemonic,
+       return 0;
+ }
+-static inline void __nr_remove_node(struct nr_node *nr_node)
++static void nr_remove_node_locked(struct nr_node *nr_node)
+ {
++      lockdep_assert_held(&nr_node_list_lock);
++
+       hlist_del_init(&nr_node->node_node);
+       nr_node_put(nr_node);
+ }
+-#define nr_remove_node_locked(__node) \
+-      __nr_remove_node(__node)
+-
+-static void nr_remove_node(struct nr_node *nr_node)
+-{
+-      spin_lock_bh(&nr_node_list_lock);
+-      __nr_remove_node(nr_node);
+-      spin_unlock_bh(&nr_node_list_lock);
+-}
+-
+ static inline void __nr_remove_neigh(struct nr_neigh *nr_neigh)
+ {
+       hlist_del_init(&nr_neigh->neigh_node);
+@@ -338,6 +330,7 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n
+               return -EINVAL;
+       }
++      spin_lock_bh(&nr_node_list_lock);
+       nr_node_lock(nr_node);
+       for (i = 0; i < nr_node->count; i++) {
+               if (nr_node->routes[i].neighbour == nr_neigh) {
+@@ -351,7 +344,7 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n
+                       nr_node->count--;
+                       if (nr_node->count == 0) {
+-                              nr_remove_node(nr_node);
++                              nr_remove_node_locked(nr_node);
+                       } else {
+                               switch (i) {
+                               case 0:
+@@ -365,12 +358,14 @@ static int nr_del_node(ax25_address *callsign, ax25_address *neighbour, struct n
+                               nr_node_put(nr_node);
+                       }
+                       nr_node_unlock(nr_node);
++                      spin_unlock_bh(&nr_node_list_lock);
+                       return 0;
+               }
+       }
+       nr_neigh_put(nr_neigh);
+       nr_node_unlock(nr_node);
++      spin_unlock_bh(&nr_node_list_lock);
+       nr_node_put(nr_node);
+       return -EINVAL;
+-- 
+2.43.0
+
diff --git a/queue-5.4/nilfs2-fix-out-of-range-warning.patch b/queue-5.4/nilfs2-fix-out-of-range-warning.patch
new file mode 100644 (file)
index 0000000..fd7cf77
--- /dev/null
@@ -0,0 +1,45 @@
+From 39c8a3e59e0aaea208fcb5d475161e3d7625844c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 28 Mar 2024 15:30:44 +0100
+Subject: nilfs2: fix out-of-range warning
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit c473bcdd80d4ab2ae79a7a509a6712818366e32a ]
+
+clang-14 points out that v_size is always smaller than a 64KB
+page size if that is configured by the CPU architecture:
+
+fs/nilfs2/ioctl.c:63:19: error: result of comparison of constant 65536 with expression of type '__u16' (aka 'unsigned short') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
+        if (argv->v_size > PAGE_SIZE)
+            ~~~~~~~~~~~~ ^ ~~~~~~~~~
+
+This is ok, so just shut up that warning with a cast.
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Link: https://lore.kernel.org/r/20240328143051.1069575-7-arnd@kernel.org
+Fixes: 3358b4aaa84f ("nilfs2: fix problems of memory allocation in ioctl")
+Acked-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
+Reviewed-by: Justin Stitt <justinstitt@google.com>
+Signed-off-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/nilfs2/ioctl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
+index 1a266a10d4cf3..424436cb501ea 100644
+--- a/fs/nilfs2/ioctl.c
++++ b/fs/nilfs2/ioctl.c
+@@ -59,7 +59,7 @@ static int nilfs_ioctl_wrap_copy(struct the_nilfs *nilfs,
+       if (argv->v_nmembs == 0)
+               return 0;
+-      if (argv->v_size > PAGE_SIZE)
++      if ((size_t)argv->v_size > PAGE_SIZE)
+               return -EINVAL;
+       /*
+-- 
+2.43.0
+
diff --git a/queue-5.4/null_blk-fix-missing-mutex_destroy-at-module-removal.patch b/queue-5.4/null_blk-fix-missing-mutex_destroy-at-module-removal.patch
new file mode 100644 (file)
index 0000000..7306b32
--- /dev/null
@@ -0,0 +1,37 @@
+From eb6e72aa9bb5e79e93f1fb1237bb3a4ae072fc95 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 25 Apr 2024 19:16:35 +0200
+Subject: null_blk: Fix missing mutex_destroy() at module removal
+
+From: Zhu Yanjun <yanjun.zhu@linux.dev>
+
+[ Upstream commit 07d1b99825f40f9c0d93e6b99d79a08d0717bac1 ]
+
+When a mutex lock is not used any more, the function mutex_destroy
+should be called to mark the mutex lock uninitialized.
+
+Fixes: f2298c0403b0 ("null_blk: multi queue aware block test driver")
+Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
+Link: https://lore.kernel.org/r/20240425171635.4227-1-yanjun.zhu@linux.dev
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/block/null_blk_main.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c
+index 6cbdd8a691d2b..b6210bf0724d5 100644
+--- a/drivers/block/null_blk_main.c
++++ b/drivers/block/null_blk_main.c
+@@ -1868,6 +1868,8 @@ static void __exit null_exit(void)
+       if (g_queue_mode == NULL_Q_MQ && shared_tags)
+               blk_mq_free_tag_set(&tag_set);
++
++      mutex_destroy(&lock);
+ }
+ module_init(null_init);
+-- 
+2.43.0
+
diff --git a/queue-5.4/nvme-find-numa-distance-only-if-controller-has-valid.patch b/queue-5.4/nvme-find-numa-distance-only-if-controller-has-valid.patch
new file mode 100644 (file)
index 0000000..f0bedd5
--- /dev/null
@@ -0,0 +1,47 @@
+From 97b7e4213f8d63c9c73fef59a0168dd8cbd33b4c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Apr 2024 13:49:23 +0530
+Subject: nvme: find numa distance only if controller has valid numa id
+
+From: Nilay Shroff <nilay@linux.ibm.com>
+
+[ Upstream commit 863fe60ed27f2c85172654a63c5b827e72c8b2e6 ]
+
+On system where native nvme multipath is configured and iopolicy
+is set to numa but the nvme controller numa node id is undefined
+or -1 (NUMA_NO_NODE) then avoid calculating node distance for
+finding optimal io path. In such case we may access numa distance
+table with invalid index and that may potentially refer to incorrect
+memory. So this patch ensures that if the nvme controller numa node
+id is -1 then instead of calculating node distance for finding optimal
+io path, we set the numa node distance of such controller to default 10
+(LOCAL_DISTANCE).
+
+Link: https://lore.kernel.org/all/20240413090614.678353-1-nilay@linux.ibm.com/
+Signed-off-by: Nilay Shroff <nilay@linux.ibm.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
+Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
+Signed-off-by: Keith Busch <kbusch@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/multipath.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
+index 811f7b96b5517..4f3220aef7c47 100644
+--- a/drivers/nvme/host/multipath.c
++++ b/drivers/nvme/host/multipath.c
+@@ -180,7 +180,8 @@ static struct nvme_ns *__nvme_find_path(struct nvme_ns_head *head, int node)
+               if (nvme_path_is_disabled(ns))
+                       continue;
+-              if (READ_ONCE(head->subsys->iopolicy) == NVME_IOPOLICY_NUMA)
++              if (ns->ctrl->numa_node != NUMA_NO_NODE &&
++                  READ_ONCE(head->subsys->iopolicy) == NVME_IOPOLICY_NUMA)
+                       distance = node_distance(node, ns->ctrl->numa_node);
+               else
+                       distance = LOCAL_DISTANCE;
+-- 
+2.43.0
+
diff --git a/queue-5.4/openpromfs-finish-conversion-to-the-new-mount-api.patch b/queue-5.4/openpromfs-finish-conversion-to-the-new-mount-api.patch
new file mode 100644 (file)
index 0000000..a2093ab
--- /dev/null
@@ -0,0 +1,58 @@
+From 93f912b0ea10be880c6dfb5916ed8df6fd66d097 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 Mar 2024 16:33:11 -0600
+Subject: openpromfs: finish conversion to the new mount API
+
+From: Eric Sandeen <sandeen@redhat.com>
+
+[ Upstream commit 8f27829974b025d4df2e78894105d75e3bf349f0 ]
+
+The original mount API conversion inexplicably left out the change
+from ->remount_fs to ->reconfigure; do that now.
+
+Fixes: 7ab2fa7693c3 ("vfs: Convert openpromfs to use the new mount API")
+Signed-off-by: Eric Sandeen <sandeen@redhat.com>
+Link: https://lore.kernel.org/r/90b968aa-c979-420f-ba37-5acc3391b28f@redhat.com
+Signed-off-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/openpromfs/inode.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/fs/openpromfs/inode.c b/fs/openpromfs/inode.c
+index 40c8c2e32fa3e..1e22344be5e54 100644
+--- a/fs/openpromfs/inode.c
++++ b/fs/openpromfs/inode.c
+@@ -362,10 +362,10 @@ static struct inode *openprom_iget(struct super_block *sb, ino_t ino)
+       return inode;
+ }
+-static int openprom_remount(struct super_block *sb, int *flags, char *data)
++static int openpromfs_reconfigure(struct fs_context *fc)
+ {
+-      sync_filesystem(sb);
+-      *flags |= SB_NOATIME;
++      sync_filesystem(fc->root->d_sb);
++      fc->sb_flags |= SB_NOATIME;
+       return 0;
+ }
+@@ -373,7 +373,6 @@ static const struct super_operations openprom_sops = {
+       .alloc_inode    = openprom_alloc_inode,
+       .free_inode     = openprom_free_inode,
+       .statfs         = simple_statfs,
+-      .remount_fs     = openprom_remount,
+ };
+ static int openprom_fill_super(struct super_block *s, struct fs_context *fc)
+@@ -417,6 +416,7 @@ static int openpromfs_get_tree(struct fs_context *fc)
+ static const struct fs_context_operations openpromfs_context_ops = {
+       .get_tree       = openpromfs_get_tree,
++      .reconfigure    = openpromfs_reconfigure,
+ };
+ static int openpromfs_init_fs_context(struct fs_context *fc)
+-- 
+2.43.0
+
diff --git a/queue-5.4/parisc-add-missing-export-of-__cmpxchg_u8.patch b/queue-5.4/parisc-add-missing-export-of-__cmpxchg_u8.patch
new file mode 100644 (file)
index 0000000..b92db04
--- /dev/null
@@ -0,0 +1,36 @@
+From a0f8ef9d94ba6ab689477775d4c7bed5dd7601ff Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 1 Apr 2024 22:35:54 -0400
+Subject: parisc: add missing export of __cmpxchg_u8()
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+[ Upstream commit c57e5dccb06decf3cb6c272ab138c033727149b5 ]
+
+__cmpxchg_u8() had been added (initially) for the sake of
+drivers/phy/ti/phy-tusb1210.c; the thing is, that drivers is
+modular, so we need an export
+
+Fixes: b344d6a83d01 "parisc: add support for cmpxchg on u8 pointers"
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/parisc/kernel/parisc_ksyms.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c
+index e8a6a751dfd8e..07418f11a964f 100644
+--- a/arch/parisc/kernel/parisc_ksyms.c
++++ b/arch/parisc/kernel/parisc_ksyms.c
+@@ -21,6 +21,7 @@ EXPORT_SYMBOL(memset);
+ #include <linux/atomic.h>
+ EXPORT_SYMBOL(__xchg8);
+ EXPORT_SYMBOL(__xchg32);
++EXPORT_SYMBOL(__cmpxchg_u8);
+ EXPORT_SYMBOL(__cmpxchg_u32);
+ EXPORT_SYMBOL(__cmpxchg_u64);
+ #ifdef CONFIG_SMP
+-- 
+2.43.0
+
diff --git a/queue-5.4/platform-x86-wmi-make-two-functions-static.patch b/queue-5.4/platform-x86-wmi-make-two-functions-static.patch
new file mode 100644 (file)
index 0000000..0a8621b
--- /dev/null
@@ -0,0 +1,48 @@
+From f9a4059ef94172e9ed6172df1dca30381bfb4b82 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 2 Apr 2020 15:15:49 +0800
+Subject: platform/x86: wmi: Make two functions static
+
+From: YueHaibing <yuehaibing@huawei.com>
+
+[ Upstream commit 713df99a9ef0133c09ad05bac10cf7d0163cd272 ]
+
+Fix sparse warnings:
+
+drivers/platform/x86/xiaomi-wmi.c:26:5: warning: symbol 'xiaomi_wmi_probe' was not declared. Should it be static?
+drivers/platform/x86/xiaomi-wmi.c:51:6: warning: symbol 'xiaomi_wmi_notify' was not declared. Should it be static?
+
+Reported-by: Hulk Robot <hulkci@huawei.com>
+Signed-off-by: YueHaibing <yuehaibing@huawei.com>
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Stable-dep-of: 290680c2da80 ("platform/x86: xiaomi-wmi: Fix race condition when reporting key events")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/xiaomi-wmi.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/platform/x86/xiaomi-wmi.c b/drivers/platform/x86/xiaomi-wmi.c
+index 601cbb282f543..54a2546bb93bf 100644
+--- a/drivers/platform/x86/xiaomi-wmi.c
++++ b/drivers/platform/x86/xiaomi-wmi.c
+@@ -23,7 +23,7 @@ struct xiaomi_wmi {
+       unsigned int key_code;
+ };
+-int xiaomi_wmi_probe(struct wmi_device *wdev, const void *context)
++static int xiaomi_wmi_probe(struct wmi_device *wdev, const void *context)
+ {
+       struct xiaomi_wmi *data;
+@@ -48,7 +48,7 @@ int xiaomi_wmi_probe(struct wmi_device *wdev, const void *context)
+       return input_register_device(data->input_dev);
+ }
+-void xiaomi_wmi_notify(struct wmi_device *wdev, union acpi_object *dummy)
++static void xiaomi_wmi_notify(struct wmi_device *wdev, union acpi_object *dummy)
+ {
+       struct xiaomi_wmi *data;
+-- 
+2.43.0
+
diff --git a/queue-5.4/platform-x86-xiaomi-wmi-fix-race-condition-when-repo.patch b/queue-5.4/platform-x86-xiaomi-wmi-fix-race-condition-when-repo.patch
new file mode 100644 (file)
index 0000000..eac2678
--- /dev/null
@@ -0,0 +1,95 @@
+From 7217162b48f60edc29afbeff641b7de02076bb86 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 2 Apr 2024 16:30:57 +0200
+Subject: platform/x86: xiaomi-wmi: Fix race condition when reporting key
+ events
+
+From: Armin Wolf <W_Armin@gmx.de>
+
+[ Upstream commit 290680c2da8061e410bcaec4b21584ed951479af ]
+
+Multiple WMI events can be received concurrently, so multiple instances
+of xiaomi_wmi_notify() can be active at the same time. Since the input
+device is shared between those handlers, the key input sequence can be
+disturbed.
+
+Fix this by protecting the key input sequence with a mutex.
+
+Compile-tested only.
+
+Fixes: edb73f4f0247 ("platform/x86: wmi: add Xiaomi WMI key driver")
+Signed-off-by: Armin Wolf <W_Armin@gmx.de>
+Link: https://lore.kernel.org/r/20240402143059.8456-2-W_Armin@gmx.de
+Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/xiaomi-wmi.c | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/drivers/platform/x86/xiaomi-wmi.c b/drivers/platform/x86/xiaomi-wmi.c
+index 54a2546bb93bf..be80f0bda9484 100644
+--- a/drivers/platform/x86/xiaomi-wmi.c
++++ b/drivers/platform/x86/xiaomi-wmi.c
+@@ -2,8 +2,10 @@
+ /* WMI driver for Xiaomi Laptops */
+ #include <linux/acpi.h>
++#include <linux/device.h>
+ #include <linux/input.h>
+ #include <linux/module.h>
++#include <linux/mutex.h>
+ #include <linux/wmi.h>
+ #include <uapi/linux/input-event-codes.h>
+@@ -20,12 +22,21 @@
+ struct xiaomi_wmi {
+       struct input_dev *input_dev;
++      struct mutex key_lock;  /* Protects the key event sequence */
+       unsigned int key_code;
+ };
++static void xiaomi_mutex_destroy(void *data)
++{
++      struct mutex *lock = data;
++
++      mutex_destroy(lock);
++}
++
+ static int xiaomi_wmi_probe(struct wmi_device *wdev, const void *context)
+ {
+       struct xiaomi_wmi *data;
++      int ret;
+       if (wdev == NULL || context == NULL)
+               return -EINVAL;
+@@ -35,6 +46,11 @@ static int xiaomi_wmi_probe(struct wmi_device *wdev, const void *context)
+               return -ENOMEM;
+       dev_set_drvdata(&wdev->dev, data);
++      mutex_init(&data->key_lock);
++      ret = devm_add_action_or_reset(&wdev->dev, xiaomi_mutex_destroy, &data->key_lock);
++      if (ret < 0)
++              return ret;
++
+       data->input_dev = devm_input_allocate_device(&wdev->dev);
+       if (data->input_dev == NULL)
+               return -ENOMEM;
+@@ -59,10 +75,12 @@ static void xiaomi_wmi_notify(struct wmi_device *wdev, union acpi_object *dummy)
+       if (data == NULL)
+               return;
++      mutex_lock(&data->key_lock);
+       input_report_key(data->input_dev, data->key_code, 1);
+       input_sync(data->input_dev);
+       input_report_key(data->input_dev, data->key_code, 0);
+       input_sync(data->input_dev);
++      mutex_unlock(&data->key_lock);
+ }
+ static const struct wmi_device_id xiaomi_wmi_id_table[] = {
+-- 
+2.43.0
+
diff --git a/queue-5.4/powerpc-fsl-soc-hide-unused-const-variable.patch b/queue-5.4/powerpc-fsl-soc-hide-unused-const-variable.patch
new file mode 100644 (file)
index 0000000..e1ba6b4
--- /dev/null
@@ -0,0 +1,48 @@
+From 4d3fd15f21541c2554514c024de124f2870fc44e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Apr 2024 10:06:19 +0200
+Subject: powerpc/fsl-soc: hide unused const variable
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 01acaf3aa75e1641442cc23d8fe0a7bb4226efb1 ]
+
+vmpic_msi_feature is only used conditionally, which triggers a rare
+-Werror=unused-const-variable= warning with gcc:
+
+arch/powerpc/sysdev/fsl_msi.c:567:37: error: 'vmpic_msi_feature' defined but not used [-Werror=unused-const-variable=]
+  567 | static const struct fsl_msi_feature vmpic_msi_feature =
+
+Hide this one in the same #ifdef as the reference so we can turn on
+the warning by default.
+
+Fixes: 305bcf26128e ("powerpc/fsl-soc: use CONFIG_EPAPR_PARAVIRT for hcalls")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://msgid.link/20240403080702.3509288-2-arnd@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/sysdev/fsl_msi.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c
+index d276c5e964458..77aa7a13ab1db 100644
+--- a/arch/powerpc/sysdev/fsl_msi.c
++++ b/arch/powerpc/sysdev/fsl_msi.c
+@@ -573,10 +573,12 @@ static const struct fsl_msi_feature ipic_msi_feature = {
+       .msiir_offset = 0x38,
+ };
++#ifdef CONFIG_EPAPR_PARAVIRT
+ static const struct fsl_msi_feature vmpic_msi_feature = {
+       .fsl_pic_ip = FSL_PIC_IP_VMPIC,
+       .msiir_offset = 0,
+ };
++#endif
+ static const struct of_device_id fsl_of_msi_ids[] = {
+       {
+-- 
+2.43.0
+
diff --git a/queue-5.4/qed-avoid-truncating-work-queue-length.patch b/queue-5.4/qed-avoid-truncating-work-queue-length.patch
new file mode 100644 (file)
index 0000000..c8736e3
--- /dev/null
@@ -0,0 +1,58 @@
+From 31f0484b9437be3957fdd7a0a46c73a81b6424d9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Mar 2024 23:38:02 +0100
+Subject: qed: avoid truncating work queue length
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+[ Upstream commit 954fd908f177604d4cce77e2a88cc50b29bad5ff ]
+
+clang complains that the temporary string for the name passed into
+alloc_workqueue() is too short for its contents:
+
+drivers/net/ethernet/qlogic/qed/qed_main.c:1218:3: error: 'snprintf' will always be truncated; specified size is 16, but format string expands to at least 18 [-Werror,-Wformat-truncation]
+
+There is no need for a temporary buffer, and the actual name of a workqueue
+is 32 bytes (WQ_NAME_LEN), so just use the interface as intended to avoid
+the truncation.
+
+Fixes: 59ccf86fe69a ("qed: Add driver infrastucture for handling mfw requests.")
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Link: https://lore.kernel.org/r/20240326223825.4084412-4-arnd@kernel.org
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/qlogic/qed/qed_main.c | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
+index 1cbcc27602780..91ca2b706938f 100644
+--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
++++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
+@@ -1177,7 +1177,6 @@ static void qed_slowpath_task(struct work_struct *work)
+ static int qed_slowpath_wq_start(struct qed_dev *cdev)
+ {
+       struct qed_hwfn *hwfn;
+-      char name[NAME_SIZE];
+       int i;
+       if (IS_VF(cdev))
+@@ -1186,11 +1185,11 @@ static int qed_slowpath_wq_start(struct qed_dev *cdev)
+       for_each_hwfn(cdev, i) {
+               hwfn = &cdev->hwfns[i];
+-              snprintf(name, NAME_SIZE, "slowpath-%02x:%02x.%02x",
+-                       cdev->pdev->bus->number,
+-                       PCI_SLOT(cdev->pdev->devfn), hwfn->abs_pf_id);
++              hwfn->slowpath_wq = alloc_workqueue("slowpath-%02x:%02x.%02x",
++                                       0, 0, cdev->pdev->bus->number,
++                                       PCI_SLOT(cdev->pdev->devfn),
++                                       hwfn->abs_pf_id);
+-              hwfn->slowpath_wq = alloc_workqueue(name, 0, 0);
+               if (!hwfn->slowpath_wq) {
+                       DP_NOTICE(hwfn, "Cannot create slowpath workqueue\n");
+                       return -ENOMEM;
+-- 
+2.43.0
+
diff --git a/queue-5.4/rdma-hns-use-complete-parentheses-in-macros.patch b/queue-5.4/rdma-hns-use-complete-parentheses-in-macros.patch
new file mode 100644 (file)
index 0000000..8fcb99b
--- /dev/null
@@ -0,0 +1,52 @@
+From 5653d453f07c714dd7d3831bffb177359ae75cbe Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Apr 2024 17:16:15 +0800
+Subject: RDMA/hns: Use complete parentheses in macros
+
+From: Chengchang Tang <tangchengchang@huawei.com>
+
+[ Upstream commit 4125269bb9b22e1d8cdf4412c81be8074dbc61ca ]
+
+Use complete parentheses to ensure that macro expansion does
+not produce unexpected results.
+
+Fixes: a25d13cbe816 ("RDMA/hns: Add the interfaces to support multi hop addressing for the contexts in hip08")
+Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
+Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
+Link: https://lore.kernel.org/r/20240412091616.370789-10-huangjunxian6@hisilicon.com
+Signed-off-by: Leon Romanovsky <leon@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/hw/hns/hns_roce_hem.h | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.h b/drivers/infiniband/hw/hns/hns_roce_hem.h
+index 3bb8f78fb7b09..2bca2069135d8 100644
+--- a/drivers/infiniband/hw/hns/hns_roce_hem.h
++++ b/drivers/infiniband/hw/hns/hns_roce_hem.h
+@@ -62,16 +62,16 @@ enum {
+        (sizeof(struct scatterlist) + sizeof(void *)))
+ #define check_whether_bt_num_3(type, hop_num) \
+-      (type < HEM_TYPE_MTT && hop_num == 2)
++      ((type) < HEM_TYPE_MTT && (hop_num) == 2)
+ #define check_whether_bt_num_2(type, hop_num) \
+-      ((type < HEM_TYPE_MTT && hop_num == 1) || \
+-      (type >= HEM_TYPE_MTT && hop_num == 2))
++      (((type) < HEM_TYPE_MTT && (hop_num) == 1) || \
++      ((type) >= HEM_TYPE_MTT && (hop_num) == 2))
+ #define check_whether_bt_num_1(type, hop_num) \
+-      ((type < HEM_TYPE_MTT && hop_num == HNS_ROCE_HOP_NUM_0) || \
+-      (type >= HEM_TYPE_MTT && hop_num == 1) || \
+-      (type >= HEM_TYPE_MTT && hop_num == HNS_ROCE_HOP_NUM_0))
++      (((type) < HEM_TYPE_MTT && (hop_num) == HNS_ROCE_HOP_NUM_0) || \
++      ((type) >= HEM_TYPE_MTT && (hop_num) == 1) || \
++      ((type) >= HEM_TYPE_MTT && (hop_num) == HNS_ROCE_HOP_NUM_0))
+ enum {
+        HNS_ROCE_HEM_PAGE_SHIFT = 12,
+-- 
+2.43.0
+
diff --git a/queue-5.4/rdma-ipoib-fix-format-truncation-compilation-errors.patch b/queue-5.4/rdma-ipoib-fix-format-truncation-compilation-errors.patch
new file mode 100644 (file)
index 0000000..d0cc391
--- /dev/null
@@ -0,0 +1,66 @@
+From d6d683378dafe02505c3faf5422608040f9f15c8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 9 May 2024 10:39:33 +0300
+Subject: RDMA/IPoIB: Fix format truncation compilation errors
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Leon Romanovsky <leonro@nvidia.com>
+
+[ Upstream commit 49ca2b2ef3d003402584c68ae7b3055ba72e750a ]
+
+Truncate the device name to store IPoIB VLAN name.
+
+[leonro@5b4e8fba4ddd kernel]$ make -s -j 20 allmodconfig
+[leonro@5b4e8fba4ddd kernel]$ make -s -j 20 W=1 drivers/infiniband/ulp/ipoib/
+drivers/infiniband/ulp/ipoib/ipoib_vlan.c: In function â€˜ipoib_vlan_add’:
+drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:52: error: â€˜%04x’
+directive output may be truncated writing 4 bytes into a region of size
+between 0 and 15 [-Werror=format-truncation=]
+  187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
+      |                                                    ^~~~
+drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:48: note: directive
+argument in the range [0, 65535]
+  187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
+      |                                                ^~~~~~~~~
+drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:9: note: â€˜snprintf’ output
+between 6 and 21 bytes into a destination of size 16
+  187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
+      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  188 |                  ppriv->dev->name, pkey);
+      |                  ~~~~~~~~~~~~~~~~~~~~~~~
+cc1: all warnings being treated as errors
+make[6]: *** [scripts/Makefile.build:244: drivers/infiniband/ulp/ipoib/ipoib_vlan.o] Error 1
+make[6]: *** Waiting for unfinished jobs....
+
+Fixes: 9baa0b036410 ("IB/ipoib: Add rtnl_link_ops support")
+Link: https://lore.kernel.org/r/e9d3e1fef69df4c9beaf402cc3ac342bad680791.1715240029.git.leon@kernel.org
+Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
+index 58ca5e9c6079c..1c1cd10283acf 100644
+--- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
++++ b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
+@@ -182,8 +182,12 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
+       ppriv = ipoib_priv(pdev);
+-      snprintf(intf_name, sizeof(intf_name), "%s.%04x",
+-               ppriv->dev->name, pkey);
++      /* If you increase IFNAMSIZ, update snprintf below
++       * to allow longer names.
++       */
++      BUILD_BUG_ON(IFNAMSIZ != 16);
++      snprintf(intf_name, sizeof(intf_name), "%.10s.%04x", ppriv->dev->name,
++               pkey);
+       ndev = ipoib_intf_alloc(ppriv->ca, ppriv->port, intf_name);
+       if (IS_ERR(ndev)) {
+-- 
+2.43.0
+
diff --git a/queue-5.4/revert-sh-handle-calling-csum_partial-with-misaligne.patch b/queue-5.4/revert-sh-handle-calling-csum_partial-with-misaligne.patch
new file mode 100644 (file)
index 0000000..54ba15e
--- /dev/null
@@ -0,0 +1,187 @@
+From 78542a068b257061e2f172d6da197dfe7e02a5b0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Mar 2024 16:18:04 -0700
+Subject: Revert "sh: Handle calling csum_partial with misaligned data"
+
+From: Guenter Roeck <linux@roeck-us.net>
+
+[ Upstream commit b5319c96292ff877f6b58d349acf0a9dc8d3b454 ]
+
+This reverts commit cadc4e1a2b4d20d0cc0e81f2c6ba0588775e54e5.
+
+Commit cadc4e1a2b4d ("sh: Handle calling csum_partial with misaligned
+data") causes bad checksum calculations on unaligned data. Reverting
+it fixes the problem.
+
+    # Subtest: checksum
+    # module: checksum_kunit
+    1..5
+    # test_csum_fixed_random_inputs: ASSERTION FAILED at lib/checksum_kunit.c:500
+    Expected ( u64)result == ( u64)expec, but
+        ( u64)result == 53378 (0xd082)
+        ( u64)expec == 33488 (0x82d0)
+    # test_csum_fixed_random_inputs: pass:0 fail:1 skip:0 total:1
+    not ok 1 test_csum_fixed_random_inputs
+    # test_csum_all_carry_inputs: ASSERTION FAILED at lib/checksum_kunit.c:525
+    Expected ( u64)result == ( u64)expec, but
+        ( u64)result == 65281 (0xff01)
+        ( u64)expec == 65280 (0xff00)
+    # test_csum_all_carry_inputs: pass:0 fail:1 skip:0 total:1
+    not ok 2 test_csum_all_carry_inputs
+    # test_csum_no_carry_inputs: ASSERTION FAILED at lib/checksum_kunit.c:573
+    Expected ( u64)result == ( u64)expec, but
+        ( u64)result == 65535 (0xffff)
+        ( u64)expec == 65534 (0xfffe)
+    # test_csum_no_carry_inputs: pass:0 fail:1 skip:0 total:1
+    not ok 3 test_csum_no_carry_inputs
+    # test_ip_fast_csum: pass:1 fail:0 skip:0 total:1
+    ok 4 test_ip_fast_csum
+    # test_csum_ipv6_magic: pass:1 fail:0 skip:0 total:1
+    ok 5 test_csum_ipv6_magic
+ # checksum: pass:2 fail:3 skip:0 total:5
+ # Totals: pass:2 fail:3 skip:0 total:5
+not ok 22 checksum
+
+Fixes: cadc4e1a2b4d ("sh: Handle calling csum_partial with misaligned data")
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+Link: https://lore.kernel.org/r/20240324231804.841099-1-linux@roeck-us.net
+Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/sh/lib/checksum.S | 67 ++++++++++++------------------------------
+ 1 file changed, 18 insertions(+), 49 deletions(-)
+
+diff --git a/arch/sh/lib/checksum.S b/arch/sh/lib/checksum.S
+index 97b5c2d9fec49..81efe0290f437 100644
+--- a/arch/sh/lib/checksum.S
++++ b/arch/sh/lib/checksum.S
+@@ -33,7 +33,8 @@
+  */
+ /*    
+- * asmlinkage __wsum csum_partial(const void *buf, int len, __wsum sum);
++ * unsigned int csum_partial(const unsigned char *buf, int len,
++ *                           unsigned int sum);
+  */
+ .text
+@@ -45,31 +46,11 @@ ENTRY(csum_partial)
+          * Fortunately, it is easy to convert 2-byte alignment to 4-byte
+          * alignment for the unrolled loop.
+          */
++      mov     r5, r1
+       mov     r4, r0
+-      tst     #3, r0          ! Check alignment.
+-      bt/s    2f              ! Jump if alignment is ok.
+-       mov    r4, r7          ! Keep a copy to check for alignment
++      tst     #2, r0          ! Check alignment.
++      bt      2f              ! Jump if alignment is ok.
+       !
+-      tst     #1, r0          ! Check alignment.
+-      bt      21f             ! Jump if alignment is boundary of 2bytes.
+-
+-      ! buf is odd
+-      tst     r5, r5
+-      add     #-1, r5
+-      bt      9f
+-      mov.b   @r4+, r0
+-      extu.b  r0, r0
+-      addc    r0, r6          ! t=0 from previous tst
+-      mov     r6, r0
+-      shll8   r6
+-      shlr16  r0
+-      shlr8   r0
+-      or      r0, r6
+-      mov     r4, r0
+-      tst     #2, r0
+-      bt      2f
+-21:
+-      ! buf is 2 byte aligned (len could be 0)
+       add     #-2, r5         ! Alignment uses up two bytes.
+       cmp/pz  r5              !
+       bt/s    1f              ! Jump if we had at least two bytes.
+@@ -77,17 +58,16 @@ ENTRY(csum_partial)
+       bra     6f
+        add    #2, r5          ! r5 was < 2.  Deal with it.
+ 1:
++      mov     r5, r1          ! Save new len for later use.
+       mov.w   @r4+, r0
+       extu.w  r0, r0
+       addc    r0, r6
+       bf      2f
+       add     #1, r6
+ 2:
+-      ! buf is 4 byte aligned (len could be 0)
+-      mov     r5, r1
+       mov     #-5, r0
+-      shld    r0, r1
+-      tst     r1, r1
++      shld    r0, r5
++      tst     r5, r5
+       bt/s    4f              ! if it's =0, go to 4f
+        clrt
+       .align  2
+@@ -109,31 +89,30 @@ ENTRY(csum_partial)
+       addc    r0, r6
+       addc    r2, r6
+       movt    r0
+-      dt      r1
++      dt      r5
+       bf/s    3b
+        cmp/eq #1, r0
+-      ! here, we know r1==0
+-      addc    r1, r6                  ! add carry to r6
++      ! here, we know r5==0
++      addc    r5, r6                  ! add carry to r6
+ 4:
+-      mov     r5, r0
++      mov     r1, r0
+       and     #0x1c, r0
+       tst     r0, r0
+-      bt      6f
+-      ! 4 bytes or more remaining
+-      mov     r0, r1
+-      shlr2   r1
++      bt/s    6f
++       mov    r0, r5
++      shlr2   r5
+       mov     #0, r2
+ 5:
+       addc    r2, r6
+       mov.l   @r4+, r2
+       movt    r0
+-      dt      r1
++      dt      r5
+       bf/s    5b
+        cmp/eq #1, r0
+       addc    r2, r6
+-      addc    r1, r6          ! r1==0 here, so it means add carry-bit
++      addc    r5, r6          ! r5==0 here, so it means add carry-bit
+ 6:
+-      ! 3 bytes or less remaining
++      mov     r1, r5
+       mov     #3, r0
+       and     r0, r5
+       tst     r5, r5
+@@ -159,16 +138,6 @@ ENTRY(csum_partial)
+       mov     #0, r0
+       addc    r0, r6
+ 9:
+-      ! Check if the buffer was misaligned, if so realign sum
+-      mov     r7, r0
+-      tst     #1, r0
+-      bt      10f
+-      mov     r6, r0
+-      shll8   r6
+-      shlr16  r0
+-      shlr8   r0
+-      or      r0, r6
+-10:
+       rts
+        mov    r6, r0
+-- 
+2.43.0
+
diff --git a/queue-5.4/s390-cio-fix-tracepoint-subchannel-type-field.patch b/queue-5.4/s390-cio-fix-tracepoint-subchannel-type-field.patch
new file mode 100644 (file)
index 0000000..3b90310
--- /dev/null
@@ -0,0 +1,38 @@
+From 852c7db43f03243ccf0a72ced17ac1cd7ba396a6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 26 Mar 2024 17:04:56 +0100
+Subject: s390/cio: fix tracepoint subchannel type field
+
+From: Peter Oberparleiter <oberpar@linux.ibm.com>
+
+[ Upstream commit 8692a24d0fae19f674d51726d179ad04ba95d958 ]
+
+The subchannel-type field "st" of s390_cio_stsch and s390_cio_msch
+tracepoints is incorrectly filled with the subchannel-enabled SCHIB
+value "ena". Fix this by assigning the correct value.
+
+Fixes: d1de8633d96a ("s390 cio: Rewrite trace point class s390_class_schib")
+Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
+Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/s390/cio/trace.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/s390/cio/trace.h b/drivers/s390/cio/trace.h
+index 4803139bce149..4716798b1368a 100644
+--- a/drivers/s390/cio/trace.h
++++ b/drivers/s390/cio/trace.h
+@@ -50,7 +50,7 @@ DECLARE_EVENT_CLASS(s390_class_schib,
+               __entry->devno = schib->pmcw.dev;
+               __entry->schib = *schib;
+               __entry->pmcw_ena = schib->pmcw.ena;
+-              __entry->pmcw_st = schib->pmcw.ena;
++              __entry->pmcw_st = schib->pmcw.st;
+               __entry->pmcw_dnv = schib->pmcw.dnv;
+               __entry->pmcw_dev = schib->pmcw.dev;
+               __entry->pmcw_lpm = schib->pmcw.lpm;
+-- 
+2.43.0
+
diff --git a/queue-5.4/sched-fair-allow-disabling-sched_balance_newidle-wit.patch b/queue-5.4/sched-fair-allow-disabling-sched_balance_newidle-wit.patch
new file mode 100644 (file)
index 0000000..e8329e2
--- /dev/null
@@ -0,0 +1,64 @@
+From 0eccb26d0bc683f66b405e31c3b71f8f335bd3ca Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 30 Apr 2024 18:05:23 +0300
+Subject: sched/fair: Allow disabling sched_balance_newidle with
+ sched_relax_domain_level
+
+From: Vitalii Bursov <vitaly@bursov.com>
+
+[ Upstream commit a1fd0b9d751f840df23ef0e75b691fc00cfd4743 ]
+
+Change relax_domain_level checks so that it would be possible
+to include or exclude all domains from newidle balancing.
+
+This matches the behavior described in the documentation:
+
+  -1   no request. use system default or follow request of others.
+   0   no search.
+   1   search siblings (hyperthreads in a core).
+
+"2" enables levels 0 and 1, level_max excludes the last (level_max)
+level, and level_max+1 includes all levels.
+
+Fixes: 1d3504fcf560 ("sched, cpuset: customize sched domains, core")
+Signed-off-by: Vitalii Bursov <vitaly@bursov.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
+Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
+Reviewed-by: Valentin Schneider <vschneid@redhat.com>
+Link: https://lore.kernel.org/r/bd6de28e80073c79466ec6401cdeae78f0d4423d.1714488502.git.vitaly@bursov.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/cgroup/cpuset.c  | 2 +-
+ kernel/sched/topology.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
+index 5d50ac2f26525..6ec74b9120b75 100644
+--- a/kernel/cgroup/cpuset.c
++++ b/kernel/cgroup/cpuset.c
+@@ -1868,7 +1868,7 @@ bool current_cpuset_is_being_rebound(void)
+ static int update_relax_domain_level(struct cpuset *cs, s64 val)
+ {
+ #ifdef CONFIG_SMP
+-      if (val < -1 || val >= sched_domain_level_max)
++      if (val < -1 || val > sched_domain_level_max + 1)
+               return -EINVAL;
+ #endif
+diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
+index 844dc30fc5593..fc0dcc812a07b 100644
+--- a/kernel/sched/topology.c
++++ b/kernel/sched/topology.c
+@@ -1205,7 +1205,7 @@ static void set_domain_attribute(struct sched_domain *sd,
+       } else
+               request = attr->relax_domain_level;
+-      if (sd->level > request) {
++      if (sd->level >= request) {
+               /* Turn off idle balance on this domain: */
+               sd->flags &= ~(SD_BALANCE_WAKE|SD_BALANCE_NEWIDLE);
+       }
+-- 
+2.43.0
+
diff --git a/queue-5.4/sched-topology-don-t-set-sd_balance_wake-on-cpuset-d.patch b/queue-5.4/sched-topology-don-t-set-sd_balance_wake-on-cpuset-d.patch
new file mode 100644 (file)
index 0000000..0a329b4
--- /dev/null
@@ -0,0 +1,70 @@
+From 83f6b71c6227016f7e7211b153becb6ed44da2dc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 14 Oct 2019 17:44:08 +0100
+Subject: sched/topology: Don't set SD_BALANCE_WAKE on cpuset domain relax
+
+From: Valentin Schneider <valentin.schneider@arm.com>
+
+[ Upstream commit 9ae7ab20b4835dbea0e5fc6a5c70171dc354a72e ]
+
+As pointed out in commit
+
+  182a85f8a119 ("sched: Disable wakeup balancing")
+
+SD_BALANCE_WAKE is a tad too aggressive, and is usually left unset.
+
+However, it turns out cpuset domain relaxation will unconditionally set it
+on domains below the relaxation level. This made sense back when
+SD_BALANCE_WAKE was set unconditionally, but it no longer is the case.
+
+We can improve things slightly by noticing that set_domain_attribute() is
+always called after sd_init(), so rather than setting flags we can rely on
+whatever sd_init() is doing and only clear certain flags when above the
+relaxation level.
+
+While at it, slightly clean up the function and flip the relax level
+check to be more human readable.
+
+Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
+Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
+Cc: mingo@kernel.org
+Cc: vincent.guittot@linaro.org
+Cc: juri.lelli@redhat.com
+Cc: seto.hidetoshi@jp.fujitsu.com
+Cc: qperret@google.com
+Cc: Dietmar.Eggemann@arm.com
+Cc: morten.rasmussen@arm.com
+Link: https://lkml.kernel.org/r/20191014164408.32596-1-valentin.schneider@arm.com
+Stable-dep-of: a1fd0b9d751f ("sched/fair: Allow disabling sched_balance_newidle with sched_relax_domain_level")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/sched/topology.c | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
+index e5ebaffc4fef5..844dc30fc5593 100644
+--- a/kernel/sched/topology.c
++++ b/kernel/sched/topology.c
+@@ -1201,16 +1201,13 @@ static void set_domain_attribute(struct sched_domain *sd,
+       if (!attr || attr->relax_domain_level < 0) {
+               if (default_relax_domain_level < 0)
+                       return;
+-              else
+-                      request = default_relax_domain_level;
++              request = default_relax_domain_level;
+       } else
+               request = attr->relax_domain_level;
+-      if (request < sd->level) {
++
++      if (sd->level > request) {
+               /* Turn off idle balance on this domain: */
+               sd->flags &= ~(SD_BALANCE_WAKE|SD_BALANCE_NEWIDLE);
+-      } else {
+-              /* Turn on idle balance on this domain: */
+-              sd->flags |= (SD_BALANCE_WAKE|SD_BALANCE_NEWIDLE);
+       }
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-bfa-ensure-the-copied-buf-is-nul-terminated.patch b/queue-5.4/scsi-bfa-ensure-the-copied-buf-is-nul-terminated.patch
new file mode 100644 (file)
index 0000000..bf6bb5b
--- /dev/null
@@ -0,0 +1,49 @@
+From b249045039ceae9ee045229d1defb2fa7c98b758 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 24 Apr 2024 21:44:20 +0700
+Subject: scsi: bfa: Ensure the copied buf is NUL terminated
+
+From: Bui Quang Minh <minhquangbui99@gmail.com>
+
+[ Upstream commit 13d0cecb4626fae67c00c84d3c7851f6b62f7df3 ]
+
+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: 9f30b674759b ("bfa: replace 2 kzalloc/copy_from_user by memdup_user")
+Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
+Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-3-f1f1b53a10f4@gmail.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/bfa/bfad_debugfs.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/bfa/bfad_debugfs.c b/drivers/scsi/bfa/bfad_debugfs.c
+index fd1b378a263a0..d3c7d4423c514 100644
+--- a/drivers/scsi/bfa/bfad_debugfs.c
++++ b/drivers/scsi/bfa/bfad_debugfs.c
+@@ -250,7 +250,7 @@ bfad_debugfs_write_regrd(struct file *file, const char __user *buf,
+       unsigned long flags;
+       void *kern_buf;
+-      kern_buf = memdup_user(buf, nbytes);
++      kern_buf = memdup_user_nul(buf, nbytes);
+       if (IS_ERR(kern_buf))
+               return PTR_ERR(kern_buf);
+@@ -317,7 +317,7 @@ bfad_debugfs_write_regwr(struct file *file, const char __user *buf,
+       unsigned long flags;
+       void *kern_buf;
+-      kern_buf = memdup_user(buf, nbytes);
++      kern_buf = memdup_user_nul(buf, nbytes);
+       if (IS_ERR(kern_buf))
+               return PTR_ERR(kern_buf);
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-hpsa-fix-allocation-size-for-scsi_host-private-.patch b/queue-5.4/scsi-hpsa-fix-allocation-size-for-scsi_host-private-.patch
new file mode 100644 (file)
index 0000000..10363b5
--- /dev/null
@@ -0,0 +1,41 @@
+From 170b282e68427675c8973c21b1503d674598437f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Mar 2024 20:04:47 +0300
+Subject: scsi: hpsa: Fix allocation size for Scsi_Host private data
+
+From: Yuri Karpov <YKarpov@ispras.ru>
+
+[ Upstream commit 504e2bed5d50610c1836046c0c195b0a6dba9c72 ]
+
+struct Scsi_Host private data contains pointer to struct ctlr_info.
+
+Restore allocation of only 8 bytes to store pointer in struct Scsi_Host
+private data area.
+
+Found by Linux Verification Center (linuxtesting.org) with SVACE.
+
+Fixes: bbbd25499100 ("scsi: hpsa: Fix allocation size for scsi_host_alloc()")
+Signed-off-by: Yuri Karpov <YKarpov@ispras.ru>
+Link: https://lore.kernel.org/r/20240312170447.743709-1-YKarpov@ispras.ru
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/hpsa.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
+index e670cce0cb6ef..b760477b57424 100644
+--- a/drivers/scsi/hpsa.c
++++ b/drivers/scsi/hpsa.c
+@@ -5810,7 +5810,7 @@ static int hpsa_scsi_host_alloc(struct ctlr_info *h)
+ {
+       struct Scsi_Host *sh;
+-      sh = scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info));
++      sh = scsi_host_alloc(&hpsa_driver_template, sizeof(struct ctlr_info *));
+       if (sh == NULL) {
+               dev_err(&h->pdev->dev, "scsi_host_alloc failed\n");
+               return -ENOMEM;
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-libsas-fix-the-failure-of-adding-phy-with-zero-.patch b/queue-5.4/scsi-libsas-fix-the-failure-of-adding-phy-with-zero-.patch
new file mode 100644 (file)
index 0000000..b1814c0
--- /dev/null
@@ -0,0 +1,55 @@
+From d63bd62c333ad5f37e59f049bf07bedb57f945d8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Mar 2024 14:11:03 +0000
+Subject: scsi: libsas: Fix the failure of adding phy with zero-address to port
+
+From: Xingui Yang <yangxingui@huawei.com>
+
+[ Upstream commit 06036a0a5db34642c5dbe22021a767141f010b7a ]
+
+As of commit 7d1d86518118 ("[SCSI] libsas: fix false positive 'device
+attached' conditions"), reset the phy->entacted_sas_addr address to a
+zero-address when the link rate is less than 1.5G.
+
+Currently we find that when a new device is attached, and the link rate is
+less than 1.5G, but the device type is not NO_DEVICE, for example: the link
+rate is SAS_PHY_RESET_IN_PROGRESS and the device type is stp. After setting
+the phy->entacted_sas_addr address to the zero address, the port will
+continue to be created for the phy with the zero-address, and other phys
+with the zero-address will be tried to be added to the new port:
+
+[562240.051197] sas: ex 500e004aaaaaaa1f phy19:U:0 attached: 0000000000000000 (no device)
+// phy19 is deleted but still on the parent port's phy_list
+[562240.062536] sas: ex 500e004aaaaaaa1f phy0 new device attached
+[562240.062616] sas: ex 500e004aaaaaaa1f phy00:U:5 attached: 0000000000000000 (stp)
+[562240.062680] port-7:7:0: trying to add phy phy-7:7:19 fails: it's already part of another port
+
+Therefore, it should be the same as sas_get_phy_attached_dev(). Only when
+device_type is SAS_PHY_UNUSED, sas_address is set to the 0 address.
+
+Fixes: 7d1d86518118 ("[SCSI] libsas: fix false positive 'device attached' conditions")
+Signed-off-by: Xingui Yang <yangxingui@huawei.com>
+Link: https://lore.kernel.org/r/20240312141103.31358-5-yangxingui@huawei.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/libsas/sas_expander.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
+index 173f91ae38f02..295941e41433d 100644
+--- a/drivers/scsi/libsas/sas_expander.c
++++ b/drivers/scsi/libsas/sas_expander.c
+@@ -256,8 +256,7 @@ static void sas_set_ex_phy(struct domain_device *dev, int phy_id, void *rsp)
+       /* help some expanders that fail to zero sas_address in the 'no
+        * device' case
+        */
+-      if (phy->attached_dev_type == SAS_PHY_UNUSED ||
+-          phy->linkrate < SAS_LINK_RATE_1_5_GBPS)
++      if (phy->attached_dev_type == SAS_PHY_UNUSED)
+               memset(phy->attached_sas_addr, 0, SAS_ADDR_SIZE);
+       else
+               memcpy(phy->attached_sas_addr, dr->attached_sas_addr, SAS_ADDR_SIZE);
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-qedf-ensure-the-copied-buf-is-nul-terminated.patch b/queue-5.4/scsi-qedf-ensure-the-copied-buf-is-nul-terminated.patch
new file mode 100644 (file)
index 0000000..48f2298
--- /dev/null
@@ -0,0 +1,40 @@
+From f2ed7436ee6a6af2b6819c4280f1a7ca297ff4e7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 24 Apr 2024 21:44:21 +0700
+Subject: scsi: qedf: Ensure the copied buf is NUL terminated
+
+From: Bui Quang Minh <minhquangbui99@gmail.com>
+
+[ Upstream commit d0184a375ee797eb657d74861ba0935b6e405c62 ]
+
+Currently, we allocate a count-sized kernel buffer and copy count from
+userspace to that buffer. Later, we use kstrtouint on this buffer but we
+don't ensure that the string is terminated inside the buffer, this can
+lead to OOB read when using kstrtouint. Fix this issue by using
+memdup_user_nul instead of memdup_user.
+
+Fixes: 61d8658b4a43 ("scsi: qedf: Add QLogic FastLinQ offload FCoE driver framework.")
+Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
+Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-4-f1f1b53a10f4@gmail.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qedf/qedf_debugfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/qedf/qedf_debugfs.c b/drivers/scsi/qedf/qedf_debugfs.c
+index b0a28a6a9c64a..41e7fab99013c 100644
+--- a/drivers/scsi/qedf/qedf_debugfs.c
++++ b/drivers/scsi/qedf/qedf_debugfs.c
+@@ -172,7 +172,7 @@ qedf_dbg_debug_cmd_write(struct file *filp, const char __user *buffer,
+       if (!count || *ppos)
+               return 0;
+-      kern_buf = memdup_user(buffer, count);
++      kern_buf = memdup_user_nul(buffer, count);
+       if (IS_ERR(kern_buf))
+               return PTR_ERR(kern_buf);
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-ufs-cdns-pltfrm-perform-read-back-after-writing.patch b/queue-5.4/scsi-ufs-cdns-pltfrm-perform-read-back-after-writing.patch
new file mode 100644 (file)
index 0000000..184da48
--- /dev/null
@@ -0,0 +1,50 @@
+From 2d7a0a2c1fbed222b8d76d7952edf6a1aed12498 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Mar 2024 15:46:48 -0500
+Subject: scsi: ufs: cdns-pltfrm: Perform read back after writing HCLKDIV
+
+From: Andrew Halaney <ahalaney@redhat.com>
+
+[ Upstream commit b715c55daf598aac8fa339048e4ca8a0916b332e ]
+
+Currently, HCLKDIV is written to and then completed with an mb().
+
+mb() ensures that the write completes, but completion doesn't mean that it
+isn't stored in a buffer somewhere. The recommendation for ensuring this
+bit has taken effect on the device is to perform a read back to force it to
+make it all the way to the device. This is documented in device-io.rst and
+a talk by Will Deacon on this can be seen over here:
+
+    https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678
+
+Let's do that to ensure the bit hits the device. Because the mb()'s purpose
+wasn't to add extra ordering (on top of the ordering guaranteed by
+writel()/readl()), it can safely be removed.
+
+Fixes: d90996dae8e4 ("scsi: ufs: Add UFS platform driver for Cadence UFS")
+Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
+Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-6-181252004586@redhat.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>
+---
+ drivers/scsi/ufs/cdns-pltfrm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/ufs/cdns-pltfrm.c b/drivers/scsi/ufs/cdns-pltfrm.c
+index 6feeb0faf123a..9d6bb47168706 100644
+--- a/drivers/scsi/ufs/cdns-pltfrm.c
++++ b/drivers/scsi/ufs/cdns-pltfrm.c
+@@ -56,7 +56,7 @@ static int cdns_ufs_set_hclkdiv(struct ufs_hba *hba)
+        * Make sure the register was updated,
+        * UniPro layer will not work with an incorrect value.
+        */
+-      mb();
++      ufshcd_readl(hba, CDNS_UFS_REG_HCLKDIV);
+       return 0;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-ufs-core-perform-read-back-after-disabling-inte.patch b/queue-5.4/scsi-ufs-core-perform-read-back-after-disabling-inte.patch
new file mode 100644 (file)
index 0000000..e5853cc
--- /dev/null
@@ -0,0 +1,53 @@
+From e1add71f89e133a5db62153542b3e019d434c193 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Mar 2024 15:46:50 -0500
+Subject: scsi: ufs: core: Perform read back after disabling interrupts
+
+From: Andrew Halaney <ahalaney@redhat.com>
+
+[ Upstream commit e4a628877119bd40164a651d20321247b6f94a8b ]
+
+Currently, interrupts are cleared and disabled prior to registering the
+interrupt. An mb() is used to complete the clear/disable writes before the
+interrupt is registered.
+
+mb() ensures that the write completes, but completion doesn't mean that it
+isn't stored in a buffer somewhere. The recommendation for ensuring these
+bits have taken effect on the device is to perform a read back to force it
+to make it all the way to the device. This is documented in device-io.rst
+and a talk by Will Deacon on this can be seen over here:
+
+    https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678
+
+Let's do that to ensure these bits hit the device. Because the mb()'s
+purpose wasn't to add extra ordering (on top of the ordering guaranteed by
+writel()/readl()), it can safely be removed.
+
+Fixes: 199ef13cac7d ("scsi: ufs: avoid spurious UFS host controller interrupts")
+Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Reviewed-by: Can Guo <quic_cang@quicinc.com>
+Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
+Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-8-181252004586@redhat.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ufs/ufshcd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
+index 363adf489079a..ea6148ee27835 100644
+--- a/drivers/scsi/ufs/ufshcd.c
++++ b/drivers/scsi/ufs/ufshcd.c
+@@ -8424,7 +8424,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
+        * Make sure that UFS interrupts are disabled and any pending interrupt
+        * status is cleared before registering UFS interrupt handler.
+        */
+-      mb();
++      ufshcd_readl(hba, REG_INTERRUPT_ENABLE);
+       /* IRQ registration */
+       err = devm_request_irq(dev, irq, ufshcd_intr, IRQF_SHARED, UFSHCD, hba);
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-ufs-core-perform-read-back-after-disabling-uic_.patch b/queue-5.4/scsi-ufs-core-perform-read-back-after-disabling-uic_.patch
new file mode 100644 (file)
index 0000000..ec6a4ab
--- /dev/null
@@ -0,0 +1,52 @@
+From 204d15504d39fc41ce7f6b1f1e911c63194e6a92 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Mar 2024 15:46:51 -0500
+Subject: scsi: ufs: core: Perform read back after disabling UIC_COMMAND_COMPL
+
+From: Andrew Halaney <ahalaney@redhat.com>
+
+[ Upstream commit 4bf3855497b60765ca03b983d064b25e99b97657 ]
+
+Currently, the UIC_COMMAND_COMPL interrupt is disabled and a wmb() is used
+to complete the register write before any following writes.
+
+wmb() ensures the writes complete in that order, but completion doesn't
+mean that it isn't stored in a buffer somewhere. The recommendation for
+ensuring this bit has taken effect on the device is to perform a read back
+to force it to make it all the way to the device. This is documented in
+device-io.rst and a talk by Will Deacon on this can be seen over here:
+
+    https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678
+
+Let's do that to ensure the bit hits the device. Because the wmb()'s
+purpose wasn't to add extra ordering (on top of the ordering guaranteed by
+writel()/readl()), it can safely be removed.
+
+Fixes: d75f7fe495cf ("scsi: ufs: reduce the interrupts for power mode change requests")
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Reviewed-by: Can Guo <quic_cang@quicinc.com>
+Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
+Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-9-181252004586@redhat.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ufs/ufshcd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
+index ea6148ee27835..e54a08f96a500 100644
+--- a/drivers/scsi/ufs/ufshcd.c
++++ b/drivers/scsi/ufs/ufshcd.c
+@@ -3731,7 +3731,7 @@ static int ufshcd_uic_pwr_ctrl(struct ufs_hba *hba, struct uic_command *cmd)
+                * Make sure UIC command completion interrupt is disabled before
+                * issuing UIC command.
+                */
+-              wmb();
++              ufshcd_readl(hba, REG_INTERRUPT_ENABLE);
+               reenable_intr = true;
+       }
+       ret = __ufshcd_send_uic_cmd(hba, cmd, false);
+-- 
+2.43.0
+
diff --git a/queue-5.4/scsi-ufs-qcom-perform-read-back-after-writing-reset-.patch b/queue-5.4/scsi-ufs-qcom-perform-read-back-after-writing-reset-.patch
new file mode 100644 (file)
index 0000000..a3f8414
--- /dev/null
@@ -0,0 +1,71 @@
+From cbadfcaec24aa8be728c206e253238170e0ef903 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 29 Mar 2024 15:46:43 -0500
+Subject: scsi: ufs: qcom: Perform read back after writing reset bit
+
+From: Andrew Halaney <ahalaney@redhat.com>
+
+[ Upstream commit c4d28e06b0c94636f6e35d003fa9ebac0a94e1ae ]
+
+Currently, the reset bit for the UFS provided reset controller (used by its
+phy) is written to, and then a mb() happens to try and ensure that hit the
+device. Immediately afterwards a usleep_range() occurs.
+
+mb() ensures that the write completes, but completion doesn't mean that it
+isn't stored in a buffer somewhere. The recommendation for ensuring this
+bit has taken effect on the device is to perform a read back to force it to
+make it all the way to the device. This is documented in device-io.rst and
+a talk by Will Deacon on this can be seen over here:
+
+    https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678
+
+Let's do that to ensure the bit hits the device. By doing so and
+guaranteeing the ordering against the immediately following usleep_range(),
+the mb() can safely be removed.
+
+Fixes: 81c0fc51b7a7 ("ufs-qcom: add support for Qualcomm Technologies Inc platforms")
+Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
+Reviewed-by: Can Guo <quic_cang@quicinc.com>
+Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
+Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-1-181252004586@redhat.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/ufs/ufs-qcom.h | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/scsi/ufs/ufs-qcom.h b/drivers/scsi/ufs/ufs-qcom.h
+index d401f174bb70b..3220345682a9b 100644
+--- a/drivers/scsi/ufs/ufs-qcom.h
++++ b/drivers/scsi/ufs/ufs-qcom.h
+@@ -155,10 +155,10 @@ static inline void ufs_qcom_assert_reset(struct ufs_hba *hba)
+                       1 << OFFSET_UFS_PHY_SOFT_RESET, REG_UFS_CFG1);
+       /*
+-       * Make sure assertion of ufs phy reset is written to
+-       * register before returning
++       * Dummy read to ensure the write takes effect before doing any sort
++       * of delay
+        */
+-      mb();
++      ufshcd_readl(hba, REG_UFS_CFG1);
+ }
+ static inline void ufs_qcom_deassert_reset(struct ufs_hba *hba)
+@@ -167,10 +167,10 @@ static inline void ufs_qcom_deassert_reset(struct ufs_hba *hba)
+                       0 << OFFSET_UFS_PHY_SOFT_RESET, REG_UFS_CFG1);
+       /*
+-       * Make sure de-assertion of ufs phy reset is written to
+-       * register before returning
++       * Dummy read to ensure the write takes effect before doing any sort
++       * of delay
+        */
+-      mb();
++      ufshcd_readl(hba, REG_UFS_CFG1);
+ }
+ struct ufs_qcom_bus_vote {
+-- 
+2.43.0
+
diff --git a/queue-5.4/selftests-kcmp-make-the-test-output-consistent-and-c.patch b/queue-5.4/selftests-kcmp-make-the-test-output-consistent-and-c.patch
new file mode 100644 (file)
index 0000000..928b277
--- /dev/null
@@ -0,0 +1,82 @@
+From 8f392646b115007ea37e1a05f44bf049e8521572 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Jun 2022 00:58:22 +0530
+Subject: selftests/kcmp: Make the test output consistent and clear
+
+From: Gautam Menghani <gautammenghani201@gmail.com>
+
+[ Upstream commit ff682226a353d88ffa5db9c2a9b945066776311e ]
+
+Make the output format of this test consistent. Currently the output is
+as follows:
+
++TAP version 13
++1..1
++# selftests: kcmp: kcmp_test
++# pid1:  45814 pid2:  45815 FD:  1 FILES:  1 VM:  2 FS:  1 SIGHAND:  2
++  IO:  0 SYSVSEM:  0 INV: -1
++# PASS: 0 returned as expected
++# PASS: 0 returned as expected
++# PASS: 0 returned as expected
++# # Planned tests != run tests (0 != 3)
++# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
++# # Planned tests != run tests (0 != 3)
++# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
++# # Totals: pass:0 fail:0 xfail:0 xpass:0 skip:0 error:0
++ok 1 selftests: kcmp: kcmp_test
+
+With this patch applied the output is as follows:
+
++TAP version 13
++1..1
++# selftests: kcmp: kcmp_test
++# TAP version 13
++# 1..3
++# pid1:  46330 pid2:  46331 FD:  1 FILES:  2 VM:  2 FS:  2 SIGHAND:  1
++  IO:  0 SYSVSEM:  0 INV: -1
++# PASS: 0 returned as expected
++# PASS: 0 returned as expected
++# PASS: 0 returned as expected
++# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
++ok 1 selftests: kcmp: kcmp_test
+
+Signed-off-by: Gautam Menghani <gautammenghani201@gmail.com>
+Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
+Stable-dep-of: eb59a5811371 ("selftests/kcmp: remove unused open mode")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/kcmp/kcmp_test.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/tools/testing/selftests/kcmp/kcmp_test.c b/tools/testing/selftests/kcmp/kcmp_test.c
+index 6ea7b9f37a411..25110c7c0b3ed 100644
+--- a/tools/testing/selftests/kcmp/kcmp_test.c
++++ b/tools/testing/selftests/kcmp/kcmp_test.c
+@@ -88,6 +88,9 @@ int main(int argc, char **argv)
+               int pid2 = getpid();
+               int ret;
++              ksft_print_header();
++              ksft_set_plan(3);
++
+               fd2 = open(kpath, O_RDWR, 0644);
+               if (fd2 < 0) {
+                       perror("Can't open file");
+@@ -152,7 +155,6 @@ int main(int argc, char **argv)
+                       ksft_inc_pass_cnt();
+               }
+-              ksft_print_cnts();
+               if (ret)
+                       ksft_exit_fail();
+@@ -162,5 +164,5 @@ int main(int argc, char **argv)
+       waitpid(pid2, &status, P_ALL);
+-      return ksft_exit_pass();
++      return 0;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/selftests-kcmp-remove-unused-open-mode.patch b/queue-5.4/selftests-kcmp-remove-unused-open-mode.patch
new file mode 100644 (file)
index 0000000..6cfed0a
--- /dev/null
@@ -0,0 +1,42 @@
+From 0a7c34bc8135a4afcb9a3d4768f662f7d65a5ebb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 29 Apr 2024 23:46:09 +0000
+Subject: selftests/kcmp: remove unused open mode
+
+From: Edward Liaw <edliaw@google.com>
+
+[ Upstream commit eb59a58113717df04b8a8229befd8ab1e5dbf86e ]
+
+Android bionic warns that open modes are ignored if O_CREAT or O_TMPFILE
+aren't specified.  The permissions for the file are set above:
+
+       fd1 = open(kpath, O_RDWR | O_CREAT | O_TRUNC, 0644);
+
+Link: https://lkml.kernel.org/r/20240429234610.191144-1-edliaw@google.com
+Fixes: d97b46a64674 ("syscalls, x86: add __NR_kcmp syscall")
+Signed-off-by: Edward Liaw <edliaw@google.com>
+Reviewed-by: Cyrill Gorcunov <gorcunov@gmail.com>
+Cc: Eric Biederman <ebiederm@xmission.com>
+Cc: Shuah Khan <shuah@kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/testing/selftests/kcmp/kcmp_test.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/testing/selftests/kcmp/kcmp_test.c b/tools/testing/selftests/kcmp/kcmp_test.c
+index 25110c7c0b3ed..d7a8e321bb16b 100644
+--- a/tools/testing/selftests/kcmp/kcmp_test.c
++++ b/tools/testing/selftests/kcmp/kcmp_test.c
+@@ -91,7 +91,7 @@ int main(int argc, char **argv)
+               ksft_print_header();
+               ksft_set_plan(3);
+-              fd2 = open(kpath, O_RDWR, 0644);
++              fd2 = open(kpath, O_RDWR);
+               if (fd2 < 0) {
+                       perror("Can't open file");
+                       ksft_exit_fail();
+-- 
+2.43.0
+
index 2e2f57ebd0f93c1cead165263597055ae7c363ae..741c8a72422e2e0906f159aa0c596ec2f22e7dc5 100644 (file)
@@ -4,3 +4,89 @@ ring-buffer-fix-a-race-between-readers-and-resize-checks.patch
 net-smc91x-fix-m68k-kernel-compilation-for-coldfire-cpu.patch
 nilfs2-fix-unexpected-freezing-of-nilfs_segctor_sync.patch
 nilfs2-fix-potential-hang-in-nilfs_detach_log_writer.patch
+wifi-cfg80211-fix-the-order-of-arguments-for-trace-e.patch
+net-usb-qmi_wwan-add-telit-fn920c04-compositions.patch
+drm-amd-display-set-color_mgmt_changed-to-true-on-un.patch
+asoc-rt5645-fix-the-electric-noise-due-to-the-cbj-co.patch
+asoc-dt-bindings-rt5645-add-cbj-sleeve-gpio-property.patch
+asoc-da7219-aad-fix-usage-of-device_get_named_child_.patch
+drm-amdkfd-flush-the-process-wq-before-creating-a-kf.patch
+nvme-find-numa-distance-only-if-controller-has-valid.patch
+openpromfs-finish-conversion-to-the-new-mount-api.patch
+crypto-bcm-fix-pointer-arithmetic.patch
+firmware-raspberrypi-use-correct-device-for-dma-mapp.patch
+ecryptfs-fix-buffer-size-for-tag-66-packet.patch
+nilfs2-fix-out-of-range-warning.patch
+parisc-add-missing-export-of-__cmpxchg_u8.patch
+crypto-ccp-drop-platform-ifdef-checks.patch
+s390-cio-fix-tracepoint-subchannel-type-field.patch
+jffs2-prevent-xattr-node-from-overflowing-the-eraseb.patch
+null_blk-fix-missing-mutex_destroy-at-module-removal.patch
+md-fix-resync-softlockup-when-bitmap-size-is-less-th.patch
+wifi-ath10k-poll-service-ready-message-before-failin.patch
+x86-boot-ignore-relocations-in-.notes-sections-in-wa.patch
+qed-avoid-truncating-work-queue-length.patch
+scsi-ufs-qcom-perform-read-back-after-writing-reset-.patch
+scsi-ufs-cdns-pltfrm-perform-read-back-after-writing.patch
+scsi-ufs-core-perform-read-back-after-disabling-inte.patch
+scsi-ufs-core-perform-read-back-after-disabling-uic_.patch
+irqchip-alpine-msi-fix-off-by-one-in-allocation-erro.patch
+acpi-disable-wstringop-truncation.patch
+cpufreq-reorganize-checks-in-cpufreq_offline.patch
+cpufreq-split-cpufreq_offline.patch
+cpufreq-rearrange-locking-in-cpufreq_remove_dev.patch
+cpufreq-exit-callback-is-optional.patch
+scsi-libsas-fix-the-failure-of-adding-phy-with-zero-.patch
+scsi-hpsa-fix-allocation-size-for-scsi_host-private-.patch
+x86-purgatory-switch-to-the-position-independent-sma.patch
+wifi-ath10k-fix-an-error-code-problem-in-ath10k_dbg_.patch
+wifi-ath10k-populate-board-data-for-wcn3990.patch
+tcp-minor-optimization-in-tcp_add_backlog.patch
+tcp-fix-a-signed-integer-overflow-bug-in-tcp_add_bac.patch
+tcp-avoid-premature-drops-in-tcp_add_backlog.patch
+macintosh-via-macii-fix-bug-sleeping-function-called.patch
+wifi-carl9170-add-a-proper-sanity-check-for-endpoint.patch
+wifi-ar5523-enable-proper-endpoint-verification.patch
+sh-kprobes-merge-arch_copy_kprobe-into-arch_prepare_.patch
+revert-sh-handle-calling-csum_partial-with-misaligne.patch
+hid-intel-ish-hid-ipc-add-check-for-pci_alloc_irq_ve.patch
+scsi-bfa-ensure-the-copied-buf-is-nul-terminated.patch
+scsi-qedf-ensure-the-copied-buf-is-nul-terminated.patch
+wifi-mwl8k-initialize-cmd-addr-properly.patch
+usb-aqc111-stop-lying-about-skb-truesize.patch
+net-usb-sr9700-stop-lying-about-skb-truesize.patch
+m68k-fix-spinlock-race-in-kernel-thread-creation.patch
+m68k-mac-fix-reboot-hang-on-mac-iici.patch
+net-ethernet-cortina-locking-fixes.patch
+af_unix-fix-data-races-in-unix_release_sock-unix_str.patch
+net-usb-smsc95xx-stop-lying-about-skb-truesize.patch
+net-openvswitch-fix-overwriting-ct-original-tuple-fo.patch
+ipv6-sr-add-missing-seg6_local_exit.patch
+ipv6-sr-fix-incorrect-unregister-order.patch
+ipv6-sr-fix-invalid-unregister-error-path.patch
+drm-amd-display-fix-potential-index-out-of-bounds-in.patch
+mtd-rawnand-hynix-fixed-typo.patch
+fbdev-shmobile-fix-snprintf-truncation.patch
+drm-mediatek-add-0-size-check-to-mtk_drm_gem_obj.patch
+powerpc-fsl-soc-hide-unused-const-variable.patch
+fbdev-sisfb-hide-unused-variables.patch
+media-ngene-add-dvb_ca_en50221_init-return-value-che.patch
+media-radio-shark2-avoid-led_names-truncations.patch
+platform-x86-wmi-make-two-functions-static.patch
+platform-x86-xiaomi-wmi-fix-race-condition-when-repo.patch
+fbdev-sh7760fb-allow-modular-build.patch
+drm-arm-malidp-fix-a-possible-null-pointer-dereferen.patch
+asoc-tracing-export-snd_soc_dapm_dir_out-to-its-valu.patch
+drm-panel-simple-add-missing-innolux-g121x1-l03-form.patch
+rdma-hns-use-complete-parentheses-in-macros.patch
+x86-insn-fix-push-instruction-in-x86-instruction-dec.patch
+ext4-avoid-excessive-credit-estimate-in-ext4_tmpfile.patch
+sunrpc-removed-redundant-procp-check.patch
+sunrpc-fix-gss_free_in_token_pages.patch
+selftests-kcmp-make-the-test-output-consistent-and-c.patch
+selftests-kcmp-remove-unused-open-mode.patch
+rdma-ipoib-fix-format-truncation-compilation-errors.patch
+netrom-fix-possible-dead-lock-in-nr_rt_ioctl.patch
+af_packet-do-not-call-packet_read_pending-from-tpack.patch
+sched-topology-don-t-set-sd_balance_wake-on-cpuset-d.patch
+sched-fair-allow-disabling-sched_balance_newidle-wit.patch
diff --git a/queue-5.4/sh-kprobes-merge-arch_copy_kprobe-into-arch_prepare_.patch b/queue-5.4/sh-kprobes-merge-arch_copy_kprobe-into-arch_prepare_.patch
new file mode 100644 (file)
index 0000000..995cc91
--- /dev/null
@@ -0,0 +1,53 @@
+From 32dd391f00e9519cb255a5aabc98692a76c82867 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 1 Mar 2024 22:02:30 +0100
+Subject: sh: kprobes: Merge arch_copy_kprobe() into arch_prepare_kprobe()
+
+From: Geert Uytterhoeven <geert+renesas@glider.be>
+
+[ Upstream commit 1422ae080b66134fe192082d9b721ab7bd93fcc5 ]
+
+arch/sh/kernel/kprobes.c:52:16: warning: no previous prototype for 'arch_copy_kprobe' [-Wmissing-prototypes]
+
+Although SH kprobes support was only merged in v2.6.28, it missed the
+earlier removal of the arch_copy_kprobe() callback in v2.6.15.
+
+Based on the powerpc part of commit 49a2a1b83ba6fa40 ("[PATCH] kprobes:
+changed from using spinlock to mutex").
+
+Fixes: d39f5450146ff39f ("sh: Add kprobes support.")
+Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+Link: https://lore.kernel.org/r/717d47a19689cc944fae6e981a1ad7cae1642c89.1709326528.git.geert+renesas@glider.be
+Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/sh/kernel/kprobes.c | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/arch/sh/kernel/kprobes.c b/arch/sh/kernel/kprobes.c
+index 318296f48f1ac..75f51bc2d801e 100644
+--- a/arch/sh/kernel/kprobes.c
++++ b/arch/sh/kernel/kprobes.c
+@@ -44,17 +44,12 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
+       if (OPCODE_RTE(opcode))
+               return -EFAULT; /* Bad breakpoint */
++      memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
+       p->opcode = opcode;
+       return 0;
+ }
+-void __kprobes arch_copy_kprobe(struct kprobe *p)
+-{
+-      memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
+-      p->opcode = *p->addr;
+-}
+-
+ void __kprobes arch_arm_kprobe(struct kprobe *p)
+ {
+       *p->addr = BREAKPOINT_INSTRUCTION;
+-- 
+2.43.0
+
diff --git a/queue-5.4/sunrpc-fix-gss_free_in_token_pages.patch b/queue-5.4/sunrpc-fix-gss_free_in_token_pages.patch
new file mode 100644 (file)
index 0000000..4ae5491
--- /dev/null
@@ -0,0 +1,78 @@
+From 8462ba06ad0fdd4246ac1477b32cb6bd9ed84f78 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 7 May 2024 09:10:41 -0400
+Subject: SUNRPC: Fix gss_free_in_token_pages()
+
+From: Chuck Lever <chuck.lever@oracle.com>
+
+[ Upstream commit bafa6b4d95d97877baa61883ff90f7e374427fae ]
+
+Dan Carpenter says:
+> Commit 5866efa8cbfb ("SUNRPC: Fix svcauth_gss_proxy_init()") from Oct
+> 24, 2019 (linux-next), leads to the following Smatch static checker
+> warning:
+>
+>      net/sunrpc/auth_gss/svcauth_gss.c:1039 gss_free_in_token_pages()
+>      warn: iterator 'i' not incremented
+>
+> net/sunrpc/auth_gss/svcauth_gss.c
+>     1034 static void gss_free_in_token_pages(struct gssp_in_token *in_token)
+>     1035 {
+>     1036         u32 inlen;
+>     1037         int i;
+>     1038
+> --> 1039         i = 0;
+>     1040         inlen = in_token->page_len;
+>     1041         while (inlen) {
+>     1042                 if (in_token->pages[i])
+>     1043                         put_page(in_token->pages[i]);
+>                                                          ^
+> This puts page zero over and over.
+>
+>     1044                 inlen -= inlen > PAGE_SIZE ? PAGE_SIZE : inlen;
+>     1045         }
+>     1046
+>     1047         kfree(in_token->pages);
+>     1048         in_token->pages = NULL;
+>     1049 }
+
+Based on the way that the ->pages[] array is constructed in
+gss_read_proxy_verf(), we know that once the loop encounters a NULL
+page pointer, the remaining array elements must also be NULL.
+
+Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
+Suggested-by: Trond Myklebust <trondmy@hammerspace.com>
+Fixes: 5866efa8cbfb ("SUNRPC: Fix svcauth_gss_proxy_init()")
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/auth_gss/svcauth_gss.c | 10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
+index 1a869a203d520..053c65da04bca 100644
+--- a/net/sunrpc/auth_gss/svcauth_gss.c
++++ b/net/sunrpc/auth_gss/svcauth_gss.c
+@@ -1074,17 +1074,11 @@ gss_read_verf(struct rpc_gss_wire_cred *gc,
+ static void gss_free_in_token_pages(struct gssp_in_token *in_token)
+ {
+-      u32 inlen;
+       int i;
+       i = 0;
+-      inlen = in_token->page_len;
+-      while (inlen) {
+-              if (in_token->pages[i])
+-                      put_page(in_token->pages[i]);
+-              inlen -= inlen > PAGE_SIZE ? PAGE_SIZE : inlen;
+-      }
+-
++      while (in_token->pages[i])
++              put_page(in_token->pages[i++]);
+       kfree(in_token->pages);
+       in_token->pages = NULL;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/sunrpc-removed-redundant-procp-check.patch b/queue-5.4/sunrpc-removed-redundant-procp-check.patch
new file mode 100644 (file)
index 0000000..2488cad
--- /dev/null
@@ -0,0 +1,39 @@
+From fb51ef34b2588386144738701dd88a9078024100 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Mar 2024 14:10:44 +0700
+Subject: sunrpc: removed redundant procp check
+
+From: Aleksandr Aprelkov <aaprelkov@usergate.com>
+
+[ Upstream commit a576f36971ab4097b6aa76433532aa1fb5ee2d3b ]
+
+since vs_proc pointer is dereferenced before getting it's address there's
+no need to check for NULL.
+
+Found by Linux Verification Center (linuxtesting.org) with SVACE.
+
+Fixes: 8e5b67731d08 ("SUNRPC: Add a callback to initialise server requests")
+Signed-off-by: Aleksandr Aprelkov <aaprelkov@usergate.com>
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/svc.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
+index 1741f114e8ff7..1b82a7b0df4d3 100644
+--- a/net/sunrpc/svc.c
++++ b/net/sunrpc/svc.c
+@@ -1255,8 +1255,6 @@ svc_generic_init_request(struct svc_rqst *rqstp,
+       if (rqstp->rq_proc >= versp->vs_nproc)
+               goto err_bad_proc;
+       rqstp->rq_procinfo = procp = &versp->vs_proc[rqstp->rq_proc];
+-      if (!procp)
+-              goto err_bad_proc;
+       /* Initialize storage for argp and resp */
+       memset(rqstp->rq_argp, 0, procp->pc_argsize);
+-- 
+2.43.0
+
diff --git a/queue-5.4/tcp-avoid-premature-drops-in-tcp_add_backlog.patch b/queue-5.4/tcp-avoid-premature-drops-in-tcp_add_backlog.patch
new file mode 100644 (file)
index 0000000..0893045
--- /dev/null
@@ -0,0 +1,87 @@
+From f47803aab7507f4cf2114a39b8dd6e9bb2d19b8f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 23 Apr 2024 12:56:20 +0000
+Subject: tcp: avoid premature drops in tcp_add_backlog()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit ec00ed472bdb7d0af840da68c8c11bff9f4d9caa ]
+
+While testing TCP performance with latest trees,
+I saw suspect SOCKET_BACKLOG drops.
+
+tcp_add_backlog() computes its limit with :
+
+    limit = (u32)READ_ONCE(sk->sk_rcvbuf) +
+            (u32)(READ_ONCE(sk->sk_sndbuf) >> 1);
+    limit += 64 * 1024;
+
+This does not take into account that sk->sk_backlog.len
+is reset only at the very end of __release_sock().
+
+Both sk->sk_backlog.len and sk->sk_rmem_alloc could reach
+sk_rcvbuf in normal conditions.
+
+We should double sk->sk_rcvbuf contribution in the formula
+to absorb bubbles in the backlog, which happen more often
+for very fast flows.
+
+This change maintains decent protection against abuses.
+
+Fixes: c377411f2494 ("net: sk_add_backlog() take rmem_alloc into account")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Link: https://lore.kernel.org/r/20240423125620.3309458-1-edumazet@google.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/tcp_ipv4.c | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
+index d29d4b8192643..c18ad443ca7db 100644
+--- a/net/ipv4/tcp_ipv4.c
++++ b/net/ipv4/tcp_ipv4.c
+@@ -1678,7 +1678,7 @@ int tcp_v4_early_demux(struct sk_buff *skb)
+ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
+ {
+-      u32 limit, tail_gso_size, tail_gso_segs;
++      u32 tail_gso_size, tail_gso_segs;
+       struct skb_shared_info *shinfo;
+       const struct tcphdr *th;
+       struct tcphdr *thtail;
+@@ -1687,6 +1687,7 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
+       bool fragstolen;
+       u32 gso_segs;
+       u32 gso_size;
++      u64 limit;
+       int delta;
+       /* In case all data was pulled from skb frags (in __pskb_pull_tail()),
+@@ -1781,7 +1782,13 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
+       __skb_push(skb, hdrlen);
+ no_coalesce:
+-      limit = (u32)READ_ONCE(sk->sk_rcvbuf) + (u32)(READ_ONCE(sk->sk_sndbuf) >> 1);
++      /* sk->sk_backlog.len is reset only at the end of __release_sock().
++       * Both sk->sk_backlog.len and sk->sk_rmem_alloc could reach
++       * sk_rcvbuf in normal conditions.
++       */
++      limit = ((u64)READ_ONCE(sk->sk_rcvbuf)) << 1;
++
++      limit += ((u32)READ_ONCE(sk->sk_sndbuf)) >> 1;
+       /* Only socket owner can try to collapse/prune rx queues
+        * to reduce memory overhead, so add a little headroom here.
+@@ -1789,6 +1796,8 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
+        */
+       limit += 64 * 1024;
++      limit = min_t(u64, limit, UINT_MAX);
++
+       if (unlikely(sk_add_backlog(sk, skb, limit))) {
+               bh_unlock_sock(sk);
+               __NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPBACKLOGDROP);
+-- 
+2.43.0
+
diff --git a/queue-5.4/tcp-fix-a-signed-integer-overflow-bug-in-tcp_add_bac.patch b/queue-5.4/tcp-fix-a-signed-integer-overflow-bug-in-tcp_add_bac.patch
new file mode 100644 (file)
index 0000000..49e1fd9
--- /dev/null
@@ -0,0 +1,49 @@
+From 8f73bc6c152f7a62f9db0bb995edbdc17ee78f34 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 21 Oct 2022 12:06:22 +0800
+Subject: tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
+
+From: Lu Wei <luwei32@huawei.com>
+
+[ Upstream commit ec791d8149ff60c40ad2074af3b92a39c916a03f ]
+
+The type of sk_rcvbuf and sk_sndbuf in struct sock is int, and
+in tcp_add_backlog(), the variable limit is caculated by adding
+sk_rcvbuf, sk_sndbuf and 64 * 1024, it may exceed the max value
+of int and overflow. This patch reduces the limit budget by
+halving the sndbuf to solve this issue since ACK packets are much
+smaller than the payload.
+
+Fixes: c9c3321257e1 ("tcp: add tcp_add_backlog()")
+Signed-off-by: Lu Wei <luwei32@huawei.com>
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Acked-by: Kuniyuki Iwashima <kuniyu@amazon.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Stable-dep-of: ec00ed472bdb ("tcp: avoid premature drops in tcp_add_backlog()")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/tcp_ipv4.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
+index 1567072071633..d29d4b8192643 100644
+--- a/net/ipv4/tcp_ipv4.c
++++ b/net/ipv4/tcp_ipv4.c
+@@ -1781,11 +1781,13 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
+       __skb_push(skb, hdrlen);
+ no_coalesce:
++      limit = (u32)READ_ONCE(sk->sk_rcvbuf) + (u32)(READ_ONCE(sk->sk_sndbuf) >> 1);
++
+       /* Only socket owner can try to collapse/prune rx queues
+        * to reduce memory overhead, so add a little headroom here.
+        * Few sockets backlog are possibly concurrently non empty.
+        */
+-      limit = READ_ONCE(sk->sk_rcvbuf) + READ_ONCE(sk->sk_sndbuf) + 64*1024;
++      limit += 64 * 1024;
+       if (unlikely(sk_add_backlog(sk, skb, limit))) {
+               bh_unlock_sock(sk);
+-- 
+2.43.0
+
diff --git a/queue-5.4/tcp-minor-optimization-in-tcp_add_backlog.patch b/queue-5.4/tcp-minor-optimization-in-tcp_add_backlog.patch
new file mode 100644 (file)
index 0000000..558d050
--- /dev/null
@@ -0,0 +1,46 @@
+From 12702edd66647697122f9e659ab2e5193e09164c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 15 Nov 2021 11:02:30 -0800
+Subject: tcp: minor optimization in tcp_add_backlog()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit d519f350967a60b85a574ad8aeac43f2b4384746 ]
+
+If packet is going to be coalesced, sk_sndbuf/sk_rcvbuf values
+are not used. Defer their access to the point we need them.
+
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Stable-dep-of: ec00ed472bdb ("tcp: avoid premature drops in tcp_add_backlog()")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv4/tcp_ipv4.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
+index 0dd917c5a7da6..1567072071633 100644
+--- a/net/ipv4/tcp_ipv4.c
++++ b/net/ipv4/tcp_ipv4.c
+@@ -1678,8 +1678,7 @@ int tcp_v4_early_demux(struct sk_buff *skb)
+ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
+ {
+-      u32 limit = READ_ONCE(sk->sk_rcvbuf) + READ_ONCE(sk->sk_sndbuf);
+-      u32 tail_gso_size, tail_gso_segs;
++      u32 limit, tail_gso_size, tail_gso_segs;
+       struct skb_shared_info *shinfo;
+       const struct tcphdr *th;
+       struct tcphdr *thtail;
+@@ -1786,7 +1785,7 @@ bool tcp_add_backlog(struct sock *sk, struct sk_buff *skb)
+        * to reduce memory overhead, so add a little headroom here.
+        * Few sockets backlog are possibly concurrently non empty.
+        */
+-      limit += 64*1024;
++      limit = READ_ONCE(sk->sk_rcvbuf) + READ_ONCE(sk->sk_sndbuf) + 64*1024;
+       if (unlikely(sk_add_backlog(sk, skb, limit))) {
+               bh_unlock_sock(sk);
+-- 
+2.43.0
+
diff --git a/queue-5.4/usb-aqc111-stop-lying-about-skb-truesize.patch b/queue-5.4/usb-aqc111-stop-lying-about-skb-truesize.patch
new file mode 100644 (file)
index 0000000..65e78dc
--- /dev/null
@@ -0,0 +1,55 @@
+From ae7f2058d49bbe202a85db042d0f60b213071498 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 6 May 2024 13:55:46 +0000
+Subject: usb: aqc111: stop lying about skb->truesize
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit 9aad6e45c4e7d16b2bb7c3794154b828fb4384b4 ]
+
+Some usb drivers try to set small skb->truesize and break
+core networking stacks.
+
+I replace one skb_clone() by an allocation of a fresh
+and small skb, to get minimally sized skbs, like we did
+in commit 1e2c61172342 ("net: cdc_ncm: reduce skb truesize
+in rx path") and 4ce62d5b2f7a ("net: usb: ax88179_178a:
+stop lying about skb->truesize")
+
+Fixes: 361459cd9642 ("net: usb: aqc111: Implement RX data path")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Link: https://lore.kernel.org/r/20240506135546.3641185-1-edumazet@google.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/usb/aqc111.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c
+index 892d58b38cf5b..b958e00058820 100644
+--- a/drivers/net/usb/aqc111.c
++++ b/drivers/net/usb/aqc111.c
+@@ -1141,17 +1141,15 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
+                       continue;
+               }
+-              /* Clone SKB */
+-              new_skb = skb_clone(skb, GFP_ATOMIC);
++              new_skb = netdev_alloc_skb_ip_align(dev->net, pkt_len);
+               if (!new_skb)
+                       goto err;
+-              new_skb->len = pkt_len;
++              skb_put(new_skb, pkt_len);
++              memcpy(new_skb->data, skb->data, pkt_len);
+               skb_pull(new_skb, AQ_RX_HW_PAD);
+-              skb_set_tail_pointer(new_skb, new_skb->len);
+-              new_skb->truesize = SKB_TRUESIZE(new_skb->len);
+               if (aqc111_data->rx_checksum)
+                       aqc111_rx_checksum(new_skb, pkt_desc);
+-- 
+2.43.0
+
diff --git a/queue-5.4/wifi-ar5523-enable-proper-endpoint-verification.patch b/queue-5.4/wifi-ar5523-enable-proper-endpoint-verification.patch
new file mode 100644 (file)
index 0000000..0667a0a
--- /dev/null
@@ -0,0 +1,99 @@
+From 496d34eeb698f261f4489768f1a9b46c5559a84f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 8 Apr 2024 05:14:25 -0700
+Subject: wifi: ar5523: enable proper endpoint verification
+
+From: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
+
+[ Upstream commit e120b6388d7d88635d67dcae6483f39c37111850 ]
+
+Syzkaller reports [1] hitting a warning about an endpoint in use
+not having an expected type to it.
+
+Fix the issue by checking for the existence of all proper
+endpoints with their according types intact.
+
+Sadly, this patch has not been tested on real hardware.
+
+[1] Syzkaller report:
+------------[ cut here ]------------
+usb 1-1: BOGUS urb xfer, pipe 3 != type 1
+WARNING: CPU: 0 PID: 3643 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
+...
+Call Trace:
+ <TASK>
+ ar5523_cmd+0x41b/0x780 drivers/net/wireless/ath/ar5523/ar5523.c:275
+ ar5523_cmd_read drivers/net/wireless/ath/ar5523/ar5523.c:302 [inline]
+ ar5523_host_available drivers/net/wireless/ath/ar5523/ar5523.c:1376 [inline]
+ ar5523_probe+0x14b0/0x1d10 drivers/net/wireless/ath/ar5523/ar5523.c:1655
+ usb_probe_interface+0x30f/0x7f0 drivers/usb/core/driver.c:396
+ call_driver_probe drivers/base/dd.c:560 [inline]
+ really_probe+0x249/0xb90 drivers/base/dd.c:639
+ __driver_probe_device+0x1df/0x4d0 drivers/base/dd.c:778
+ driver_probe_device+0x4c/0x1a0 drivers/base/dd.c:808
+ __device_attach_driver+0x1d4/0x2e0 drivers/base/dd.c:936
+ bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:427
+ __device_attach+0x1e4/0x530 drivers/base/dd.c:1008
+ bus_probe_device+0x1e8/0x2a0 drivers/base/bus.c:487
+ device_add+0xbd9/0x1e90 drivers/base/core.c:3517
+ usb_set_configuration+0x101d/0x1900 drivers/usb/core/message.c:2170
+ usb_generic_driver_probe+0xbe/0x100 drivers/usb/core/generic.c:238
+ usb_probe_device+0xd8/0x2c0 drivers/usb/core/driver.c:293
+ call_driver_probe drivers/base/dd.c:560 [inline]
+ really_probe+0x249/0xb90 drivers/base/dd.c:639
+ __driver_probe_device+0x1df/0x4d0 drivers/base/dd.c:778
+ driver_probe_device+0x4c/0x1a0 drivers/base/dd.c:808
+ __device_attach_driver+0x1d4/0x2e0 drivers/base/dd.c:936
+ bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:427
+ __device_attach+0x1e4/0x530 drivers/base/dd.c:1008
+ bus_probe_device+0x1e8/0x2a0 drivers/base/bus.c:487
+ device_add+0xbd9/0x1e90 drivers/base/core.c:3517
+ usb_new_device.cold+0x685/0x10ad drivers/usb/core/hub.c:2573
+ hub_port_connect drivers/usb/core/hub.c:5353 [inline]
+ hub_port_connect_change drivers/usb/core/hub.c:5497 [inline]
+ port_event drivers/usb/core/hub.c:5653 [inline]
+ hub_event+0x26cb/0x45d0 drivers/usb/core/hub.c:5735
+ process_one_work+0x9bf/0x1710 kernel/workqueue.c:2289
+ worker_thread+0x669/0x1090 kernel/workqueue.c:2436
+ kthread+0x2e8/0x3a0 kernel/kthread.c:376
+ ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:306
+ </TASK>
+
+Reported-and-tested-by: syzbot+1bc2c2afd44f820a669f@syzkaller.appspotmail.com
+Fixes: b7d572e1871d ("ar5523: Add new driver")
+Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://msgid.link/20240408121425.29392-1-n.zhandarovich@fintech.ru
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ar5523/ar5523.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/drivers/net/wireless/ath/ar5523/ar5523.c b/drivers/net/wireless/ath/ar5523/ar5523.c
+index 5d3cf354f6cb5..5ffd6f2152920 100644
+--- a/drivers/net/wireless/ath/ar5523/ar5523.c
++++ b/drivers/net/wireless/ath/ar5523/ar5523.c
+@@ -1590,6 +1590,20 @@ static int ar5523_probe(struct usb_interface *intf,
+       struct ar5523 *ar;
+       int error = -ENOMEM;
++      static const u8 bulk_ep_addr[] = {
++              AR5523_CMD_TX_PIPE | USB_DIR_OUT,
++              AR5523_DATA_TX_PIPE | USB_DIR_OUT,
++              AR5523_CMD_RX_PIPE | USB_DIR_IN,
++              AR5523_DATA_RX_PIPE | USB_DIR_IN,
++              0};
++
++      if (!usb_check_bulk_endpoints(intf, bulk_ep_addr)) {
++              dev_err(&dev->dev,
++                      "Could not find all expected endpoints\n");
++              error = -ENODEV;
++              goto out;
++      }
++
+       /*
+        * Load firmware if the device requires it.  This will return
+        * -ENXIO on success and we'll get called back afer the usb
+-- 
+2.43.0
+
diff --git a/queue-5.4/wifi-ath10k-fix-an-error-code-problem-in-ath10k_dbg_.patch b/queue-5.4/wifi-ath10k-fix-an-error-code-problem-in-ath10k_dbg_.patch
new file mode 100644 (file)
index 0000000..059efeb
--- /dev/null
@@ -0,0 +1,43 @@
+From babf125c2985940ceffe9f415550904fe549e0cd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 22 Apr 2024 11:42:44 +0800
+Subject: wifi: ath10k: Fix an error code problem in
+ ath10k_dbg_sta_write_peer_debug_trigger()
+
+From: Su Hui <suhui@nfschina.com>
+
+[ Upstream commit c511a9c12674d246916bb16c479d496b76983193 ]
+
+Clang Static Checker (scan-build) warns:
+
+drivers/net/wireless/ath/ath10k/debugfs_sta.c:line 429, column 3
+Value stored to 'ret' is never read.
+
+Return 'ret' rather than 'count' when 'ret' stores an error code.
+
+Fixes: ee8b08a1be82 ("ath10k: add debugfs support to get per peer tids log via tracing")
+Signed-off-by: Su Hui <suhui@nfschina.com>
+Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://msgid.link/20240422034243.938962-1-suhui@nfschina.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath10k/debugfs_sta.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/ath/ath10k/debugfs_sta.c b/drivers/net/wireless/ath/ath10k/debugfs_sta.c
+index 42931a669b02f..17bc4255e2eac 100644
+--- a/drivers/net/wireless/ath/ath10k/debugfs_sta.c
++++ b/drivers/net/wireless/ath/ath10k/debugfs_sta.c
+@@ -438,7 +438,7 @@ ath10k_dbg_sta_write_peer_debug_trigger(struct file *file,
+       }
+ out:
+       mutex_unlock(&ar->conf_mutex);
+-      return count;
++      return ret ?: count;
+ }
+ static const struct file_operations fops_peer_debug_trigger = {
+-- 
+2.43.0
+
diff --git a/queue-5.4/wifi-ath10k-poll-service-ready-message-before-failin.patch b/queue-5.4/wifi-ath10k-poll-service-ready-message-before-failin.patch
new file mode 100644 (file)
index 0000000..08a3e69
--- /dev/null
@@ -0,0 +1,81 @@
+From a041e3bf4d03cbe2ac820bd891e22ab8af49222f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Mar 2024 07:15:14 +0200
+Subject: wifi: ath10k: poll service ready message before failing
+
+From: Baochen Qiang <quic_bqiang@quicinc.com>
+
+[ Upstream commit e57b7d62a1b2f496caf0beba81cec3c90fad80d5 ]
+
+Currently host relies on CE interrupts to get notified that
+the service ready message is ready. This results in timeout
+issue if the interrupt is not fired, due to some unknown
+reasons. See below logs:
+
+[76321.937866] ath10k_pci 0000:02:00.0: wmi service ready event not received
+...
+[76322.016738] ath10k_pci 0000:02:00.0: Could not init core: -110
+
+And finally it causes WLAN interface bring up failure.
+
+Change to give it one more chance here by polling CE rings,
+before failing directly.
+
+Tested-on: QCA6174 hw3.2 PCI WLAN.RM.4.4.1-00157-QCARMSWPZ-1
+
+Fixes: 5e3dd157d7e7 ("ath10k: mac80211 driver for Qualcomm Atheros 802.11ac CQA98xx devices")
+Reported-by: James Prestwood <prestwoj@gmail.com>
+Tested-By: James Prestwood <prestwoj@gmail.com> # on QCA6174 hw3.2
+Link: https://lore.kernel.org/linux-wireless/304ce305-fbe6-420e-ac2a-d61ae5e6ca1a@gmail.com/
+Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
+Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://msgid.link/20240227030409.89702-1-quic_bqiang@quicinc.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath10k/wmi.c | 26 +++++++++++++++++++++++---
+ 1 file changed, 23 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
+index 4adbe3ab9c870..81689dbab7f49 100644
+--- a/drivers/net/wireless/ath/ath10k/wmi.c
++++ b/drivers/net/wireless/ath/ath10k/wmi.c
+@@ -1720,12 +1720,32 @@ void ath10k_wmi_put_wmi_channel(struct wmi_channel *ch,
+ int ath10k_wmi_wait_for_service_ready(struct ath10k *ar)
+ {
+-      unsigned long time_left;
++      unsigned long time_left, i;
+       time_left = wait_for_completion_timeout(&ar->wmi.service_ready,
+                                               WMI_SERVICE_READY_TIMEOUT_HZ);
+-      if (!time_left)
+-              return -ETIMEDOUT;
++      if (!time_left) {
++              /* Sometimes the PCI HIF doesn't receive interrupt
++               * for the service ready message even if the buffer
++               * was completed. PCIe sniffer shows that it's
++               * because the corresponding CE ring doesn't fires
++               * it. Workaround here by polling CE rings once.
++               */
++              ath10k_warn(ar, "failed to receive service ready completion, polling..\n");
++
++              for (i = 0; i < CE_COUNT; i++)
++                      ath10k_hif_send_complete_check(ar, i, 1);
++
++              time_left = wait_for_completion_timeout(&ar->wmi.service_ready,
++                                                      WMI_SERVICE_READY_TIMEOUT_HZ);
++              if (!time_left) {
++                      ath10k_warn(ar, "polling timed out\n");
++                      return -ETIMEDOUT;
++              }
++
++              ath10k_warn(ar, "service ready completion received, continuing normally\n");
++      }
++
+       return 0;
+ }
+-- 
+2.43.0
+
diff --git a/queue-5.4/wifi-ath10k-populate-board-data-for-wcn3990.patch b/queue-5.4/wifi-ath10k-populate-board-data-for-wcn3990.patch
new file mode 100644 (file)
index 0000000..6d4e7c2
--- /dev/null
@@ -0,0 +1,65 @@
+From 907db098c35177ab1d9bb2e040e74c122e496f8a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 30 Jan 2024 08:47:06 +0200
+Subject: wifi: ath10k: populate board data for WCN3990
+
+From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+
+[ Upstream commit f1f1b5b055c9f27a2f90fd0f0521f5920e9b3c18 ]
+
+Specify board data size (and board.bin filename) for the WCN3990
+platform.
+
+Reported-by: Yongqin Liu <yongqin.liu@linaro.org>
+Fixes: 03a72288c546 ("ath10k: wmi: add hw params entry for wcn3990")
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://msgid.link/20240130-wcn3990-board-fw-v1-1-738f7c19a8c8@linaro.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath10k/core.c      | 3 +++
+ drivers/net/wireless/ath/ath10k/hw.h        | 1 +
+ drivers/net/wireless/ath/ath10k/targaddrs.h | 3 +++
+ 3 files changed, 7 insertions(+)
+
+diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
+index 09e77be6e3142..0b8d725338e25 100644
+--- a/drivers/net/wireless/ath/ath10k/core.c
++++ b/drivers/net/wireless/ath/ath10k/core.c
+@@ -579,6 +579,9 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
+               .max_spatial_stream = 4,
+               .fw = {
+                       .dir = WCN3990_HW_1_0_FW_DIR,
++                      .board = WCN3990_HW_1_0_BOARD_DATA_FILE,
++                      .board_size = WCN3990_BOARD_DATA_SZ,
++                      .board_ext_size = WCN3990_BOARD_EXT_DATA_SZ,
+               },
+               .sw_decrypt_mcast_mgmt = true,
+               .hw_ops = &wcn3990_ops,
+diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h
+index 705ab83cdff43..eb27aeeb94c8f 100644
+--- a/drivers/net/wireless/ath/ath10k/hw.h
++++ b/drivers/net/wireless/ath/ath10k/hw.h
+@@ -132,6 +132,7 @@ enum qca9377_chip_id_rev {
+ /* WCN3990 1.0 definitions */
+ #define WCN3990_HW_1_0_DEV_VERSION    ATH10K_HW_WCN3990
+ #define WCN3990_HW_1_0_FW_DIR         ATH10K_FW_DIR "/WCN3990/hw1.0"
++#define WCN3990_HW_1_0_BOARD_DATA_FILE "board.bin"
+ #define ATH10K_FW_FILE_BASE           "firmware"
+ #define ATH10K_FW_API_MAX             6
+diff --git a/drivers/net/wireless/ath/ath10k/targaddrs.h b/drivers/net/wireless/ath/ath10k/targaddrs.h
+index dff6c8ac9dba3..362508ac37fed 100644
+--- a/drivers/net/wireless/ath/ath10k/targaddrs.h
++++ b/drivers/net/wireless/ath/ath10k/targaddrs.h
+@@ -480,4 +480,7 @@ struct host_interest {
+ #define QCA4019_BOARD_DATA_SZ   12064
+ #define QCA4019_BOARD_EXT_DATA_SZ 0
++#define WCN3990_BOARD_DATA_SZ   26328
++#define WCN3990_BOARD_EXT_DATA_SZ 0
++
+ #endif /* __TARGADDRS_H__ */
+-- 
+2.43.0
+
diff --git a/queue-5.4/wifi-carl9170-add-a-proper-sanity-check-for-endpoint.patch b/queue-5.4/wifi-carl9170-add-a-proper-sanity-check-for-endpoint.patch
new file mode 100644 (file)
index 0000000..5d61a5e
--- /dev/null
@@ -0,0 +1,97 @@
+From 0898b9c6d55004a45a724d949e1d8fa525732b1f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 22 Apr 2024 11:33:55 -0700
+Subject: wifi: carl9170: add a proper sanity check for endpoints
+
+From: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
+
+[ Upstream commit b6dd09b3dac89b45d1ea3e3bd035a3859c0369a0 ]
+
+Syzkaller reports [1] hitting a warning which is caused by presence
+of a wrong endpoint type at the URB sumbitting stage. While there
+was a check for a specific 4th endpoint, since it can switch types
+between bulk and interrupt, other endpoints are trusted implicitly.
+Similar warning is triggered in a couple of other syzbot issues [2].
+
+Fix the issue by doing a comprehensive check of all endpoints
+taking into account difference between high- and full-speed
+configuration.
+
+[1] Syzkaller report:
+...
+WARNING: CPU: 0 PID: 4721 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
+...
+Call Trace:
+ <TASK>
+ carl9170_usb_send_rx_irq_urb+0x273/0x340 drivers/net/wireless/ath/carl9170/usb.c:504
+ carl9170_usb_init_device drivers/net/wireless/ath/carl9170/usb.c:939 [inline]
+ carl9170_usb_firmware_finish drivers/net/wireless/ath/carl9170/usb.c:999 [inline]
+ carl9170_usb_firmware_step2+0x175/0x240 drivers/net/wireless/ath/carl9170/usb.c:1028
+ request_firmware_work_func+0x130/0x240 drivers/base/firmware_loader/main.c:1107
+ process_one_work+0x9bf/0x1710 kernel/workqueue.c:2289
+ worker_thread+0x669/0x1090 kernel/workqueue.c:2436
+ kthread+0x2e8/0x3a0 kernel/kthread.c:376
+ ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
+ </TASK>
+
+[2] Related syzkaller crashes:
+Link: https://syzkaller.appspot.com/bug?extid=e394db78ae0b0032cb4d
+Link: https://syzkaller.appspot.com/bug?extid=9468df99cb63a4a4c4e1
+
+Reported-and-tested-by: syzbot+0ae4804973be759fa420@syzkaller.appspotmail.com
+Fixes: a84fab3cbfdc ("carl9170: 802.11 rx/tx processing and usb backend")
+Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
+Acked-By: Christian Lamparter <chunkeey@gmail.com>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://msgid.link/20240422183355.3785-1-n.zhandarovich@fintech.ru
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/carl9170/usb.c | 32 +++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
+
+diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c
+index 486957a04bd18..98fdfa84b0a9a 100644
+--- a/drivers/net/wireless/ath/carl9170/usb.c
++++ b/drivers/net/wireless/ath/carl9170/usb.c
+@@ -1069,6 +1069,38 @@ static int carl9170_usb_probe(struct usb_interface *intf,
+                       ar->usb_ep_cmd_is_bulk = true;
+       }
++      /* Verify that all expected endpoints are present */
++      if (ar->usb_ep_cmd_is_bulk) {
++              u8 bulk_ep_addr[] = {
++                      AR9170_USB_EP_RX | USB_DIR_IN,
++                      AR9170_USB_EP_TX | USB_DIR_OUT,
++                      AR9170_USB_EP_CMD | USB_DIR_OUT,
++                      0};
++              u8 int_ep_addr[] = {
++                      AR9170_USB_EP_IRQ | USB_DIR_IN,
++                      0};
++              if (!usb_check_bulk_endpoints(intf, bulk_ep_addr) ||
++                  !usb_check_int_endpoints(intf, int_ep_addr))
++                      err = -ENODEV;
++      } else {
++              u8 bulk_ep_addr[] = {
++                      AR9170_USB_EP_RX | USB_DIR_IN,
++                      AR9170_USB_EP_TX | USB_DIR_OUT,
++                      0};
++              u8 int_ep_addr[] = {
++                      AR9170_USB_EP_IRQ | USB_DIR_IN,
++                      AR9170_USB_EP_CMD | USB_DIR_OUT,
++                      0};
++              if (!usb_check_bulk_endpoints(intf, bulk_ep_addr) ||
++                  !usb_check_int_endpoints(intf, int_ep_addr))
++                      err = -ENODEV;
++      }
++
++      if (err) {
++              carl9170_free(ar);
++              return err;
++      }
++
+       usb_set_intfdata(intf, ar);
+       SET_IEEE80211_DEV(ar->hw, &intf->dev);
+-- 
+2.43.0
+
diff --git a/queue-5.4/wifi-cfg80211-fix-the-order-of-arguments-for-trace-e.patch b/queue-5.4/wifi-cfg80211-fix-the-order-of-arguments-for-trace-e.patch
new file mode 100644 (file)
index 0000000..2f349e0
--- /dev/null
@@ -0,0 +1,50 @@
+From 73ff6df9751809df416f3ee207cf5e200a9757ef Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 5 Apr 2024 18:24:30 +0300
+Subject: wifi: cfg80211: fix the order of arguments for trace events of the
+ tx_rx_evt class
+
+From: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
+
+[ Upstream commit 9ef369973cd2c97cce3388d2c0c7e3c056656e8a ]
+
+The declarations of the tx_rx_evt class and the rdev_set_antenna event
+use the wrong order of arguments in the TP_ARGS macro.
+
+Fix the order of arguments in the TP_ARGS macro.
+
+Found by Linux Verification Center (linuxtesting.org) with SVACE.
+
+Signed-off-by: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
+Link: https://msgid.link/20240405152431.270267-1-Igor.A.Artemiev@mcst.ru
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/wireless/trace.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/net/wireless/trace.h b/net/wireless/trace.h
+index 630b72355ebb5..90307fe4639b2 100644
+--- a/net/wireless/trace.h
++++ b/net/wireless/trace.h
+@@ -1630,7 +1630,7 @@ TRACE_EVENT(rdev_return_void_tx_rx,
+ DECLARE_EVENT_CLASS(tx_rx_evt,
+       TP_PROTO(struct wiphy *wiphy, u32 tx, u32 rx),
+-      TP_ARGS(wiphy, rx, tx),
++      TP_ARGS(wiphy, tx, rx),
+       TP_STRUCT__entry(
+               WIPHY_ENTRY
+               __field(u32, tx)
+@@ -1647,7 +1647,7 @@ DECLARE_EVENT_CLASS(tx_rx_evt,
+ DEFINE_EVENT(tx_rx_evt, rdev_set_antenna,
+       TP_PROTO(struct wiphy *wiphy, u32 tx, u32 rx),
+-      TP_ARGS(wiphy, rx, tx)
++      TP_ARGS(wiphy, tx, rx)
+ );
+ DECLARE_EVENT_CLASS(wiphy_netdev_id_evt,
+-- 
+2.43.0
+
diff --git a/queue-5.4/wifi-mwl8k-initialize-cmd-addr-properly.patch b/queue-5.4/wifi-mwl8k-initialize-cmd-addr-properly.patch
new file mode 100644 (file)
index 0000000..d759885
--- /dev/null
@@ -0,0 +1,38 @@
+From 1942ddb7dce12aa7738d936b17200860f96f6430 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 4 May 2024 14:38:15 +0300
+Subject: wifi: mwl8k: initialize cmd->addr[] properly
+
+From: Dan Carpenter <dan.carpenter@linaro.org>
+
+[ Upstream commit 1d60eabb82694e58543e2b6366dae3e7465892a5 ]
+
+This loop is supposed to copy the mac address to cmd->addr but the
+i++ increment is missing so it copies everything to cmd->addr[0] and
+only the last address is recorded.
+
+Fixes: 22bedad3ce11 ("net: convert multicast list to list_head")
+Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://msgid.link/b788be9a-15f5-4cca-a3fe-79df4c8ce7b2@moroto.mountain
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/marvell/mwl8k.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
+index 14ac2384218df..abd5c8670bc44 100644
+--- a/drivers/net/wireless/marvell/mwl8k.c
++++ b/drivers/net/wireless/marvell/mwl8k.c
+@@ -2714,7 +2714,7 @@ __mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti,
+               cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_MULTICAST);
+               cmd->numaddr = cpu_to_le16(mc_count);
+               netdev_hw_addr_list_for_each(ha, mc_list) {
+-                      memcpy(cmd->addr[i], ha->addr, ETH_ALEN);
++                      memcpy(cmd->addr[i++], ha->addr, ETH_ALEN);
+               }
+       }
+-- 
+2.43.0
+
diff --git a/queue-5.4/x86-boot-ignore-relocations-in-.notes-sections-in-wa.patch b/queue-5.4/x86-boot-ignore-relocations-in-.notes-sections-in-wa.patch
new file mode 100644 (file)
index 0000000..ea553ce
--- /dev/null
@@ -0,0 +1,54 @@
+From 336febfefd6b561f03881221e73f32bf3e41aa49 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 Mar 2024 23:05:47 +0800
+Subject: x86/boot: Ignore relocations in .notes sections in walk_relocs() too
+
+From: Guixiong Wei <weiguixiong@bytedance.com>
+
+[ Upstream commit 76e9762d66373354b45c33b60e9a53ef2a3c5ff2 ]
+
+Commit:
+
+  aaa8736370db ("x86, relocs: Ignore relocations in .notes section")
+
+... only started ignoring the .notes sections in print_absolute_relocs(),
+but the same logic should also by applied in walk_relocs() to avoid
+such relocations.
+
+[ mingo: Fixed various typos in the changelog, removed extra curly braces from the code. ]
+
+Fixes: aaa8736370db ("x86, relocs: Ignore relocations in .notes section")
+Fixes: 5ead97c84fa7 ("xen: Core Xen implementation")
+Fixes: da1a679cde9b ("Add /sys/kernel/notes")
+Signed-off-by: Guixiong Wei <weiguixiong@bytedance.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Reviewed-by: Kees Cook <keescook@chromium.org>
+Link: https://lore.kernel.org/r/20240317150547.24910-1-weiguixiong@bytedance.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/tools/relocs.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
+index 0043fd374a62f..f9ec998b7e946 100644
+--- a/arch/x86/tools/relocs.c
++++ b/arch/x86/tools/relocs.c
+@@ -689,6 +689,15 @@ static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel,
+               if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) {
+                       continue;
+               }
++
++              /*
++               * Do not perform relocations in .notes sections; any
++               * values there are meant for pre-boot consumption (e.g.
++               * startup_xen).
++               */
++              if (sec_applies->shdr.sh_type == SHT_NOTE)
++                      continue;
++
+               sh_symtab = sec_symtab->symtab;
+               sym_strtab = sec_symtab->link->strtab;
+               for (j = 0; j < sec->shdr.sh_size/sizeof(Elf_Rel); j++) {
+-- 
+2.43.0
+
diff --git a/queue-5.4/x86-insn-fix-push-instruction-in-x86-instruction-dec.patch b/queue-5.4/x86-insn-fix-push-instruction-in-x86-instruction-dec.patch
new file mode 100644 (file)
index 0000000..5c262da
--- /dev/null
@@ -0,0 +1,98 @@
+From 50c63fa8e65c3ab42b132f52aa7ad8bea048b82d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 2 May 2024 13:58:45 +0300
+Subject: x86/insn: Fix PUSH instruction in x86 instruction decoder opcode map
+
+From: Adrian Hunter <adrian.hunter@intel.com>
+
+[ Upstream commit 59162e0c11d7257cde15f907d19fefe26da66692 ]
+
+The x86 instruction decoder is used not only for decoding kernel
+instructions. It is also used by perf uprobes (user space probes) and by
+perf tools Intel Processor Trace decoding. Consequently, it needs to
+support instructions executed by user space also.
+
+Opcode 0x68 PUSH instruction is currently defined as 64-bit operand size
+only i.e. (d64). That was based on Intel SDM Opcode Map. However that is
+contradicted by the Instruction Set Reference section for PUSH in the
+same manual.
+
+Remove 64-bit operand size only annotation from opcode 0x68 PUSH
+instruction.
+
+Example:
+
+  $ cat pushw.s
+  .global  _start
+  .text
+  _start:
+          pushw   $0x1234
+          mov     $0x1,%eax   # system call number (sys_exit)
+          int     $0x80
+  $ as -o pushw.o pushw.s
+  $ ld -s -o pushw pushw.o
+  $ objdump -d pushw | tail -4
+  0000000000401000 <.text>:
+    401000:       66 68 34 12             pushw  $0x1234
+    401004:       b8 01 00 00 00          mov    $0x1,%eax
+    401009:       cd 80                   int    $0x80
+  $ perf record -e intel_pt//u ./pushw
+  [ perf record: Woken up 1 times to write data ]
+  [ perf record: Captured and wrote 0.014 MB perf.data ]
+
+ Before:
+
+  $ perf script --insn-trace=disasm
+  Warning:
+  1 instruction trace errors
+           pushw   10349 [000] 10586.869237014:            401000 [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           pushw $0x1234
+           pushw   10349 [000] 10586.869237014:            401006 [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           addb %al, (%rax)
+           pushw   10349 [000] 10586.869237014:            401008 [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           addb %cl, %ch
+           pushw   10349 [000] 10586.869237014:            40100a [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           addb $0x2e, (%rax)
+   instruction trace error type 1 time 10586.869237224 cpu 0 pid 10349 tid 10349 ip 0x40100d code 6: Trace doesn't match instruction
+
+ After:
+
+  $ perf script --insn-trace=disasm
+             pushw   10349 [000] 10586.869237014:            401000 [unknown] (./pushw)           pushw $0x1234
+             pushw   10349 [000] 10586.869237014:            401004 [unknown] (./pushw)           movl $1, %eax
+
+Fixes: eb13296cfaf6 ("x86: Instruction decoder API")
+Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Link: https://lore.kernel.org/r/20240502105853.5338-3-adrian.hunter@intel.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/lib/x86-opcode-map.txt       | 2 +-
+ tools/arch/x86/lib/x86-opcode-map.txt | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/lib/x86-opcode-map.txt b/arch/x86/lib/x86-opcode-map.txt
+index 5cb9f009f2be3..996a3a250026b 100644
+--- a/arch/x86/lib/x86-opcode-map.txt
++++ b/arch/x86/lib/x86-opcode-map.txt
+@@ -148,7 +148,7 @@ AVXcode:
+ 65: SEG=GS (Prefix)
+ 66: Operand-Size (Prefix)
+ 67: Address-Size (Prefix)
+-68: PUSH Iz (d64)
++68: PUSH Iz
+ 69: IMUL Gv,Ev,Iz
+ 6a: PUSH Ib (d64)
+ 6b: IMUL Gv,Ev,Ib
+diff --git a/tools/arch/x86/lib/x86-opcode-map.txt b/tools/arch/x86/lib/x86-opcode-map.txt
+index 5cb9f009f2be3..996a3a250026b 100644
+--- a/tools/arch/x86/lib/x86-opcode-map.txt
++++ b/tools/arch/x86/lib/x86-opcode-map.txt
+@@ -148,7 +148,7 @@ AVXcode:
+ 65: SEG=GS (Prefix)
+ 66: Operand-Size (Prefix)
+ 67: Address-Size (Prefix)
+-68: PUSH Iz (d64)
++68: PUSH Iz
+ 69: IMUL Gv,Ev,Iz
+ 6a: PUSH Ib (d64)
+ 6b: IMUL Gv,Ev,Ib
+-- 
+2.43.0
+
diff --git a/queue-5.4/x86-purgatory-switch-to-the-position-independent-sma.patch b/queue-5.4/x86-purgatory-switch-to-the-position-independent-sma.patch
new file mode 100644 (file)
index 0000000..3318f15
--- /dev/null
@@ -0,0 +1,81 @@
+From b31690aa25587bc249420e08bf2c9c1f49710b04 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 18 Apr 2024 22:17:06 +0200
+Subject: x86/purgatory: Switch to the position-independent small code model
+
+From: Ard Biesheuvel <ardb@kernel.org>
+
+[ Upstream commit cba786af84a0f9716204e09f518ce3b7ada8555e ]
+
+On x86, the ordinary, position dependent small and kernel code models
+only support placement of the executable in 32-bit addressable memory,
+due to the use of 32-bit signed immediates to generate references to
+global variables. For the kernel, this implies that all global variables
+must reside in the top 2 GiB of the kernel virtual address space, where
+the implicit address bits 63:32 are equal to sign bit 31.
+
+This means the kernel code model is not suitable for other bare metal
+executables such as the kexec purgatory, which can be placed arbitrarily
+in the physical address space, where its address may no longer be
+representable as a sign extended 32-bit quantity. For this reason,
+commit
+
+  e16c2983fba0 ("x86/purgatory: Change compiler flags from -mcmodel=kernel to -mcmodel=large to fix kexec relocation errors")
+
+switched to the large code model, which uses 64-bit immediates for all
+symbol references, including function calls, in order to avoid relying
+on any assumptions regarding proximity of symbols in the final
+executable.
+
+The large code model is rarely used, clunky and the least likely to
+operate in a similar fashion when comparing GCC and Clang, so it is best
+avoided. This is especially true now that Clang 18 has started to emit
+executable code in two separate sections (.text and .ltext), which
+triggers an issue in the kexec loading code at runtime.
+
+The SUSE bugzilla fixes tag points to gcc 13 having issues with the
+large model too and that perhaps the large model should simply not be
+used at all.
+
+Instead, use the position independent small code model, which makes no
+assumptions about placement but only about proximity, where all
+referenced symbols must be within -/+ 2 GiB, i.e., in range for a
+RIP-relative reference. Use hidden visibility to suppress the use of a
+GOT, which carries absolute addresses that are not covered by static ELF
+relocations, and is therefore incompatible with the kexec loader's
+relocation logic.
+
+  [ bp: Massage commit message. ]
+
+Fixes: e16c2983fba0 ("x86/purgatory: Change compiler flags from -mcmodel=kernel to -mcmodel=large to fix kexec relocation errors")
+Fixes: https://bugzilla.suse.com/show_bug.cgi?id=1211853
+Closes: https://github.com/ClangBuiltLinux/linux/issues/2016
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
+Reviewed-by: Nathan Chancellor <nathan@kernel.org>
+Reviewed-by: Fangrui Song <maskray@google.com>
+Acked-by: Nick Desaulniers <ndesaulniers@google.com>
+Tested-by: Nathan Chancellor <nathan@kernel.org>
+Link: https://lore.kernel.org/all/20240417-x86-fix-kexec-with-llvm-18-v1-0-5383121e8fb7@kernel.org/
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/purgatory/Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile
+index 8309e230aeed1..662b23648a282 100644
+--- a/arch/x86/purgatory/Makefile
++++ b/arch/x86/purgatory/Makefile
+@@ -32,7 +32,8 @@ KCOV_INSTRUMENT := n
+ # make up the standalone purgatory.ro
+ PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
+-PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss -g0
++PURGATORY_CFLAGS := -mcmodel=small -ffreestanding -fno-zero-initialized-in-bss -g0
++PURGATORY_CFLAGS += -fpic -fvisibility=hidden
+ PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
+ # Default KBUILD_CFLAGS can have -pg option set when FTRACE is enabled. That
+-- 
+2.43.0
+