]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Thu, 1 Feb 2024 16:55:38 +0000 (11:55 -0500)
committerSasha Levin <sashal@kernel.org>
Thu, 1 Feb 2024 16:55:38 +0000 (11:55 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
83 files changed:
queue-4.19/acpi-extlog-fix-null-pointer-dereference-check.patch [new file with mode: 0644]
queue-4.19/acpi-video-add-quirk-for-the-colorful-x15-at-23-lapt.patch [new file with mode: 0644]
queue-4.19/afs-fix-the-usage-of-read_seqbegin_or_lock-in-afs_fi.patch [new file with mode: 0644]
queue-4.19/alsa-hda-intel-add-hda_arl-pci-id-support.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx-use-flash-0-0-pattern.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx1-fix-sram-node.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx23-28-fix-the-dma-controller-node-name.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx23-sansa-use-preferred-i2c-gpios-properti.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx25-27-eukrea-fix-rtc-node-name.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx27-apf27dev-fix-led-name.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx27-fix-sram-node.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx7s-fix-lcdif-compatible.patch [new file with mode: 0644]
queue-4.19/arm-dts-imx7s-fix-nand-controller-size-cells.patch [new file with mode: 0644]
queue-4.19/arm-dts-rockchip-fix-rk3036-hdmi-ports-node.patch [new file with mode: 0644]
queue-4.19/asoc-doc-fix-undefined-snd_soc_dapm_nopm-argument.patch [new file with mode: 0644]
queue-4.19/audit-send-netlink-ack-before-setting-connection-in-.patch [new file with mode: 0644]
queue-4.19/blk-mq-fix-io-hang-from-sbitmap-wakeup-race.patch [new file with mode: 0644]
queue-4.19/bonding-return-enomem-instead-of-bug-in-alb_upper_de.patch [new file with mode: 0644]
queue-4.19/bpf-add-map-and-need_defer-parameters-to-.map_fd_put.patch [new file with mode: 0644]
queue-4.19/ceph-fix-deadlock-or-deadcode-of-misusing-dget.patch [new file with mode: 0644]
queue-4.19/clk-hi3620-fix-memory-leak-in-hi3620_mmc_clk_init.patch [new file with mode: 0644]
queue-4.19/clk-mmp-pxa168-fix-memory-leak-in-pxa168_clk_init.patch [new file with mode: 0644]
queue-4.19/crypto-stm32-crc32-fix-parsing-list-of-devices.patch [new file with mode: 0644]
queue-4.19/drm-amd-display-make-flip_timestamp_in_us-a-64-bit-v.patch [new file with mode: 0644]
queue-4.19/drm-amdgpu-drop-fence-check-in-to_amdgpu_amdkfd_fenc.patch [new file with mode: 0644]
queue-4.19/drm-amdgpu-let-kfd-sync-with-vm-fences.patch [new file with mode: 0644]
queue-4.19/drm-amdgpu-release-adev-pm.fw-before-return-in-amdgp.patch [new file with mode: 0644]
queue-4.19/drm-drm_file-fix-use-of-uninitialized-variable.patch [new file with mode: 0644]
queue-4.19/drm-exynos-call-drm_atomic_helper_shutdown-at-shutdo.patch [new file with mode: 0644]
queue-4.19/drm-framebuffer-fix-use-of-uninitialized-variable.patch [new file with mode: 0644]
queue-4.19/drm-mipi-dsi-fix-detach-call-without-attach.patch [new file with mode: 0644]
queue-4.19/drm-msm-dpu-ratelimit-framedone-timeout-msgs.patch [new file with mode: 0644]
queue-4.19/ext4-avoid-online-resizing-failures-due-to-oversized.patch [new file with mode: 0644]
queue-4.19/ext4-fix-inconsistent-between-segment-fstrim-and-ful.patch [new file with mode: 0644]
queue-4.19/ext4-remove-unnecessary-check-from-alloc_flex_gd.patch [new file with mode: 0644]
queue-4.19/ext4-unify-the-type-of-flexbg_size-to-unsigned-int.patch [new file with mode: 0644]
queue-4.19/f2fs-fix-to-check-return-value-of-f2fs_reserve_new_b.patch [new file with mode: 0644]
queue-4.19/fast_dput-handle-underflows-gracefully.patch [new file with mode: 0644]
queue-4.19/fs-jfs-ubsan-array-index-out-of-bounds-in-dbadjtree.patch [new file with mode: 0644]
queue-4.19/hexagon-make-pfn-accessors-statics-inlines.patch [new file with mode: 0644]
queue-4.19/hwmon-pc87360-bounds-check-data-innr-usage.patch [new file with mode: 0644]
queue-4.19/ib-ipoib-fix-mcast-list-locking.patch [new file with mode: 0644]
queue-4.19/jfs-fix-array-index-out-of-bounds-in-dbadjtree.patch [new file with mode: 0644]
queue-4.19/jfs-fix-array-index-out-of-bounds-in-dinewext.patch [new file with mode: 0644]
queue-4.19/jfs-fix-slab-out-of-bounds-read-in-dtsearch.patch [new file with mode: 0644]
queue-4.19/jfs-fix-uaf-in-jfs_evict_inode.patch [new file with mode: 0644]
queue-4.19/kvm-s390-fix-setting-of-fpc-register.patch [new file with mode: 0644]
queue-4.19/leds-trigger-panic-don-t-register-panic-notifier-if-.patch [new file with mode: 0644]
queue-4.19/libsubcmd-fix-memory-leak-in-uniq.patch [new file with mode: 0644]
queue-4.19/md-whenassemble-the-array-consult-the-superblock-of-.patch [new file with mode: 0644]
queue-4.19/media-ddbridge-fix-an-error-code-problem-in-ddb_prob.patch [new file with mode: 0644]
queue-4.19/media-rockchip-rga-fix-swizzling-for-rgb-formats.patch [new file with mode: 0644]
queue-4.19/media-stk1160-fixed-high-volume-of-stk1160_dbg-messa.patch [new file with mode: 0644]
queue-4.19/mfd-ti_am335x_tscadc-fix-ti-soc-dependencies.patch [new file with mode: 0644]
queue-4.19/misc-lis3lv02d_i2c-add-missing-setting-of-the-reg_ct.patch [new file with mode: 0644]
queue-4.19/pci-add-intel_hda_arl-to-pci_ids.h.patch [new file with mode: 0644]
queue-4.19/pci-add-no-pm-reset-quirk-for-nvidia-spectrum-device.patch [new file with mode: 0644]
queue-4.19/pci-only-override-amd-usb-controller-if-required.patch [new file with mode: 0644]
queue-4.19/pnp-acpi-fix-fortify-warning.patch [new file with mode: 0644]
queue-4.19/powerpc-fix-build-error-due-to-is_valid_bugaddr.patch [new file with mode: 0644]
queue-4.19/powerpc-lib-validate-size-for-vector-operations.patch [new file with mode: 0644]
queue-4.19/powerpc-mm-fix-build-failures-due-to-arch_reserved_k.patch [new file with mode: 0644]
queue-4.19/powerpc-mm-fix-null-pointer-dereference-in-pgtable_c.patch [new file with mode: 0644]
queue-4.19/pstore-ram-fix-crash-when-setting-number-of-cpus-to-.patch [new file with mode: 0644]
queue-4.19/rdma-ipoib-fix-error-code-return-in-ipoib_mcast_join.patch [new file with mode: 0644]
queue-4.19/rxrpc_find_service_conn_rcu-fix-the-usage-of-read_se.patch [new file with mode: 0644]
queue-4.19/s390-ptrace-handle-setting-of-fpc-register-correctly.patch [new file with mode: 0644]
queue-4.19/scsi-libfc-don-t-schedule-abort-twice.patch [new file with mode: 0644]
queue-4.19/scsi-libfc-fix-up-timeout-error-in-fc_fcp_rec_error.patch [new file with mode: 0644]
queue-4.19/scsi-lpfc-fix-possible-file-string-name-overflow-whe.patch [new file with mode: 0644]
queue-4.19/series
queue-4.19/sunrpc-fix-a-suspicious-rcu-usage-warning.patch [new file with mode: 0644]
queue-4.19/ubsan-array-index-out-of-bounds-in-dtsplitroot.patch [new file with mode: 0644]
queue-4.19/um-don-t-use-vfprintf-for-os_info.patch [new file with mode: 0644]
queue-4.19/um-fix-naming-clash-between-uml-and-scheduler.patch [new file with mode: 0644]
queue-4.19/um-net-fix-return-type-of-uml_net_start_xmit.patch [new file with mode: 0644]
queue-4.19/usb-hub-replace-hardcoded-quirk-value-with-bit-macro.patch [new file with mode: 0644]
queue-4.19/virtio_net-fix-d-directive-writing-between-1-and-11-.patch [new file with mode: 0644]
queue-4.19/wifi-ath9k-fix-potential-array-index-out-of-bounds-r.patch [new file with mode: 0644]
queue-4.19/wifi-cfg80211-fix-rcu-dereference-in-__cfg80211_bss_.patch [new file with mode: 0644]
queue-4.19/wifi-cfg80211-free-beacon_ies-when-overridden-from-h.patch [new file with mode: 0644]
queue-4.19/wifi-rtl8xxxu-add-additional-usb-ids-for-rtl8192eu-d.patch [new file with mode: 0644]
queue-4.19/wifi-rtlwifi-rtl8723-be-ae-using-calculate_bit_shift.patch [new file with mode: 0644]

diff --git a/queue-4.19/acpi-extlog-fix-null-pointer-dereference-check.patch b/queue-4.19/acpi-extlog-fix-null-pointer-dereference-check.patch
new file mode 100644 (file)
index 0000000..2705d7d
--- /dev/null
@@ -0,0 +1,59 @@
+From 4524bbe2c09755cda9a4e1f80bf0aa08b5c32d97 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Dec 2023 13:00:37 -0500
+Subject: ACPI: extlog: fix NULL pointer dereference check
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Prarit Bhargava <prarit@redhat.com>
+
+[ Upstream commit 72d9b9747e78979510e9aafdd32eb99c7aa30dd1 ]
+
+The gcc plugin -fanalyzer [1] tries to detect various
+patterns of incorrect behaviour.  The tool reports:
+
+drivers/acpi/acpi_extlog.c: In function ‘extlog_exit’:
+drivers/acpi/acpi_extlog.c:307:12: warning: check of ‘extlog_l1_addr’ for NULL after already dereferencing it [-Wanalyzer-deref-before-check]
+    |
+    |  306 |         ((struct extlog_l1_head *)extlog_l1_addr)->flags &= ~FLAG_OS_OPTIN;
+    |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
+    |      |                                                  |
+    |      |                                                  (1) pointer ‘extlog_l1_addr’ is dereferenced here
+    |  307 |         if (extlog_l1_addr)
+    |      |            ~
+    |      |            |
+    |      |            (2) pointer ‘extlog_l1_addr’ is checked for NULL here but it was already dereferenced at (1)
+    |
+
+Fix the NULL pointer dereference check in extlog_exit().
+
+Link: https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html # [1]
+
+Signed-off-by: Prarit Bhargava <prarit@redhat.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/acpi_extlog.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/acpi/acpi_extlog.c b/drivers/acpi/acpi_extlog.c
+index e05309bc41cc..e148b0a28ec9 100644
+--- a/drivers/acpi/acpi_extlog.c
++++ b/drivers/acpi/acpi_extlog.c
+@@ -317,9 +317,10 @@ static void __exit extlog_exit(void)
+ {
+       edac_set_report_status(old_edac_report_status);
+       mce_unregister_decode_chain(&extlog_mce_dec);
+-      ((struct extlog_l1_head *)extlog_l1_addr)->flags &= ~FLAG_OS_OPTIN;
+-      if (extlog_l1_addr)
++      if (extlog_l1_addr) {
++              ((struct extlog_l1_head *)extlog_l1_addr)->flags &= ~FLAG_OS_OPTIN;
+               acpi_os_unmap_iomem(extlog_l1_addr, l1_size);
++      }
+       if (elog_addr)
+               acpi_os_unmap_iomem(elog_addr, elog_size);
+       release_mem_region(elog_base, elog_size);
+-- 
+2.43.0
+
diff --git a/queue-4.19/acpi-video-add-quirk-for-the-colorful-x15-at-23-lapt.patch b/queue-4.19/acpi-video-add-quirk-for-the-colorful-x15-at-23-lapt.patch
new file mode 100644 (file)
index 0000000..6ba8b6b
--- /dev/null
@@ -0,0 +1,51 @@
+From ea7a020f08bdb865640c84209d7c49385e2dd8a0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 26 Nov 2023 21:59:13 +0800
+Subject: ACPI: video: Add quirk for the Colorful X15 AT 23 Laptop
+
+From: Yuluo Qiu <qyl27@outlook.com>
+
+[ Upstream commit 143176a46bdd3bfbe9ba2462bf94458e80d65ebf ]
+
+The Colorful X15 AT 23 ACPI video-bus device report spurious
+ACPI_VIDEO_NOTIFY_CYCLE events resulting in spurious KEY_SWITCHVIDEOMODE
+events being reported to userspace (and causing trouble there) when
+an external screen plugged in.
+
+Add a quirk setting the report_key_events mask to
+REPORT_BRIGHTNESS_KEY_EVENTS so that the ACPI_VIDEO_NOTIFY_CYCLE
+events will be ignored, while still reporting brightness up/down
+hotkey-presses to userspace normally.
+
+Signed-off-by: Yuluo Qiu <qyl27@outlook.com>
+Co-developed-by: Celeste Liu <CoelacanthusHex@gmail.com>
+Signed-off-by: Celeste Liu <CoelacanthusHex@gmail.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/acpi/acpi_video.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
+index c22297cce288..a3f8368fe231 100644
+--- a/drivers/acpi/acpi_video.c
++++ b/drivers/acpi/acpi_video.c
+@@ -581,6 +581,15 @@ static const struct dmi_system_id video_dmi_table[] = {
+               DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 3350"),
+               },
+       },
++      {
++       .callback = video_set_report_key_events,
++       .driver_data = (void *)((uintptr_t)REPORT_BRIGHTNESS_KEY_EVENTS),
++       .ident = "COLORFUL X15 AT 23",
++       .matches = {
++              DMI_MATCH(DMI_SYS_VENDOR, "COLORFUL"),
++              DMI_MATCH(DMI_PRODUCT_NAME, "X15 AT 23"),
++              },
++      },
+       /*
+        * Some machines change the brightness themselves when a brightness
+        * hotkey gets pressed, despite us telling them not to. In this case
+-- 
+2.43.0
+
diff --git a/queue-4.19/afs-fix-the-usage-of-read_seqbegin_or_lock-in-afs_fi.patch b/queue-4.19/afs-fix-the-usage-of-read_seqbegin_or_lock-in-afs_fi.patch
new file mode 100644 (file)
index 0000000..31d91ec
--- /dev/null
@@ -0,0 +1,89 @@
+From 3c1275fa5e8e6597702659adc9f54e6fe36c8bfd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Nov 2023 12:56:14 +0100
+Subject: afs: fix the usage of read_seqbegin_or_lock() in afs_find_server*()
+
+From: Oleg Nesterov <oleg@redhat.com>
+
+[ Upstream commit 1702e0654ca9a7bcd7c7619c8a5004db58945b71 ]
+
+David Howells says:
+
+ (5) afs_find_server().
+
+     There could be a lot of servers in the list and each server can have
+     multiple addresses, so I think this would be better with an exclusive
+     second pass.
+
+     The server list isn't likely to change all that often, but when it does
+     change, there's a good chance several servers are going to be
+     added/removed one after the other.  Further, this is only going to be
+     used for incoming cache management/callback requests from the server,
+     which hopefully aren't going to happen too often - but it is remotely
+     drivable.
+
+ (6) afs_find_server_by_uuid().
+
+     Similarly to (5), there could be a lot of servers to search through, but
+     they are in a tree not a flat list, so it should be faster to process.
+     Again, it's not likely to change that often and, again, when it does
+     change it's likely to involve multiple changes.  This can be driven
+     remotely by an incoming cache management request but is mostly going to
+     be driven by setting up or reconfiguring a volume's server list -
+     something that also isn't likely to happen often.
+
+Make the "seq" counter odd on the 2nd pass, otherwise read_seqbegin_or_lock()
+never takes the lock.
+
+Signed-off-by: Oleg Nesterov <oleg@redhat.com>
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: Marc Dionne <marc.dionne@auristor.com>
+cc: linux-afs@lists.infradead.org
+Link: https://lore.kernel.org/r/20231130115614.GA21581@redhat.com/
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/afs/server.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/fs/afs/server.c b/fs/afs/server.c
+index 2c7f6211c360..b12caa1acf53 100644
+--- a/fs/afs/server.c
++++ b/fs/afs/server.c
+@@ -37,7 +37,7 @@ struct afs_server *afs_find_server(struct afs_net *net,
+       const struct afs_addr_list *alist;
+       struct afs_server *server = NULL;
+       unsigned int i;
+-      int seq = 0, diff;
++      int seq = 1, diff;
+       rcu_read_lock();
+@@ -45,6 +45,7 @@ struct afs_server *afs_find_server(struct afs_net *net,
+               if (server)
+                       afs_put_server(net, server);
+               server = NULL;
++              seq++; /* 2 on the 1st/lockless path, otherwise odd */
+               read_seqbegin_or_lock(&net->fs_addr_lock, &seq);
+               if (srx->transport.family == AF_INET6) {
+@@ -100,7 +101,7 @@ struct afs_server *afs_find_server_by_uuid(struct afs_net *net, const uuid_t *uu
+ {
+       struct afs_server *server = NULL;
+       struct rb_node *p;
+-      int diff, seq = 0;
++      int diff, seq = 1;
+       _enter("%pU", uuid);
+@@ -112,7 +113,7 @@ struct afs_server *afs_find_server_by_uuid(struct afs_net *net, const uuid_t *uu
+               if (server)
+                       afs_put_server(net, server);
+               server = NULL;
+-
++              seq++; /* 2 on the 1st/lockless path, otherwise odd */
+               read_seqbegin_or_lock(&net->fs_lock, &seq);
+               p = net->fs_servers.rb_node;
+-- 
+2.43.0
+
diff --git a/queue-4.19/alsa-hda-intel-add-hda_arl-pci-id-support.patch b/queue-4.19/alsa-hda-intel-add-hda_arl-pci-id-support.patch
new file mode 100644 (file)
index 0000000..46f8ff1
--- /dev/null
@@ -0,0 +1,41 @@
+From 77d982eddae73888555ef8ae0d23586121497374 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Dec 2023 15:27:07 -0600
+Subject: ALSA: hda: Intel: add HDA_ARL PCI ID support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+
+[ Upstream commit a31014ebad617868c246d3985ff80d891f03711e ]
+
+Yet another PCI ID.
+
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
+Acked-by: Mark Brown <broonie@kernel.org>
+Link: https://lore.kernel.org/r/20231204212710.185976-3-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/pci/hda/hda_intel.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
+index e66d8729c72f..94a97832cf0f 100644
+--- a/sound/pci/hda/hda_intel.c
++++ b/sound/pci/hda/hda_intel.c
+@@ -2615,6 +2615,8 @@ static const struct pci_device_id azx_ids[] = {
+       /* Icelake */
+       { PCI_DEVICE(0x8086, 0x34c8),
+         .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE},
++      /* Arrow Lake */
++      { PCI_DEVICE_DATA(INTEL, HDA_ARL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },
+       /* Broxton-P(Apollolake) */
+       { PCI_DEVICE(0x8086, 0x5a98),
+         .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON },
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx-use-flash-0-0-pattern.patch b/queue-4.19/arm-dts-imx-use-flash-0-0-pattern.patch
new file mode 100644 (file)
index 0000000..62bb429
--- /dev/null
@@ -0,0 +1,81 @@
+From b07bcb3ad1f08bd2f90044930e571d75d2c42091 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Dec 2023 09:36:05 -0300
+Subject: ARM: dts: imx: Use flash@0,0 pattern
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit 1e1d7cc478fb16816de09740e3c323c0c188d58f ]
+
+Per mtd-physmap.yaml, 'nor@0,0' is not a valid node pattern.
+
+Change it to 'flash@0,0' to fix the following dt-schema warning:
+
+imx1-ads.dtb: nor@0,0: $nodename:0: 'nor@0,0' does not match '^(flash|.*sram|nand)(@.*)?$'
+       from schema $id: http://devicetree.org/schemas/mtd/mtd-physmap.yaml#
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx1-ads.dts                  | 2 +-
+ arch/arm/boot/dts/imx1-apf9328.dts              | 2 +-
+ arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi    | 2 +-
+ arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx1-ads.dts b/arch/arm/boot/dts/imx1-ads.dts
+index 119b19ba53b6..26af4e05abec 100644
+--- a/arch/arm/boot/dts/imx1-ads.dts
++++ b/arch/arm/boot/dts/imx1-ads.dts
+@@ -71,7 +71,7 @@
+       pinctrl-0 = <&pinctrl_weim>;
+       status = "okay";
+-      nor: nor@0,0 {
++      nor: flash@0,0 {
+               compatible = "cfi-flash";
+               reg = <0 0x00000000 0x02000000>;
+               bank-width = <4>;
+diff --git a/arch/arm/boot/dts/imx1-apf9328.dts b/arch/arm/boot/dts/imx1-apf9328.dts
+index ee4b1b106b1a..f5015f5e808a 100644
+--- a/arch/arm/boot/dts/imx1-apf9328.dts
++++ b/arch/arm/boot/dts/imx1-apf9328.dts
+@@ -51,7 +51,7 @@
+       pinctrl-0 = <&pinctrl_weim>;
+       status = "okay";
+-      nor: nor@0,0 {
++      nor: flash@0,0 {
+               compatible = "cfi-flash";
+               reg = <0 0x00000000 0x02000000>;
+               bank-width = <2>;
+diff --git a/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi b/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi
+index 56c790705155..bb1d0576732d 100644
+--- a/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi
++++ b/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi
+@@ -96,7 +96,7 @@
+ &weim {
+       status = "okay";
+-      nor: nor@0,0 {
++      nor: flash@0,0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "cfi-flash";
+diff --git a/arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi b/arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi
+index 0935e1400e5d..e4ed62397d62 100644
+--- a/arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi
++++ b/arch/arm/boot/dts/imx27-phytec-phycore-som.dtsi
+@@ -328,7 +328,7 @@
+ &weim {
+       status = "okay";
+-      nor: nor@0,0 {
++      nor: flash@0,0 {
+               compatible = "cfi-flash";
+               reg = <0 0x00000000 0x02000000>;
+               bank-width = <2>;
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx1-fix-sram-node.patch b/queue-4.19/arm-dts-imx1-fix-sram-node.patch
new file mode 100644 (file)
index 0000000..3249627
--- /dev/null
@@ -0,0 +1,53 @@
+From ac8b505f0d411509f888ea44555a67904435c7ae Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Dec 2023 09:39:21 -0300
+Subject: ARM: dts: imx1: Fix sram node
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit c248e535973088ba7071ff6f26ab7951143450af ]
+
+Per sram.yaml, address-cells, size-cells and ranges are mandatory.
+
+The node name should be sram.
+
+Change the node name and pass the required properties to fix the
+following dt-schema warnings:
+
+imx1-apf9328.dtb: esram@300000: $nodename:0: 'esram@300000' does not match '^sram(@.*)?'
+       from schema $id: http://devicetree.org/schemas/sram/sram.yaml#
+imx1-apf9328.dtb: esram@300000: '#address-cells' is a required property
+       from schema $id: http://devicetree.org/schemas/sram/sram.yaml#
+imx1-apf9328.dtb: esram@300000: '#size-cells' is a required property
+       from schema $id: http://devicetree.org/schemas/sram/sram.yaml#
+imx1-apf9328.dtb: esram@300000: 'ranges' is a required property
+       from schema $id: http://devicetree.org/schemas/sram/sram.yaml#
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx1.dtsi | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx1.dtsi b/arch/arm/boot/dts/imx1.dtsi
+index 2b6e77029de4..8c4c7464b133 100644
+--- a/arch/arm/boot/dts/imx1.dtsi
++++ b/arch/arm/boot/dts/imx1.dtsi
+@@ -268,9 +268,12 @@
+                       status = "disabled";
+               };
+-              esram: esram@300000 {
++              esram: sram@300000 {
+                       compatible = "mmio-sram";
+                       reg = <0x00300000 0x20000>;
++                      ranges = <0 0x00300000 0x20000>;
++                      #address-cells = <1>;
++                      #size-cells = <1>;
+               };
+       };
+ };
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx23-28-fix-the-dma-controller-node-name.patch b/queue-4.19/arm-dts-imx23-28-fix-the-dma-controller-node-name.patch
new file mode 100644 (file)
index 0000000..6a2fe93
--- /dev/null
@@ -0,0 +1,53 @@
+From d38ac93fbf2ad36db3dbfa3cb7846894304b1b16 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Dec 2023 07:26:31 -0300
+Subject: ARM: dts: imx23/28: Fix the DMA controller node name
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit 858d83ca4b50bbc8693d95cc94310e6d791fb2e6 ]
+
+Per fsl,mxs-dma.yaml, the node name should be 'dma-controller'.
+
+Change it to fix the following dt-schema warning.
+
+imx28-apf28.dtb: dma-apbx@80024000: $nodename:0: 'dma-apbx@80024000' does not match '^dma-controller(@.*)?$'
+       from schema $id: http://devicetree.org/schemas/dma/fsl,mxs-dma.yaml#
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx23.dtsi | 2 +-
+ arch/arm/boot/dts/imx28.dtsi | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx23.dtsi b/arch/arm/boot/dts/imx23.dtsi
+index aaaa987d8eff..223c5171edab 100644
+--- a/arch/arm/boot/dts/imx23.dtsi
++++ b/arch/arm/boot/dts/imx23.dtsi
+@@ -406,7 +406,7 @@
+                               status = "disabled";
+                       };
+-                      dma_apbx: dma-apbx@80024000 {
++                      dma_apbx: dma-controller@80024000 {
+                               compatible = "fsl,imx23-dma-apbx";
+                               reg = <0x80024000 0x2000>;
+                               interrupts = <7 5 9 26
+diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi
+index 5107fdc482ea..84f7c86373b5 100644
+--- a/arch/arm/boot/dts/imx28.dtsi
++++ b/arch/arm/boot/dts/imx28.dtsi
+@@ -984,7 +984,7 @@
+                               status = "disabled";
+                       };
+-                      dma_apbx: dma-apbx@80024000 {
++                      dma_apbx: dma-controller@80024000 {
+                               compatible = "fsl,imx28-dma-apbx";
+                               reg = <0x80024000 0x2000>;
+                               interrupts = <78 79 66 0
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx23-sansa-use-preferred-i2c-gpios-properti.patch b/queue-4.19/arm-dts-imx23-sansa-use-preferred-i2c-gpios-properti.patch
new file mode 100644 (file)
index 0000000..62eacb2
--- /dev/null
@@ -0,0 +1,61 @@
+From d6b35dd2bec60fd01b10d09908b2e358420fb91f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Dec 2023 07:12:12 -0300
+Subject: ARM: dts: imx23-sansa: Use preferred i2c-gpios properties
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit e3aa1a82fb20ee97597022f6528823a8ab82bde6 ]
+
+The 'gpios' property to describe the SDA and SCL GPIOs is considered
+deprecated according to i2c-gpio.yaml.
+
+Switch to the preferred 'sda-gpios' and 'scl-gpios' properties.
+
+This fixes the following schema warnings:
+
+imx23-sansa.dtb: i2c-0: 'sda-gpios' is a required property
+       from schema $id: http://devicetree.org/schemas/i2c/i2c-gpio.yaml#
+imx23-sansa.dtb: i2c-0: 'scl-gpios' is a required property
+       from schema $id: http://devicetree.org/schemas/i2c/i2c-gpio.yaml#
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx23-sansa.dts | 12 ++++--------
+ 1 file changed, 4 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx23-sansa.dts b/arch/arm/boot/dts/imx23-sansa.dts
+index fa22fd9b2412..a0bbc39e644a 100644
+--- a/arch/arm/boot/dts/imx23-sansa.dts
++++ b/arch/arm/boot/dts/imx23-sansa.dts
+@@ -175,10 +175,8 @@
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "i2c-gpio";
+-              gpios = <
+-                      &gpio1 24 0             /* SDA */
+-                      &gpio1 22 0             /* SCL */
+-              >;
++              sda-gpios = <&gpio1 24 0>;
++              scl-gpios = <&gpio1 22 0>;
+               i2c-gpio,delay-us = <2>;        /* ~100 kHz */
+       };
+@@ -186,10 +184,8 @@
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "i2c-gpio";
+-              gpios = <
+-                      &gpio0 31 0             /* SDA */
+-                      &gpio0 30 0             /* SCL */
+-              >;
++              sda-gpios = <&gpio0 31 0>;
++              scl-gpios = <&gpio0 30 0>;
+               i2c-gpio,delay-us = <2>;        /* ~100 kHz */
+               touch: touch@20 {
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx25-27-eukrea-fix-rtc-node-name.patch b/queue-4.19/arm-dts-imx25-27-eukrea-fix-rtc-node-name.patch
new file mode 100644 (file)
index 0000000..e6690f7
--- /dev/null
@@ -0,0 +1,52 @@
+From fc8356a33d1b3e5d73d30a497aa974f42a1fcfe3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Dec 2023 08:58:26 -0300
+Subject: ARM: dts: imx25/27-eukrea: Fix RTC node name
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit 68c711b882c262e36895547cddea2c2d56ce611d ]
+
+Node names should be generic. Use 'rtc' as node name to fix
+the following dt-schema warning:
+
+imx25-eukrea-mbimxsd25-baseboard.dtb: pcf8563@51: $nodename:0: 'pcf8563@51' does not match '^rtc(@.*|-([0-9]|[1-9][0-9]+))?$'
+       from schema $id: http://devicetree.org/schemas/rtc/nxp,pcf8563.yaml#
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi | 2 +-
+ arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi b/arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi
+index e4d7da267532..5858ec8a409a 100644
+--- a/arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi
++++ b/arch/arm/boot/dts/imx25-eukrea-cpuimx25.dtsi
+@@ -35,7 +35,7 @@
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+-      pcf8563@51 {
++      rtc@51 {
+               compatible = "nxp,pcf8563";
+               reg = <0x51>;
+       };
+diff --git a/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi b/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi
+index c85f9d01768a..56c790705155 100644
+--- a/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi
++++ b/arch/arm/boot/dts/imx27-eukrea-cpuimx27.dtsi
+@@ -39,7 +39,7 @@
+       pinctrl-0 = <&pinctrl_i2c1>;
+       status = "okay";
+-      pcf8563@51 {
++      rtc@51 {
+               compatible = "nxp,pcf8563";
+               reg = <0x51>;
+       };
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx27-apf27dev-fix-led-name.patch b/queue-4.19/arm-dts-imx27-apf27dev-fix-led-name.patch
new file mode 100644 (file)
index 0000000..d3c3345
--- /dev/null
@@ -0,0 +1,39 @@
+From 1fcbed7ff06f02c9d7fe64f50c428d5b75f1a91a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Dec 2023 17:19:05 -0300
+Subject: ARM: dts: imx27-apf27dev: Fix LED name
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit dc35e253d032b959d92e12f081db5b00db26ae64 ]
+
+Per leds-gpio.yaml, the led names should start with 'led'.
+
+Change it to fix the following dt-schema warning:
+
+imx27-apf27dev.dtb: leds: 'user' does not match any of the regexes: '(^led-[0-9a-f]$|led)', 'pinctrl-[0-9]+'
+       from schema $id: http://devicetree.org/schemas/leds/leds-gpio.yaml#
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx27-apf27dev.dts | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx27-apf27dev.dts b/arch/arm/boot/dts/imx27-apf27dev.dts
+index 5f84b598e0d0..167f21434fbf 100644
+--- a/arch/arm/boot/dts/imx27-apf27dev.dts
++++ b/arch/arm/boot/dts/imx27-apf27dev.dts
+@@ -53,7 +53,7 @@
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_gpio_leds>;
+-              user {
++              led-user {
+                       label = "Heartbeat";
+                       gpios = <&gpio6 14 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "heartbeat";
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx27-fix-sram-node.patch b/queue-4.19/arm-dts-imx27-fix-sram-node.patch
new file mode 100644 (file)
index 0000000..7aaca46
--- /dev/null
@@ -0,0 +1,37 @@
+From c699edade3ed6ac03bed378f2795bdc1e5e1dd92 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Dec 2023 09:39:20 -0300
+Subject: ARM: dts: imx27: Fix sram node
+
+From: Fabio Estevam <festevam@denx.de>
+
+[ Upstream commit 2fb7b2a2f06bb3f8321cf26c33e4e820c5b238b6 ]
+
+Per sram.yaml, address-cells, size-cells and ranges are mandatory.
+
+Pass them to fix the following dt-schema warnings:
+
+Signed-off-by: Fabio Estevam <festevam@denx.de>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx27.dtsi | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi
+index 39e75b997bdc..ecfb07c8e185 100644
+--- a/arch/arm/boot/dts/imx27.dtsi
++++ b/arch/arm/boot/dts/imx27.dtsi
+@@ -588,6 +588,9 @@
+               iram: iram@ffff4c00 {
+                       compatible = "mmio-sram";
+                       reg = <0xffff4c00 0xb400>;
++                      ranges = <0 0xffff4c00 0xb400>;
++                      #address-cells = <1>;
++                      #size-cells = <1>;
+               };
+       };
+ };
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx7s-fix-lcdif-compatible.patch b/queue-4.19/arm-dts-imx7s-fix-lcdif-compatible.patch
new file mode 100644 (file)
index 0000000..126cd51
--- /dev/null
@@ -0,0 +1,39 @@
+From c476e0f842e8e0aecb7021a82b99b2be3bbbd191 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 Oct 2023 10:15:54 +0200
+Subject: ARM: dts: imx7s: Fix lcdif compatible
+
+From: Alexander Stein <alexander.stein@ew.tq-group.com>
+
+[ Upstream commit 5f55da4cc37051cda600ea870ce8cf29f1297715 ]
+
+imx7d-lcdif is compatible to imx6sx-lcdif. MXSFB_V6 supports overlay
+by using LCDC_AS_CTRL register. This registers used by overlay plane:
+* LCDC_AS_CTRL
+* LCDC_AS_BUF
+* LCDC_AS_NEXT_BUF
+are listed in i.MX7D RM as well.
+
+Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx7s.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx7s.dtsi b/arch/arm/boot/dts/imx7s.dtsi
+index 36c00fe29f4f..ebe954f94e09 100644
+--- a/arch/arm/boot/dts/imx7s.dtsi
++++ b/arch/arm/boot/dts/imx7s.dtsi
+@@ -701,7 +701,7 @@
+                       };
+                       lcdif: lcdif@30730000 {
+-                              compatible = "fsl,imx7d-lcdif", "fsl,imx28-lcdif";
++                              compatible = "fsl,imx7d-lcdif", "fsl,imx6sx-lcdif";
+                               reg = <0x30730000 0x10000>;
+                               interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+                               clocks = <&clks IMX7D_LCDIF_PIXEL_ROOT_CLK>,
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-imx7s-fix-nand-controller-size-cells.patch b/queue-4.19/arm-dts-imx7s-fix-nand-controller-size-cells.patch
new file mode 100644 (file)
index 0000000..6d5032d
--- /dev/null
@@ -0,0 +1,38 @@
+From 16bcc3f85d3102ed8b2e3ef8350e2462d2f5300c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 12 Oct 2023 10:15:55 +0200
+Subject: ARM: dts: imx7s: Fix nand-controller #size-cells
+
+From: Alexander Stein <alexander.stein@ew.tq-group.com>
+
+[ Upstream commit 4aadb841ed49bada1415c48c44d21f5b69e01299 ]
+
+nand-controller.yaml bindings says #size-cells shall be set to 0.
+Fixes the dtbs_check warning:
+arch/arm/boot/dts/nxp/imx/imx7s-mba7.dtb: nand-controller@33002000:
+ #size-cells:0:0: 0 was expected
+  from schema $id: http://devicetree.org/schemas/mtd/gpmi-nand.yaml#
+
+Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
+Signed-off-by: Shawn Guo <shawnguo@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/imx7s.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx7s.dtsi b/arch/arm/boot/dts/imx7s.dtsi
+index ebe954f94e09..c62cf9fea481 100644
+--- a/arch/arm/boot/dts/imx7s.dtsi
++++ b/arch/arm/boot/dts/imx7s.dtsi
+@@ -1094,7 +1094,7 @@
+               gpmi: gpmi-nand@33002000{
+                       compatible = "fsl,imx7d-gpmi-nand";
+                       #address-cells = <1>;
+-                      #size-cells = <1>;
++                      #size-cells = <0>;
+                       reg = <0x33002000 0x2000>, <0x33004000 0x4000>;
+                       reg-names = "gpmi-nand", "bch";
+                       interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
+-- 
+2.43.0
+
diff --git a/queue-4.19/arm-dts-rockchip-fix-rk3036-hdmi-ports-node.patch b/queue-4.19/arm-dts-rockchip-fix-rk3036-hdmi-ports-node.patch
new file mode 100644 (file)
index 0000000..852ebc1
--- /dev/null
@@ -0,0 +1,51 @@
+From 1aefc6f913ead7948ebeb119bb72f25f569ee8b5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Dec 2023 18:40:27 +0100
+Subject: ARM: dts: rockchip: fix rk3036 hdmi ports node
+
+From: Johan Jonker <jbx6244@gmail.com>
+
+[ Upstream commit 27ded76ef0fcfcf939914532aae575cf23c221b4 ]
+
+Fix hdmi ports node so that it matches the
+rockchip,inno-hdmi.yaml binding.
+
+Signed-off-by: Johan Jonker <jbx6244@gmail.com>
+Link: https://lore.kernel.org/r/9a2afac1-ed5c-382d-02b0-b2f5f1af3abb@gmail.com
+Signed-off-by: Heiko Stuebner <heiko@sntech.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/boot/dts/rk3036.dtsi | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/boot/dts/rk3036.dtsi b/arch/arm/boot/dts/rk3036.dtsi
+index db612271371b..c5144f06c3e7 100644
+--- a/arch/arm/boot/dts/rk3036.dtsi
++++ b/arch/arm/boot/dts/rk3036.dtsi
+@@ -336,12 +336,20 @@
+               pinctrl-0 = <&hdmi_ctl>;
+               status = "disabled";
+-              hdmi_in: port {
++              ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+-                      hdmi_in_vop: endpoint@0 {
++
++                      hdmi_in: port@0 {
+                               reg = <0>;
+-                              remote-endpoint = <&vop_out_hdmi>;
++
++                              hdmi_in_vop: endpoint {
++                                      remote-endpoint = <&vop_out_hdmi>;
++                              };
++                      };
++
++                      hdmi_out: port@1 {
++                              reg = <1>;
+                       };
+               };
+       };
+-- 
+2.43.0
+
diff --git a/queue-4.19/asoc-doc-fix-undefined-snd_soc_dapm_nopm-argument.patch b/queue-4.19/asoc-doc-fix-undefined-snd_soc_dapm_nopm-argument.patch
new file mode 100644 (file)
index 0000000..dbb62e3
--- /dev/null
@@ -0,0 +1,37 @@
+From 1621ffe0764a4ffed417c21a517eb0f8024492be Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 21 Nov 2023 14:07:51 +0200
+Subject: ASoC: doc: Fix undefined SND_SOC_DAPM_NOPM argument
+
+From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
+
+[ Upstream commit 67c7666fe808c3a7af3cc6f9d0a3dd3acfd26115 ]
+
+The virtual widget example makes use of an undefined SND_SOC_DAPM_NOPM
+argument passed to SND_SOC_DAPM_MIXER().  Replace with the correct
+SND_SOC_NOPM definition.
+
+Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
+Link: https://lore.kernel.org/r/20231121120751.77355-1-cristian.ciocaltea@collabora.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ Documentation/sound/soc/dapm.rst | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Documentation/sound/soc/dapm.rst b/Documentation/sound/soc/dapm.rst
+index 8e44107933ab..c3154ce6e1b2 100644
+--- a/Documentation/sound/soc/dapm.rst
++++ b/Documentation/sound/soc/dapm.rst
+@@ -234,7 +234,7 @@ corresponding soft power control. In this case it is necessary to create
+ a virtual widget - a widget with no control bits e.g.
+ ::
+-  SND_SOC_DAPM_MIXER("AC97 Mixer", SND_SOC_DAPM_NOPM, 0, 0, NULL, 0),
++  SND_SOC_DAPM_MIXER("AC97 Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
+ This can be used to merge to signal paths together in software.
+-- 
+2.43.0
+
diff --git a/queue-4.19/audit-send-netlink-ack-before-setting-connection-in-.patch b/queue-4.19/audit-send-netlink-ack-before-setting-connection-in-.patch
new file mode 100644 (file)
index 0000000..41d08e1
--- /dev/null
@@ -0,0 +1,117 @@
+From be206974621afc0074a49d76f524bef713eb0f87 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 18 Oct 2023 09:23:51 +0000
+Subject: audit: Send netlink ACK before setting connection in auditd_set
+
+From: Chris Riches <chris.riches@nutanix.com>
+
+[ Upstream commit 022732e3d846e197539712e51ecada90ded0572a ]
+
+When auditd_set sets the auditd_conn pointer, audit messages can
+immediately be put on the socket by other kernel threads. If the backlog
+is large or the rate is high, this can immediately fill the socket
+buffer. If the audit daemon requested an ACK for this operation, a full
+socket buffer causes the ACK to get dropped, also setting ENOBUFS on the
+socket.
+
+To avoid this race and ensure ACKs get through, fast-track the ACK in
+this specific case to ensure it is sent before auditd_conn is set.
+
+Signed-off-by: Chris Riches <chris.riches@nutanix.com>
+[PM: fix some tab vs space damage]
+Signed-off-by: Paul Moore <paul@paul-moore.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ kernel/audit.c | 31 ++++++++++++++++++++++++-------
+ 1 file changed, 24 insertions(+), 7 deletions(-)
+
+diff --git a/kernel/audit.c b/kernel/audit.c
+index 471d3ad910aa..5fb87eccb8c2 100644
+--- a/kernel/audit.c
++++ b/kernel/audit.c
+@@ -498,15 +498,19 @@ static void auditd_conn_free(struct rcu_head *rcu)
+  * @pid: auditd PID
+  * @portid: auditd netlink portid
+  * @net: auditd network namespace pointer
++ * @skb: the netlink command from the audit daemon
++ * @ack: netlink ack flag, cleared if ack'd here
+  *
+  * Description:
+  * This function will obtain and drop network namespace references as
+  * necessary.  Returns zero on success, negative values on failure.
+  */
+-static int auditd_set(struct pid *pid, u32 portid, struct net *net)
++static int auditd_set(struct pid *pid, u32 portid, struct net *net,
++                    struct sk_buff *skb, bool *ack)
+ {
+       unsigned long flags;
+       struct auditd_connection *ac_old, *ac_new;
++      struct nlmsghdr *nlh;
+       if (!pid || !net)
+               return -EINVAL;
+@@ -518,6 +522,13 @@ static int auditd_set(struct pid *pid, u32 portid, struct net *net)
+       ac_new->portid = portid;
+       ac_new->net = get_net(net);
++      /* send the ack now to avoid a race with the queue backlog */
++      if (*ack) {
++              nlh = nlmsg_hdr(skb);
++              netlink_ack(skb, nlh, 0, NULL);
++              *ack = false;
++      }
++
+       spin_lock_irqsave(&auditd_conn_lock, flags);
+       ac_old = rcu_dereference_protected(auditd_conn,
+                                          lockdep_is_held(&auditd_conn_lock));
+@@ -1204,7 +1215,8 @@ static int audit_replace(struct pid *pid)
+       return auditd_send_unicast_skb(skb);
+ }
+-static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
++static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
++                           bool *ack)
+ {
+       u32                     seq;
+       void                    *data;
+@@ -1296,7 +1308,8 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+                               /* register a new auditd connection */
+                               err = auditd_set(req_pid,
+                                                NETLINK_CB(skb).portid,
+-                                               sock_net(NETLINK_CB(skb).sk));
++                                               sock_net(NETLINK_CB(skb).sk),
++                                               skb, ack);
+                               if (audit_enabled != AUDIT_OFF)
+                                       audit_log_config_change("audit_pid",
+                                                               new_pid,
+@@ -1529,9 +1542,10 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
+  * Parse the provided skb and deal with any messages that may be present,
+  * malformed skbs are discarded.
+  */
+-static void audit_receive(struct sk_buff  *skb)
++static void audit_receive(struct sk_buff *skb)
+ {
+       struct nlmsghdr *nlh;
++      bool ack;
+       /*
+        * len MUST be signed for nlmsg_next to be able to dec it below 0
+        * if the nlmsg_len was not aligned
+@@ -1544,9 +1558,12 @@ static void audit_receive(struct sk_buff  *skb)
+       audit_ctl_lock();
+       while (nlmsg_ok(nlh, len)) {
+-              err = audit_receive_msg(skb, nlh);
+-              /* if err or if this message says it wants a response */
+-              if (err || (nlh->nlmsg_flags & NLM_F_ACK))
++              ack = nlh->nlmsg_flags & NLM_F_ACK;
++              err = audit_receive_msg(skb, nlh, &ack);
++
++              /* send an ack if the user asked for one and audit_receive_msg
++               * didn't already do it, or if there was an error. */
++              if (ack || err)
+                       netlink_ack(skb, nlh, err, NULL);
+               nlh = nlmsg_next(nlh, &len);
+-- 
+2.43.0
+
diff --git a/queue-4.19/blk-mq-fix-io-hang-from-sbitmap-wakeup-race.patch b/queue-4.19/blk-mq-fix-io-hang-from-sbitmap-wakeup-race.patch
new file mode 100644 (file)
index 0000000..faa059f
--- /dev/null
@@ -0,0 +1,72 @@
+From 87dec218f429094c36ec7ffd85e216cd7259467b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 12 Jan 2024 20:26:26 +0800
+Subject: blk-mq: fix IO hang from sbitmap wakeup race
+
+From: Ming Lei <ming.lei@redhat.com>
+
+[ Upstream commit 5266caaf5660529e3da53004b8b7174cab6374ed ]
+
+In blk_mq_mark_tag_wait(), __add_wait_queue() may be re-ordered
+with the following blk_mq_get_driver_tag() in case of getting driver
+tag failure.
+
+Then in __sbitmap_queue_wake_up(), waitqueue_active() may not observe
+the added waiter in blk_mq_mark_tag_wait() and wake up nothing, meantime
+blk_mq_mark_tag_wait() can't get driver tag successfully.
+
+This issue can be reproduced by running the following test in loop, and
+fio hang can be observed in < 30min when running it on my test VM
+in laptop.
+
+       modprobe -r scsi_debug
+       modprobe scsi_debug delay=0 dev_size_mb=4096 max_queue=1 host_max_queue=1 submit_queues=4
+       dev=`ls -d /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*/block/* | head -1 | xargs basename`
+       fio --filename=/dev/"$dev" --direct=1 --rw=randrw --bs=4k --iodepth=1 \
+                       --runtime=100 --numjobs=40 --time_based --name=test \
+               --ioengine=libaio
+
+Fix the issue by adding one explicit barrier in blk_mq_mark_tag_wait(), which
+is just fine in case of running out of tag.
+
+Cc: Jan Kara <jack@suse.cz>
+Cc: Kemeng Shi <shikemeng@huaweicloud.com>
+Reported-by: Changhui Zhong <czhong@redhat.com>
+Signed-off-by: Ming Lei <ming.lei@redhat.com>
+Link: https://lore.kernel.org/r/20240112122626.4181044-1-ming.lei@redhat.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ block/blk-mq.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/block/blk-mq.c b/block/blk-mq.c
+index ae70b4809bec..0cb559d63998 100644
+--- a/block/blk-mq.c
++++ b/block/blk-mq.c
+@@ -1064,6 +1064,22 @@ static bool blk_mq_mark_tag_wait(struct blk_mq_hw_ctx *hctx,
+       wait->flags &= ~WQ_FLAG_EXCLUSIVE;
+       __add_wait_queue(wq, wait);
++      /*
++       * Add one explicit barrier since blk_mq_get_driver_tag() may
++       * not imply barrier in case of failure.
++       *
++       * Order adding us to wait queue and allocating driver tag.
++       *
++       * The pair is the one implied in sbitmap_queue_wake_up() which
++       * orders clearing sbitmap tag bits and waitqueue_active() in
++       * __sbitmap_queue_wake_up(), since waitqueue_active() is lockless
++       *
++       * Otherwise, re-order of adding wait queue and getting driver tag
++       * may cause __sbitmap_queue_wake_up() to wake up nothing because
++       * the waitqueue_active() may not observe us in wait queue.
++       */
++      smp_mb();
++
+       /*
+        * It's possible that a tag was freed in the window between the
+        * allocation failure and adding the hardware queue to the wait
+-- 
+2.43.0
+
diff --git a/queue-4.19/bonding-return-enomem-instead-of-bug-in-alb_upper_de.patch b/queue-4.19/bonding-return-enomem-instead-of-bug-in-alb_upper_de.patch
new file mode 100644 (file)
index 0000000..df41c44
--- /dev/null
@@ -0,0 +1,69 @@
+From e4adaad49da1cd00be4d7fb122770bf3028e29c6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 18 Nov 2023 16:16:53 +0800
+Subject: bonding: return -ENOMEM instead of BUG in alb_upper_dev_walk
+
+From: Zhengchao Shao <shaozhengchao@huawei.com>
+
+[ Upstream commit d6b83f1e3707c4d60acfa58afd3515e17e5d5384 ]
+
+If failed to allocate "tags" or could not find the final upper device from
+start_dev's upper list in bond_verify_device_path(), only the loopback
+detection of the current upper device should be affected, and the system is
+no need to be panic.
+So return -ENOMEM in alb_upper_dev_walk to stop walking, print some warn
+information when failed to allocate memory for vlan tags in
+bond_verify_device_path.
+
+I also think that the following function calls
+netdev_walk_all_upper_dev_rcu
+---->>>alb_upper_dev_walk
+---------->>>bond_verify_device_path
+From this way, "end device" can eventually be obtained from "start device"
+in bond_verify_device_path, IS_ERR(tags) could be instead of
+IS_ERR_OR_NULL(tags) in alb_upper_dev_walk.
+
+Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
+Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com>
+Link: https://lore.kernel.org/r/20231118081653.1481260-1-shaozhengchao@huawei.com
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/bonding/bond_alb.c  | 3 ++-
+ drivers/net/bonding/bond_main.c | 5 ++++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
+index e03f4883858a..5947c1305527 100644
+--- a/drivers/net/bonding/bond_alb.c
++++ b/drivers/net/bonding/bond_alb.c
+@@ -984,7 +984,8 @@ static int alb_upper_dev_walk(struct net_device *upper, void *_data)
+       if (netif_is_macvlan(upper) && !strict_match) {
+               tags = bond_verify_device_path(bond->dev, upper, 0);
+               if (IS_ERR_OR_NULL(tags))
+-                      BUG();
++                      return -ENOMEM;
++
+               alb_send_lp_vid(slave, upper->dev_addr,
+                               tags[0].vlan_proto, tags[0].vlan_id);
+               kfree(tags);
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index 79b36f1c50ae..920b491bd4cd 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -2460,8 +2460,11 @@ struct bond_vlan_tag *bond_verify_device_path(struct net_device *start_dev,
+       if (start_dev == end_dev) {
+               tags = kcalloc(level + 1, sizeof(*tags), GFP_ATOMIC);
+-              if (!tags)
++              if (!tags) {
++                      net_err_ratelimited("%s: %s: Failed to allocate tags\n",
++                                          __func__, start_dev->name);
+                       return ERR_PTR(-ENOMEM);
++              }
+               tags[level].vlan_proto = VLAN_N_VID;
+               return tags;
+       }
+-- 
+2.43.0
+
diff --git a/queue-4.19/bpf-add-map-and-need_defer-parameters-to-.map_fd_put.patch b/queue-4.19/bpf-add-map-and-need_defer-parameters-to-.map_fd_put.patch
new file mode 100644 (file)
index 0000000..46e3981
--- /dev/null
@@ -0,0 +1,173 @@
+From 4169eb900947c79dd63df7dd3750dcee6462f14c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Dec 2023 22:04:20 +0800
+Subject: bpf: Add map and need_defer parameters to .map_fd_put_ptr()
+
+From: Hou Tao <houtao1@huawei.com>
+
+[ Upstream commit 20c20bd11a0702ce4dc9300c3da58acf551d9725 ]
+
+map is the pointer of outer map, and need_defer needs some explanation.
+need_defer tells the implementation to defer the reference release of
+the passed element and ensure that the element is still alive before
+the bpf program, which may manipulate it, exits.
+
+The following three cases will invoke map_fd_put_ptr() and different
+need_defer values will be passed to these callers:
+
+1) release the reference of the old element in the map during map update
+   or map deletion. The release must be deferred, otherwise the bpf
+   program may incur use-after-free problem, so need_defer needs to be
+   true.
+2) release the reference of the to-be-added element in the error path of
+   map update. The to-be-added element is not visible to any bpf
+   program, so it is OK to pass false for need_defer parameter.
+3) release the references of all elements in the map during map release.
+   Any bpf program which has access to the map must have been exited and
+   released, so need_defer=false will be OK.
+
+These two parameters will be used by the following patches to fix the
+potential use-after-free problem for map-in-map.
+
+Signed-off-by: Hou Tao <houtao1@huawei.com>
+Link: https://lore.kernel.org/r/20231204140425.1480317-3-houtao@huaweicloud.com
+Signed-off-by: Alexei Starovoitov <ast@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/bpf.h     |  6 +++++-
+ kernel/bpf/arraymap.c   | 12 +++++++-----
+ kernel/bpf/hashtab.c    |  6 +++---
+ kernel/bpf/map_in_map.c |  2 +-
+ kernel/bpf/map_in_map.h |  2 +-
+ 5 files changed, 17 insertions(+), 11 deletions(-)
+
+diff --git a/include/linux/bpf.h b/include/linux/bpf.h
+index 766ea96bf5b8..269754890879 100644
+--- a/include/linux/bpf.h
++++ b/include/linux/bpf.h
+@@ -44,7 +44,11 @@ struct bpf_map_ops {
+       /* funcs called by prog_array and perf_event_array map */
+       void *(*map_fd_get_ptr)(struct bpf_map *map, struct file *map_file,
+                               int fd);
+-      void (*map_fd_put_ptr)(void *ptr);
++      /* If need_defer is true, the implementation should guarantee that
++       * the to-be-put element is still alive before the bpf program, which
++       * may manipulate it, exists.
++       */
++      void (*map_fd_put_ptr)(struct bpf_map *map, void *ptr, bool need_defer);
+       u32 (*map_gen_lookup)(struct bpf_map *map, struct bpf_insn *insn_buf);
+       u32 (*map_fd_sys_lookup_elem)(void *ptr);
+       void (*map_seq_show_elem)(struct bpf_map *map, void *key,
+diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c
+index 0c17aab3ce5f..44f53c06629e 100644
+--- a/kernel/bpf/arraymap.c
++++ b/kernel/bpf/arraymap.c
+@@ -469,7 +469,7 @@ int bpf_fd_array_map_update_elem(struct bpf_map *map, struct file *map_file,
+       old_ptr = xchg(array->ptrs + index, new_ptr);
+       if (old_ptr)
+-              map->ops->map_fd_put_ptr(old_ptr);
++              map->ops->map_fd_put_ptr(map, old_ptr, true);
+       return 0;
+ }
+@@ -485,7 +485,7 @@ static int fd_array_map_delete_elem(struct bpf_map *map, void *key)
+       old_ptr = xchg(array->ptrs + index, NULL);
+       if (old_ptr) {
+-              map->ops->map_fd_put_ptr(old_ptr);
++              map->ops->map_fd_put_ptr(map, old_ptr, true);
+               return 0;
+       } else {
+               return -ENOENT;
+@@ -509,8 +509,9 @@ static void *prog_fd_array_get_ptr(struct bpf_map *map,
+       return prog;
+ }
+-static void prog_fd_array_put_ptr(void *ptr)
++static void prog_fd_array_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
+ {
++      /* bpf_prog is freed after one RCU or tasks trace grace period */
+       bpf_prog_put(ptr);
+ }
+@@ -598,8 +599,9 @@ static void *perf_event_fd_array_get_ptr(struct bpf_map *map,
+       return ee;
+ }
+-static void perf_event_fd_array_put_ptr(void *ptr)
++static void perf_event_fd_array_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
+ {
++      /* bpf_perf_event is freed after one RCU grace period */
+       bpf_event_entry_free_rcu(ptr);
+ }
+@@ -640,7 +642,7 @@ static void *cgroup_fd_array_get_ptr(struct bpf_map *map,
+       return cgroup_get_from_fd(fd);
+ }
+-static void cgroup_fd_array_put_ptr(void *ptr)
++static void cgroup_fd_array_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
+ {
+       /* cgroup_put free cgrp after a rcu grace period */
+       cgroup_put(ptr);
+diff --git a/kernel/bpf/hashtab.c b/kernel/bpf/hashtab.c
+index 3f3ed33bd2fd..8e379b667a0f 100644
+--- a/kernel/bpf/hashtab.c
++++ b/kernel/bpf/hashtab.c
+@@ -677,7 +677,7 @@ static void htab_put_fd_value(struct bpf_htab *htab, struct htab_elem *l)
+       if (map->ops->map_fd_put_ptr) {
+               ptr = fd_htab_map_get_ptr(map, l);
+-              map->ops->map_fd_put_ptr(ptr);
++              map->ops->map_fd_put_ptr(map, ptr, true);
+       }
+ }
+@@ -1337,7 +1337,7 @@ static void fd_htab_map_free(struct bpf_map *map)
+               hlist_nulls_for_each_entry_safe(l, n, head, hash_node) {
+                       void *ptr = fd_htab_map_get_ptr(map, l);
+-                      map->ops->map_fd_put_ptr(ptr);
++                      map->ops->map_fd_put_ptr(map, ptr, false);
+               }
+       }
+@@ -1378,7 +1378,7 @@ int bpf_fd_htab_map_update_elem(struct bpf_map *map, struct file *map_file,
+       ret = htab_map_update_elem(map, key, &ptr, map_flags);
+       if (ret)
+-              map->ops->map_fd_put_ptr(ptr);
++              map->ops->map_fd_put_ptr(map, ptr, false);
+       return ret;
+ }
+diff --git a/kernel/bpf/map_in_map.c b/kernel/bpf/map_in_map.c
+index 9670ee5ee74e..051c5e40792c 100644
+--- a/kernel/bpf/map_in_map.c
++++ b/kernel/bpf/map_in_map.c
+@@ -102,7 +102,7 @@ void *bpf_map_fd_get_ptr(struct bpf_map *map,
+       return inner_map;
+ }
+-void bpf_map_fd_put_ptr(void *ptr)
++void bpf_map_fd_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
+ {
+       /* ptr->ops->map_free() has to go through one
+        * rcu grace period by itself.
+diff --git a/kernel/bpf/map_in_map.h b/kernel/bpf/map_in_map.h
+index 6183db9ec08c..1e652a7bf60e 100644
+--- a/kernel/bpf/map_in_map.h
++++ b/kernel/bpf/map_in_map.h
+@@ -18,7 +18,7 @@ bool bpf_map_meta_equal(const struct bpf_map *meta0,
+                       const struct bpf_map *meta1);
+ void *bpf_map_fd_get_ptr(struct bpf_map *map, struct file *map_file,
+                        int ufd);
+-void bpf_map_fd_put_ptr(void *ptr);
++void bpf_map_fd_put_ptr(struct bpf_map *map, void *ptr, bool need_defer);
+ u32 bpf_map_fd_sys_lookup_elem(void *ptr);
+ #endif
+-- 
+2.43.0
+
diff --git a/queue-4.19/ceph-fix-deadlock-or-deadcode-of-misusing-dget.patch b/queue-4.19/ceph-fix-deadlock-or-deadcode-of-misusing-dget.patch
new file mode 100644 (file)
index 0000000..ba55adc
--- /dev/null
@@ -0,0 +1,63 @@
+From 3ef4140bda3b09dce9c1dbbcf3e0193d5f5a0a29 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Nov 2023 13:26:18 +0800
+Subject: ceph: fix deadlock or deadcode of misusing dget()
+
+From: Xiubo Li <xiubli@redhat.com>
+
+[ Upstream commit b493ad718b1f0357394d2cdecbf00a44a36fa085 ]
+
+The lock order is incorrect between denty and its parent, we should
+always make sure that the parent get the lock first.
+
+But since this deadcode is never used and the parent dir will always
+be set from the callers, let's just remove it.
+
+Link: https://lore.kernel.org/r/20231116081919.GZ1957730@ZenIV
+Reported-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Xiubo Li <xiubli@redhat.com>
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ceph/caps.c | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
+index fcfba2af5f98..729a67700a4f 100644
+--- a/fs/ceph/caps.c
++++ b/fs/ceph/caps.c
+@@ -4216,12 +4216,14 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
+                              struct inode *dir,
+                              int mds, int drop, int unless)
+ {
+-      struct dentry *parent = NULL;
+       struct ceph_mds_request_release *rel = *p;
+       struct ceph_dentry_info *di = ceph_dentry(dentry);
+       int force = 0;
+       int ret;
++      /* This shouldn't happen */
++      BUG_ON(!dir);
++
+       /*
+        * force an record for the directory caps if we have a dentry lease.
+        * this is racy (can't take i_ceph_lock and d_lock together), but it
+@@ -4231,14 +4233,9 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
+       spin_lock(&dentry->d_lock);
+       if (di->lease_session && di->lease_session->s_mds == mds)
+               force = 1;
+-      if (!dir) {
+-              parent = dget(dentry->d_parent);
+-              dir = d_inode(parent);
+-      }
+       spin_unlock(&dentry->d_lock);
+       ret = ceph_encode_inode_release(p, dir, mds, drop, unless, force);
+-      dput(parent);
+       spin_lock(&dentry->d_lock);
+       if (ret && di->lease_session && di->lease_session->s_mds == mds) {
+-- 
+2.43.0
+
diff --git a/queue-4.19/clk-hi3620-fix-memory-leak-in-hi3620_mmc_clk_init.patch b/queue-4.19/clk-hi3620-fix-memory-leak-in-hi3620_mmc_clk_init.patch
new file mode 100644 (file)
index 0000000..d5f36d0
--- /dev/null
@@ -0,0 +1,41 @@
+From 6292bd10300d123d51fcdff7872d7216f09877f5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Dec 2023 00:50:40 +0800
+Subject: clk: hi3620: Fix memory leak in hi3620_mmc_clk_init()
+
+From: Kuan-Wei Chiu <visitorckw@gmail.com>
+
+[ Upstream commit bfbea9e5667cfa9552c3d88f023386f017f6c308 ]
+
+In cases where kcalloc() fails for the 'clk_data->clks' allocation, the
+code path does not handle the failure gracefully, potentially leading
+to a memory leak. This fix ensures proper cleanup by freeing the
+allocated memory for 'clk_data' before returning.
+
+Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
+Link: https://lore.kernel.org/r/20231210165040.3407545-1-visitorckw@gmail.com
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/hisilicon/clk-hi3620.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/clk/hisilicon/clk-hi3620.c b/drivers/clk/hisilicon/clk-hi3620.c
+index 77072c7778b9..93b4d8933797 100644
+--- a/drivers/clk/hisilicon/clk-hi3620.c
++++ b/drivers/clk/hisilicon/clk-hi3620.c
+@@ -481,8 +481,10 @@ static void __init hi3620_mmc_clk_init(struct device_node *node)
+               return;
+       clk_data->clks = kcalloc(num, sizeof(*clk_data->clks), GFP_KERNEL);
+-      if (!clk_data->clks)
++      if (!clk_data->clks) {
++              kfree(clk_data);
+               return;
++      }
+       for (i = 0; i < num; i++) {
+               struct hisi_mmc_clock *mmc_clk = &hi3620_mmc_clks[i];
+-- 
+2.43.0
+
diff --git a/queue-4.19/clk-mmp-pxa168-fix-memory-leak-in-pxa168_clk_init.patch b/queue-4.19/clk-mmp-pxa168-fix-memory-leak-in-pxa168_clk_init.patch
new file mode 100644 (file)
index 0000000..3e7ff3c
--- /dev/null
@@ -0,0 +1,51 @@
+From 826732064bcbb4ca038e508d96adab6c32ec5b96 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Dec 2023 01:52:32 +0800
+Subject: clk: mmp: pxa168: Fix memory leak in pxa168_clk_init()
+
+From: Kuan-Wei Chiu <visitorckw@gmail.com>
+
+[ Upstream commit 2fbabea626b6467eb4e6c4cb7a16523da12e43b4 ]
+
+In cases where mapping of mpmu/apmu/apbc registers fails, the code path
+does not handle the failure gracefully, potentially leading to a memory
+leak. This fix ensures proper cleanup by freeing the allocated memory
+for 'pxa_unit' before returning.
+
+Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
+Link: https://lore.kernel.org/r/20231210175232.3414584-1-visitorckw@gmail.com
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/clk/mmp/clk-of-pxa168.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/clk/mmp/clk-of-pxa168.c b/drivers/clk/mmp/clk-of-pxa168.c
+index f110c02e83cb..9674c6c06dca 100644
+--- a/drivers/clk/mmp/clk-of-pxa168.c
++++ b/drivers/clk/mmp/clk-of-pxa168.c
+@@ -258,18 +258,21 @@ static void __init pxa168_clk_init(struct device_node *np)
+       pxa_unit->mpmu_base = of_iomap(np, 0);
+       if (!pxa_unit->mpmu_base) {
+               pr_err("failed to map mpmu registers\n");
++              kfree(pxa_unit);
+               return;
+       }
+       pxa_unit->apmu_base = of_iomap(np, 1);
+       if (!pxa_unit->apmu_base) {
+               pr_err("failed to map apmu registers\n");
++              kfree(pxa_unit);
+               return;
+       }
+       pxa_unit->apbc_base = of_iomap(np, 2);
+       if (!pxa_unit->apbc_base) {
+               pr_err("failed to map apbc registers\n");
++              kfree(pxa_unit);
+               return;
+       }
+-- 
+2.43.0
+
diff --git a/queue-4.19/crypto-stm32-crc32-fix-parsing-list-of-devices.patch b/queue-4.19/crypto-stm32-crc32-fix-parsing-list-of-devices.patch
new file mode 100644 (file)
index 0000000..b7f9dc2
--- /dev/null
@@ -0,0 +1,46 @@
+From 9246ded9dfd0c8cebf935f6798c5449acc6afa80 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 15 Dec 2023 12:17:24 +0100
+Subject: crypto: stm32/crc32 - fix parsing list of devices
+
+From: Thomas Bourgoin <thomas.bourgoin@foss.st.com>
+
+[ Upstream commit 0eaef675b94c746900dcea7f6c41b9a103ed5d53 ]
+
+smatch warnings:
+drivers/crypto/stm32/stm32-crc32.c:108 stm32_crc_get_next_crc() warn:
+can 'crc' even be NULL?
+
+Use list_first_entry_or_null instead of list_first_entry to retrieve
+the first device registered.
+The function list_first_entry always return a non NULL pointer even if
+the list is empty. Hence checking if the pointer returned is NULL does
+not tell if the list is empty or not.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Closes: https://lore.kernel.org/r/202311281111.ou2oUL2i-lkp@intel.com/
+Reported-by: Dan Carpenter <error27@gmail.com>
+Closes: https://lore.kernel.org/r/202311281111.ou2oUL2i-lkp@intel.com/
+Signed-off-by: Thomas Bourgoin <thomas.bourgoin@foss.st.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/crypto/stm32/stm32_crc32.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/crypto/stm32/stm32_crc32.c b/drivers/crypto/stm32/stm32_crc32.c
+index de645bf84980..04adc84d677c 100644
+--- a/drivers/crypto/stm32/stm32_crc32.c
++++ b/drivers/crypto/stm32/stm32_crc32.c
+@@ -98,7 +98,7 @@ static struct stm32_crc *stm32_crc_get_next_crc(void)
+       struct stm32_crc *crc;
+       spin_lock_bh(&crc_list.lock);
+-      crc = list_first_entry(&crc_list.dev_list, struct stm32_crc, list);
++      crc = list_first_entry_or_null(&crc_list.dev_list, struct stm32_crc, list);
+       if (crc)
+               list_move_tail(&crc->list, &crc_list.dev_list);
+       spin_unlock_bh(&crc_list.lock);
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amd-display-make-flip_timestamp_in_us-a-64-bit-v.patch b/queue-4.19/drm-amd-display-make-flip_timestamp_in_us-a-64-bit-v.patch
new file mode 100644 (file)
index 0000000..c1e2d02
--- /dev/null
@@ -0,0 +1,43 @@
+From 2ebcdf1746947b46f70ed9520a98c88353ec3b32 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 Dec 2023 12:01:05 -0500
+Subject: drm/amd/display: make flip_timestamp_in_us a 64-bit variable
+
+From: Josip Pavic <josip.pavic@amd.com>
+
+[ Upstream commit 6fb12518ca58412dc51054e2a7400afb41328d85 ]
+
+[Why]
+This variable currently overflows after about 71 minutes. This doesn't
+cause any known functional issues but it does make debugging more
+difficult.
+
+[How]
+Make it a 64-bit variable.
+
+Reviewed-by: Aric Cyr <aric.cyr@amd.com>
+Acked-by: Wayne Lin <wayne.lin@amd.com>
+Signed-off-by: Josip Pavic <josip.pavic@amd.com>
+Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/display/dc/dc_hw_types.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
+index b789cb2b354b..c96ff10365d2 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
+@@ -357,7 +357,7 @@ union dc_tiling_info {
+       } gfx8;
+       struct {
+-              unsigned int num_pipes;
++              unsigned long long num_pipes;
+               unsigned int num_banks;
+               unsigned int pipe_interleave;
+               unsigned int num_shader_engines;
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdgpu-drop-fence-check-in-to_amdgpu_amdkfd_fenc.patch b/queue-4.19/drm-amdgpu-drop-fence-check-in-to_amdgpu_amdkfd_fenc.patch
new file mode 100644 (file)
index 0000000..908cdae
--- /dev/null
@@ -0,0 +1,45 @@
+From 77a729a492db6aee9b5fee91d0ddf476ca6649c9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 27 Dec 2023 12:54:44 +0530
+Subject: drm/amdgpu: Drop 'fence' check in 'to_amdgpu_amdkfd_fence()'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
+
+[ Upstream commit bf2ad4fb8adca89374b54b225d494e0b1956dbea ]
+
+Return value of container_of(...) can't be null, so null check is not
+required for 'fence'. Hence drop its NULL check.
+
+Fixes the below:
+drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c:93 to_amdgpu_amdkfd_fence() warn: can 'fence' even be NULL?
+
+Cc: Felix Kuehling <Felix.Kuehling@amd.com>
+Cc: Christian König <christian.koenig@amd.com>
+Cc: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@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/amdgpu/amdgpu_amdkfd_fence.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+index 574c1181ae9a..75e4f1abb4c9 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+@@ -88,7 +88,7 @@ struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f)
+               return NULL;
+       fence = container_of(f, struct amdgpu_amdkfd_fence, base);
+-      if (fence && f->ops == &amdkfd_fence_ops)
++      if (f->ops == &amdkfd_fence_ops)
+               return fence;
+       return NULL;
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdgpu-let-kfd-sync-with-vm-fences.patch b/queue-4.19/drm-amdgpu-let-kfd-sync-with-vm-fences.patch
new file mode 100644 (file)
index 0000000..7649828
--- /dev/null
@@ -0,0 +1,42 @@
+From 4920fcbfefd4f5b9db0948a58f7c919e0251de41 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 18 Dec 2023 16:17:23 -0500
+Subject: drm/amdgpu: Let KFD sync with VM fences
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Felix Kuehling <Felix.Kuehling@amd.com>
+
+[ Upstream commit ec9ba4821fa52b5efdbc4cdf0a77497990655231 ]
+
+Change the rules for amdgpu_sync_resv to let KFD synchronize with VM
+fences on page table reservations. This fixes intermittent memory
+corruption after evictions when using amdgpu_vm_handle_moved to update
+page tables for VM mappings managed through render nodes.
+
+Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+index 2d6f5ec77a68..5eb8f93c7022 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+@@ -219,7 +219,8 @@ int amdgpu_sync_resv(struct amdgpu_device *adev,
+                */
+               fence_owner = amdgpu_sync_get_owner(f);
+               if (fence_owner == AMDGPU_FENCE_OWNER_KFD &&
+-                  owner != AMDGPU_FENCE_OWNER_UNDEFINED)
++                  owner != AMDGPU_FENCE_OWNER_UNDEFINED &&
++          owner != AMDGPU_FENCE_OWNER_KFD)
+                       continue;
+               if (amdgpu_sync_same_dev(adev, f)) {
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-amdgpu-release-adev-pm.fw-before-return-in-amdgp.patch b/queue-4.19/drm-amdgpu-release-adev-pm.fw-before-return-in-amdgp.patch
new file mode 100644 (file)
index 0000000..b822661
--- /dev/null
@@ -0,0 +1,48 @@
+From 1b06af6fb4a8c7db277d61c273de1e7c9ad6e56b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Dec 2023 18:13:11 +0530
+Subject: drm/amdgpu: Release 'adev->pm.fw' before return in
+ 'amdgpu_device_need_post()'
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
+
+[ Upstream commit 8a44fdd3cf91debbd09b43bd2519ad2b2486ccf4 ]
+
+In function 'amdgpu_device_need_post(struct amdgpu_device *adev)' -
+'adev->pm.fw' may not be released before return.
+
+Using the function release_firmware() to release adev->pm.fw.
+
+Thus fixing the below:
+drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:1571 amdgpu_device_need_post() warn: 'adev->pm.fw' from request_firmware() not released on lines: 1554.
+
+Cc: Monk Liu <Monk.Liu@amd.com>
+Cc: Christian König <christian.koenig@amd.com>
+Cc: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
+Suggested-by: Lijo Lazar <lijo.lazar@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+index c84f475d4f13..ae28f72c73ef 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+@@ -823,6 +823,7 @@ bool amdgpu_device_need_post(struct amdgpu_device *adev)
+                               return true;
+                       fw_ver = *((uint32_t *)adev->pm.fw->data + 69);
++                      release_firmware(adev->pm.fw);
+                       if (fw_ver < 0x00160e00)
+                               return true;
+               }
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-drm_file-fix-use-of-uninitialized-variable.patch b/queue-4.19/drm-drm_file-fix-use-of-uninitialized-variable.patch
new file mode 100644 (file)
index 0000000..88847b6
--- /dev/null
@@ -0,0 +1,43 @@
+From 916c8055d94b13c697b4ff474dd40a08b62dacf9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 3 Nov 2023 15:14:03 +0200
+Subject: drm/drm_file: fix use of uninitialized variable
+
+From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
+
+[ Upstream commit 1d3062fad9c7313fff9970a88e0538a24480ffb8 ]
+
+smatch reports:
+
+drivers/gpu/drm/drm_file.c:967 drm_show_memory_stats() error: uninitialized symbol 'supported_status'.
+
+'supported_status' is only set in one code path. I'm not familiar with
+the code to say if that path will always be ran in real life, but
+whether that is the case or not, I think it is good to initialize
+'supported_status' to 0 to silence the warning (and possibly fix a bug).
+
+Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
+Acked-by: Maxime Ripard <mripard@kernel.org>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20231103-uninit-fixes-v2-1-c22b2444f5f5@ideasonboard.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_file.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
+index 334addaca9c5..06cdae6f598c 100644
+--- a/drivers/gpu/drm/drm_file.c
++++ b/drivers/gpu/drm/drm_file.c
+@@ -299,7 +299,7 @@ int drm_open(struct inode *inode, struct file *filp)
+ {
+       struct drm_device *dev;
+       struct drm_minor *minor;
+-      int retcode;
++      int retcode = 0;
+       int need_setup = 0;
+       minor = drm_minor_acquire(iminor(inode));
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-exynos-call-drm_atomic_helper_shutdown-at-shutdo.patch b/queue-4.19/drm-exynos-call-drm_atomic_helper_shutdown-at-shutdo.patch
new file mode 100644 (file)
index 0000000..092bd9a
--- /dev/null
@@ -0,0 +1,86 @@
+From 6b8496f4d91efc27be4dd047350f9150f3934573 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Sep 2023 12:26:52 -0700
+Subject: drm/exynos: Call drm_atomic_helper_shutdown() at shutdown/unbind time
+
+From: Douglas Anderson <dianders@chromium.org>
+
+[ Upstream commit 16ac5b21b31b439f03cdf44c153c5f5af94fb3eb ]
+
+Based on grepping through the source code this driver appears to be
+missing a call to drm_atomic_helper_shutdown() at system shutdown time
+and at driver unbind time. Among other things, this means that if a
+panel is in use that it won't be cleanly powered off at system
+shutdown time.
+
+The fact that we should call drm_atomic_helper_shutdown() in the case
+of OS shutdown/restart and at driver remove (or unbind) time comes
+straight out of the kernel doc "driver instance overview" in
+drm_drv.c.
+
+A few notes about this fix:
+- When adding drm_atomic_helper_shutdown() to the unbind path, I added
+  it after drm_kms_helper_poll_fini() since that's when other drivers
+  seemed to have it.
+- Technically with a previous patch, ("drm/atomic-helper:
+  drm_atomic_helper_shutdown(NULL) should be a noop"), we don't
+  actually need to check to see if our "drm" pointer is NULL before
+  calling drm_atomic_helper_shutdown(). We'll leave the "if" test in,
+  though, so that this patch can land without any dependencies. It
+  could potentially be removed later.
+- This patch also makes sure to set the drvdata to NULL in the case of
+  bind errors to make sure that shutdown can't access freed data.
+
+Suggested-by: Maxime Ripard <mripard@kernel.org>
+Reviewed-by: Maxime Ripard <mripard@kernel.org>
+Signed-off-by: Douglas Anderson <dianders@chromium.org>
+Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Reviewed-by: Marek Szyprowski <m.szyprowski@samsung.com>
+Signed-off-by: Inki Dae <inki.dae@samsung.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/exynos/exynos_drm_drv.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
+index b599f74692e5..db09e2055c86 100644
+--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
++++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
+@@ -410,6 +410,7 @@ static int exynos_drm_bind(struct device *dev)
+       drm_release_iommu_mapping(drm);
+ err_free_private:
+       kfree(private);
++      dev_set_drvdata(dev, NULL);
+ err_free_drm:
+       drm_dev_put(drm);
+@@ -424,6 +425,7 @@ static void exynos_drm_unbind(struct device *dev)
+       exynos_drm_fbdev_fini(drm);
+       drm_kms_helper_poll_fini(drm);
++      drm_atomic_helper_shutdown(drm);
+       component_unbind_all(drm->dev, drm);
+       drm_mode_config_cleanup(drm);
+@@ -461,9 +463,18 @@ static int exynos_drm_platform_remove(struct platform_device *pdev)
+       return 0;
+ }
++static void exynos_drm_platform_shutdown(struct platform_device *pdev)
++{
++      struct drm_device *drm = platform_get_drvdata(pdev);
++
++      if (drm)
++              drm_atomic_helper_shutdown(drm);
++}
++
+ static struct platform_driver exynos_drm_platform_driver = {
+       .probe  = exynos_drm_platform_probe,
+       .remove = exynos_drm_platform_remove,
++      .shutdown = exynos_drm_platform_shutdown,
+       .driver = {
+               .name   = "exynos-drm",
+               .pm     = &exynos_drm_pm_ops,
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-framebuffer-fix-use-of-uninitialized-variable.patch b/queue-4.19/drm-framebuffer-fix-use-of-uninitialized-variable.patch
new file mode 100644 (file)
index 0000000..4b57084
--- /dev/null
@@ -0,0 +1,42 @@
+From f58c7bb31b4b9adc125b0b44fa9ff6906dddb183 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 3 Nov 2023 15:14:04 +0200
+Subject: drm/framebuffer: Fix use of uninitialized variable
+
+From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
+
+[ Upstream commit f9af8f0c1dc567a5a6a6318ff324c45d80d4a60f ]
+
+smatch reports:
+
+drivers/gpu/drm/drm_framebuffer.c:654 drm_mode_getfb2_ioctl() error: uninitialized symbol 'ret'.
+
+'ret' is possibly not set when there are no errors, causing the error
+above. I can't say if that ever happens in real-life, but in any case I
+think it is good to initialize 'ret' to 0.
+
+Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
+Acked-by: Maxime Ripard <mripard@kernel.org>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20231103-uninit-fixes-v2-2-c22b2444f5f5@ideasonboard.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_framebuffer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
+index b64a6ffc0aed..9fc4af4b10a6 100644
+--- a/drivers/gpu/drm/drm_framebuffer.c
++++ b/drivers/gpu/drm/drm_framebuffer.c
+@@ -538,7 +538,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
+       struct drm_framebuffer *fb;
+       unsigned flags;
+       int num_clips;
+-      int ret;
++      int ret = 0;
+       if (!drm_core_check_feature(dev, DRIVER_MODESET))
+               return -EINVAL;
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-mipi-dsi-fix-detach-call-without-attach.patch b/queue-4.19/drm-mipi-dsi-fix-detach-call-without-attach.patch
new file mode 100644 (file)
index 0000000..4d1a387
--- /dev/null
@@ -0,0 +1,138 @@
+From bd51b77d17ee118c1f6f97c099431b1b7e3d6a37 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Sep 2023 13:50:32 +0300
+Subject: drm/mipi-dsi: Fix detach call without attach
+
+From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
+
+[ Upstream commit 90d50b8d85834e73536fdccd5aa913b30494fef0 ]
+
+It's been reported that DSI host driver's detach can be called without
+the attach ever happening:
+
+https://lore.kernel.org/all/20230412073954.20601-1-tony@atomide.com/
+
+After reading the code, I think this is what happens:
+
+We have a DSI host defined in the device tree and a DSI peripheral under
+that host (i.e. an i2c device using the DSI as data bus doesn't exhibit
+this behavior).
+
+The host driver calls mipi_dsi_host_register(), which causes (via a few
+functions) mipi_dsi_device_add() to be called for the DSI peripheral. So
+now we have a DSI device under the host, but attach hasn't been called.
+
+Normally the probing of the devices continues, and eventually the DSI
+peripheral's driver will call mipi_dsi_attach(), attaching the
+peripheral.
+
+However, if the host driver's probe encounters an error after calling
+mipi_dsi_host_register(), and before the peripheral has called
+mipi_dsi_attach(), the host driver will do cleanups and return an error
+from its probe function. The cleanups include calling
+mipi_dsi_host_unregister().
+
+mipi_dsi_host_unregister() will call two functions for all its DSI
+peripheral devices: mipi_dsi_detach() and mipi_dsi_device_unregister().
+The latter makes sense, as the device exists, but the former may be
+wrong as attach has not necessarily been done.
+
+To fix this, track the attached state of the peripheral, and only detach
+from mipi_dsi_host_unregister() if the peripheral was attached.
+
+Note that I have only tested this with a board with an i2c DSI
+peripheral, not with a "pure" DSI peripheral.
+
+However, slightly related, the unregister machinery still seems broken.
+E.g. if the DSI host driver is unbound, it'll detach and unregister the
+DSI peripherals. After that, when the DSI peripheral driver unbound
+it'll call detach either directly or using the devm variant, leading to
+a crash. And probably the driver will crash if it happens, for some
+reason, to try to send a message via the DSI bus.
+
+But that's another topic.
+
+Tested-by: H. Nikolaus Schaller <hns@goldelico.com>
+Acked-by: Maxime Ripard <mripard@kernel.org>
+Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
+Tested-by: Tony Lindgren <tony@atomide.com>
+Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
+Link: https://patchwork.freedesktop.org/patch/msgid/20230921-dsi-detach-fix-v1-1-d0de2d1621d9@ideasonboard.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/drm_mipi_dsi.c | 17 +++++++++++++++--
+ include/drm/drm_mipi_dsi.h     |  2 ++
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
+index 81923442b42d..2bd4e768b129 100644
+--- a/drivers/gpu/drm/drm_mipi_dsi.c
++++ b/drivers/gpu/drm/drm_mipi_dsi.c
+@@ -305,7 +305,8 @@ static int mipi_dsi_remove_device_fn(struct device *dev, void *priv)
+ {
+       struct mipi_dsi_device *dsi = to_mipi_dsi_device(dev);
+-      mipi_dsi_detach(dsi);
++      if (dsi->attached)
++              mipi_dsi_detach(dsi);
+       mipi_dsi_device_unregister(dsi);
+       return 0;
+@@ -328,11 +329,18 @@ EXPORT_SYMBOL(mipi_dsi_host_unregister);
+ int mipi_dsi_attach(struct mipi_dsi_device *dsi)
+ {
+       const struct mipi_dsi_host_ops *ops = dsi->host->ops;
++      int ret;
+       if (!ops || !ops->attach)
+               return -ENOSYS;
+-      return ops->attach(dsi->host, dsi);
++      ret = ops->attach(dsi->host, dsi);
++      if (ret)
++              return ret;
++
++      dsi->attached = true;
++
++      return 0;
+ }
+ EXPORT_SYMBOL(mipi_dsi_attach);
+@@ -344,9 +352,14 @@ int mipi_dsi_detach(struct mipi_dsi_device *dsi)
+ {
+       const struct mipi_dsi_host_ops *ops = dsi->host->ops;
++      if (WARN_ON(!dsi->attached))
++              return -EINVAL;
++
+       if (!ops || !ops->detach)
+               return -ENOSYS;
++      dsi->attached = false;
++
+       return ops->detach(dsi->host, dsi);
+ }
+ EXPORT_SYMBOL(mipi_dsi_detach);
+diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h
+index 689f615471ab..a059f1d968b7 100644
+--- a/include/drm/drm_mipi_dsi.h
++++ b/include/drm/drm_mipi_dsi.h
+@@ -163,6 +163,7 @@ struct mipi_dsi_device_info {
+  * struct mipi_dsi_device - DSI peripheral device
+  * @host: DSI host for this peripheral
+  * @dev: driver model device node for this peripheral
++ * @attached: the DSI device has been successfully attached
+  * @name: DSI peripheral chip type
+  * @channel: virtual channel assigned to the peripheral
+  * @format: pixel format for video mode
+@@ -172,6 +173,7 @@ struct mipi_dsi_device_info {
+ struct mipi_dsi_device {
+       struct mipi_dsi_host *host;
+       struct device dev;
++      bool attached;
+       char name[DSI_DEV_NAME_SIZE];
+       unsigned int channel;
+-- 
+2.43.0
+
diff --git a/queue-4.19/drm-msm-dpu-ratelimit-framedone-timeout-msgs.patch b/queue-4.19/drm-msm-dpu-ratelimit-framedone-timeout-msgs.patch
new file mode 100644 (file)
index 0000000..06690f5
--- /dev/null
@@ -0,0 +1,62 @@
+From 5631d0b3283978f35200811cbe38235a08a337e9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Dec 2023 10:19:55 -0800
+Subject: drm/msm/dpu: Ratelimit framedone timeout msgs
+
+From: Rob Clark <robdclark@chromium.org>
+
+[ Upstream commit 2b72e50c62de60ad2d6bcd86aa38d4ccbdd633f2 ]
+
+When we start getting these, we get a *lot*.  So ratelimit it to not
+flood dmesg.
+
+Signed-off-by: Rob Clark <robdclark@chromium.org>
+Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
+Reviewed-by: Marijn Suijten <marijn.suijten@somainline.org>
+Patchwork: https://patchwork.freedesktop.org/patch/571584/
+Link: https://lore.kernel.org/r/20231211182000.218088-1-robdclark@gmail.com
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 5 ++++-
+ drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h     | 1 +
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+index 19e2753ffe07..a411cfe76998 100644
+--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
++++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
+@@ -53,6 +53,9 @@
+               (p) ? ((p)->hw_pp ? (p)->hw_pp->idx - PINGPONG_0 : -1) : -1, \
+               ##__VA_ARGS__)
++#define DPU_ERROR_ENC_RATELIMITED(e, fmt, ...) DPU_ERROR_RATELIMITED("enc%d " fmt,\
++              (e) ? (e)->base.base.id : -1, ##__VA_ARGS__)
++
+ /*
+  * Two to anticipate panels that can do cmd/vid dynamic switching
+  * plan is to create all possible physical encoder types, and switch between
+@@ -2326,7 +2329,7 @@ static void dpu_encoder_frame_done_timeout(struct timer_list *t)
+               return;
+       }
+-      DPU_ERROR_ENC(dpu_enc, "frame done timeout\n");
++      DPU_ERROR_ENC_RATELIMITED(dpu_enc, "frame done timeout\n");
+       event = DPU_ENCODER_FRAME_EVENT_ERROR;
+       trace_dpu_enc_frame_done_timeout(DRMID(drm_enc), event);
+diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
+index 66d466628e2b..56ae888e18fc 100644
+--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
++++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h
+@@ -61,6 +61,7 @@
+       } while (0)
+ #define DPU_ERROR(fmt, ...) pr_err("[dpu error]" fmt, ##__VA_ARGS__)
++#define DPU_ERROR_RATELIMITED(fmt, ...) pr_err_ratelimited("[dpu error]" fmt, ##__VA_ARGS__)
+ /**
+  * ktime_compare_safe - compare two ktime structures
+-- 
+2.43.0
+
diff --git a/queue-4.19/ext4-avoid-online-resizing-failures-due-to-oversized.patch b/queue-4.19/ext4-avoid-online-resizing-failures-due-to-oversized.patch
new file mode 100644 (file)
index 0000000..5a9e28b
--- /dev/null
@@ -0,0 +1,133 @@
+From dea5617850685afbafc547f8cb18949b550c0504 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Oct 2023 09:30:56 +0800
+Subject: ext4: avoid online resizing failures due to oversized flex bg
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Baokun Li <libaokun1@huawei.com>
+
+[ Upstream commit 5d1935ac02ca5aee364a449a35e2977ea84509b0 ]
+
+When we online resize an ext4 filesystem with a oversized flexbg_size,
+
+     mkfs.ext4 -F -G 67108864 $dev -b 4096 100M
+     mount $dev $dir
+     resize2fs $dev 16G
+
+the following WARN_ON is triggered:
+==================================================================
+WARNING: CPU: 0 PID: 427 at mm/page_alloc.c:4402 __alloc_pages+0x411/0x550
+Modules linked in: sg(E)
+CPU: 0 PID: 427 Comm: resize2fs Tainted: G  E  6.6.0-rc5+ #314
+RIP: 0010:__alloc_pages+0x411/0x550
+Call Trace:
+ <TASK>
+ __kmalloc_large_node+0xa2/0x200
+ __kmalloc+0x16e/0x290
+ ext4_resize_fs+0x481/0xd80
+ __ext4_ioctl+0x1616/0x1d90
+ ext4_ioctl+0x12/0x20
+ __x64_sys_ioctl+0xf0/0x150
+ do_syscall_64+0x3b/0x90
+==================================================================
+
+This is because flexbg_size is too large and the size of the new_group_data
+array to be allocated exceeds MAX_ORDER. Currently, the minimum value of
+MAX_ORDER is 8, the minimum value of PAGE_SIZE is 4096, the corresponding
+maximum number of groups that can be allocated is:
+
+ (PAGE_SIZE << MAX_ORDER) / sizeof(struct ext4_new_group_data) ≈ 21845
+
+And the value that is down-aligned to the power of 2 is 16384. Therefore,
+this value is defined as MAX_RESIZE_BG, and the number of groups added
+each time does not exceed this value during resizing, and is added multiple
+times to complete the online resizing. The difference is that the metadata
+in a flex_bg may be more dispersed.
+
+Signed-off-by: Baokun Li <libaokun1@huawei.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Link: https://lore.kernel.org/r/20231023013057.2117948-4-libaokun1@huawei.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/resize.c | 25 +++++++++++++++++--------
+ 1 file changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
+index d9a8742873c9..97af09d6e7e6 100644
+--- a/fs/ext4/resize.c
++++ b/fs/ext4/resize.c
+@@ -227,10 +227,17 @@ struct ext4_new_flex_group_data {
+                                                  in the flex group */
+       __u16 *bg_flags;                        /* block group flags of groups
+                                                  in @groups */
++      ext4_group_t resize_bg;                 /* number of allocated
++                                                 new_group_data */
+       ext4_group_t count;                     /* number of groups in @groups
+                                                */
+ };
++/*
++ * Avoiding memory allocation failures due to too many groups added each time.
++ */
++#define MAX_RESIZE_BG                         16384
++
+ /*
+  * alloc_flex_gd() allocates a ext4_new_flex_group_data with size of
+  * @flexbg_size.
+@@ -245,14 +252,18 @@ static struct ext4_new_flex_group_data *alloc_flex_gd(unsigned int flexbg_size)
+       if (flex_gd == NULL)
+               goto out3;
+-      flex_gd->count = flexbg_size;
+-      flex_gd->groups = kmalloc_array(flexbg_size,
++      if (unlikely(flexbg_size > MAX_RESIZE_BG))
++              flex_gd->resize_bg = MAX_RESIZE_BG;
++      else
++              flex_gd->resize_bg = flexbg_size;
++
++      flex_gd->groups = kmalloc_array(flex_gd->resize_bg,
+                                       sizeof(struct ext4_new_group_data),
+                                       GFP_NOFS);
+       if (flex_gd->groups == NULL)
+               goto out2;
+-      flex_gd->bg_flags = kmalloc_array(flexbg_size, sizeof(__u16),
++      flex_gd->bg_flags = kmalloc_array(flex_gd->resize_bg, sizeof(__u16),
+                                         GFP_NOFS);
+       if (flex_gd->bg_flags == NULL)
+               goto out1;
+@@ -1581,8 +1592,7 @@ static int ext4_flex_group_add(struct super_block *sb,
+ static int ext4_setup_next_flex_gd(struct super_block *sb,
+                                   struct ext4_new_flex_group_data *flex_gd,
+-                                  ext4_fsblk_t n_blocks_count,
+-                                  unsigned int flexbg_size)
++                                  ext4_fsblk_t n_blocks_count)
+ {
+       struct ext4_sb_info *sbi = EXT4_SB(sb);
+       struct ext4_super_block *es = sbi->s_es;
+@@ -1606,7 +1616,7 @@ static int ext4_setup_next_flex_gd(struct super_block *sb,
+       BUG_ON(last);
+       ext4_get_group_no_and_offset(sb, n_blocks_count - 1, &n_group, &last);
+-      last_group = group | (flexbg_size - 1);
++      last_group = group | (flex_gd->resize_bg - 1);
+       if (last_group > n_group)
+               last_group = n_group;
+@@ -2105,8 +2115,7 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
+       /* Add flex groups. Note that a regular group is a
+        * flex group with 1 group.
+        */
+-      while (ext4_setup_next_flex_gd(sb, flex_gd, n_blocks_count,
+-                                            flexbg_size)) {
++      while (ext4_setup_next_flex_gd(sb, flex_gd, n_blocks_count)) {
+               if (jiffies - last_update_time > HZ * 10) {
+                       if (last_update_time)
+                               ext4_msg(sb, KERN_INFO,
+-- 
+2.43.0
+
diff --git a/queue-4.19/ext4-fix-inconsistent-between-segment-fstrim-and-ful.patch b/queue-4.19/ext4-fix-inconsistent-between-segment-fstrim-and-ful.patch
new file mode 100644 (file)
index 0000000..780becb
--- /dev/null
@@ -0,0 +1,66 @@
+From 02cb0d5ab7ebc8eb13f6cab82c26d7d195196b26 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 16 Dec 2023 09:09:19 +0800
+Subject: ext4: fix inconsistent between segment fstrim and full fstrim
+
+From: Ye Bin <yebin10@huawei.com>
+
+[ Upstream commit 68da4c44b994aea797eb9821acb3a4a36015293e ]
+
+Suppose we issue two FITRIM ioctls for ranges [0,15] and [16,31] with
+mininum length of trimmed range set to 8 blocks. If we have say a range of
+blocks 10-22 free, this range will not be trimmed because it straddles the
+boundary of the two FITRIM ranges and neither part is big enough. This is a
+bit surprising to some users that call FITRIM on smaller ranges of blocks
+to limit impact on the system. Also XFS trims all free space extents that
+overlap with the specified range so we are inconsistent among filesystems.
+Let's change ext4_try_to_trim_range() to consider for trimming the whole
+free space extent that straddles the end of specified range, not just the
+part of it within the range.
+
+Signed-off-by: Ye Bin <yebin10@huawei.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Link: https://lore.kernel.org/r/20231216010919.1995851-1-yebin10@huawei.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/mballoc.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
+index 0572ae09c729..df390979058f 100644
+--- a/fs/ext4/mballoc.c
++++ b/fs/ext4/mballoc.c
+@@ -5213,13 +5213,15 @@ static int ext4_try_to_trim_range(struct super_block *sb,
+               struct ext4_buddy *e4b, ext4_grpblk_t start,
+               ext4_grpblk_t max, ext4_grpblk_t minblocks)
+ {
+-      ext4_grpblk_t next, count, free_count;
++      ext4_grpblk_t next, count, free_count, last, origin_start;
+       bool set_trimmed = false;
+       void *bitmap;
++      last = ext4_last_grp_cluster(sb, e4b->bd_group);
+       bitmap = e4b->bd_bitmap;
+-      if (start == 0 && max >= ext4_last_grp_cluster(sb, e4b->bd_group))
++      if (start == 0 && max >= last)
+               set_trimmed = true;
++      origin_start = start;
+       start = max(e4b->bd_info->bb_first_free, start);
+       count = 0;
+       free_count = 0;
+@@ -5228,7 +5230,10 @@ static int ext4_try_to_trim_range(struct super_block *sb,
+               start = mb_find_next_zero_bit(bitmap, max + 1, start);
+               if (start > max)
+                       break;
+-              next = mb_find_next_bit(bitmap, max + 1, start);
++
++              next = mb_find_next_bit(bitmap, last + 1, start);
++              if (origin_start == 0 && next >= last)
++                      set_trimmed = true;
+               if ((next - start) >= minblocks) {
+                       int ret = ext4_trim_extent(sb, start, next - start, e4b);
+-- 
+2.43.0
+
diff --git a/queue-4.19/ext4-remove-unnecessary-check-from-alloc_flex_gd.patch b/queue-4.19/ext4-remove-unnecessary-check-from-alloc_flex_gd.patch
new file mode 100644 (file)
index 0000000..0b91c51
--- /dev/null
@@ -0,0 +1,44 @@
+From f571161a340d7e807f7a0fde07a0d20fa0df9859 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Oct 2023 09:30:55 +0800
+Subject: ext4: remove unnecessary check from alloc_flex_gd()
+
+From: Baokun Li <libaokun1@huawei.com>
+
+[ Upstream commit b099eb87de105cf07cad731ded6fb40b2675108b ]
+
+In commit 967ac8af4475 ("ext4: fix potential integer overflow in
+alloc_flex_gd()"), an overflow check is added to alloc_flex_gd() to
+prevent the allocated memory from being smaller than expected due to
+the overflow. However, after kmalloc() is replaced with kmalloc_array()
+in commit 6da2ec56059c ("treewide: kmalloc() -> kmalloc_array()"), the
+kmalloc_array() function has an overflow check, so the above problem
+will not occur. Therefore, the extra check is removed.
+
+Signed-off-by: Baokun Li <libaokun1@huawei.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Link: https://lore.kernel.org/r/20231023013057.2117948-3-libaokun1@huawei.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/resize.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
+index 2d27d4e06f7b..d9a8742873c9 100644
+--- a/fs/ext4/resize.c
++++ b/fs/ext4/resize.c
+@@ -245,10 +245,7 @@ static struct ext4_new_flex_group_data *alloc_flex_gd(unsigned int flexbg_size)
+       if (flex_gd == NULL)
+               goto out3;
+-      if (flexbg_size >= UINT_MAX / sizeof(struct ext4_new_group_data))
+-              goto out2;
+       flex_gd->count = flexbg_size;
+-
+       flex_gd->groups = kmalloc_array(flexbg_size,
+                                       sizeof(struct ext4_new_group_data),
+                                       GFP_NOFS);
+-- 
+2.43.0
+
diff --git a/queue-4.19/ext4-unify-the-type-of-flexbg_size-to-unsigned-int.patch b/queue-4.19/ext4-unify-the-type-of-flexbg_size-to-unsigned-int.patch
new file mode 100644 (file)
index 0000000..3fd6335
--- /dev/null
@@ -0,0 +1,89 @@
+From 83d2512da59a509e34d8a95f09b11a164b072486 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Oct 2023 09:30:54 +0800
+Subject: ext4: unify the type of flexbg_size to unsigned int
+
+From: Baokun Li <libaokun1@huawei.com>
+
+[ Upstream commit 658a52344fb139f9531e7543a6e0015b630feb38 ]
+
+The maximum value of flexbg_size is 2^31, but the maximum value of int
+is (2^31 - 1), so overflow may occur when the type of flexbg_size is
+declared as int.
+
+For example, when uninit_mask is initialized in ext4_alloc_group_tables(),
+if flexbg_size == 2^31, the initialized uninit_mask is incorrect, and this
+may causes set_flexbg_block_bitmap() to trigger a BUG_ON().
+
+Therefore, the flexbg_size type is declared as unsigned int to avoid
+overflow and memory waste.
+
+Signed-off-by: Baokun Li <libaokun1@huawei.com>
+Reviewed-by: Jan Kara <jack@suse.cz>
+Link: https://lore.kernel.org/r/20231023013057.2117948-2-libaokun1@huawei.com
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/ext4/resize.c | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
+index f4b3d450dead..2d27d4e06f7b 100644
+--- a/fs/ext4/resize.c
++++ b/fs/ext4/resize.c
+@@ -237,7 +237,7 @@ struct ext4_new_flex_group_data {
+  *
+  * Returns NULL on failure otherwise address of the allocated structure.
+  */
+-static struct ext4_new_flex_group_data *alloc_flex_gd(unsigned long flexbg_size)
++static struct ext4_new_flex_group_data *alloc_flex_gd(unsigned int flexbg_size)
+ {
+       struct ext4_new_flex_group_data *flex_gd;
+@@ -292,7 +292,7 @@ static void free_flex_gd(struct ext4_new_flex_group_data *flex_gd)
+  */
+ static int ext4_alloc_group_tables(struct super_block *sb,
+                               struct ext4_new_flex_group_data *flex_gd,
+-                              int flexbg_size)
++                              unsigned int flexbg_size)
+ {
+       struct ext4_new_group_data *group_data = flex_gd->groups;
+       ext4_fsblk_t start_blk;
+@@ -393,12 +393,12 @@ static int ext4_alloc_group_tables(struct super_block *sb,
+               group = group_data[0].group;
+               printk(KERN_DEBUG "EXT4-fs: adding a flex group with "
+-                     "%d groups, flexbg size is %d:\n", flex_gd->count,
++                     "%u groups, flexbg size is %u:\n", flex_gd->count,
+                      flexbg_size);
+               for (i = 0; i < flex_gd->count; i++) {
+                       ext4_debug(
+-                             "adding %s group %u: %u blocks (%d free, %d mdata blocks)\n",
++                             "adding %s group %u: %u blocks (%u free, %u mdata blocks)\n",
+                              ext4_bg_has_super(sb, group + i) ? "normal" :
+                              "no-super", group + i,
+                              group_data[i].blocks_count,
+@@ -1585,7 +1585,7 @@ static int ext4_flex_group_add(struct super_block *sb,
+ static int ext4_setup_next_flex_gd(struct super_block *sb,
+                                   struct ext4_new_flex_group_data *flex_gd,
+                                   ext4_fsblk_t n_blocks_count,
+-                                  unsigned long flexbg_size)
++                                  unsigned int flexbg_size)
+ {
+       struct ext4_sb_info *sbi = EXT4_SB(sb);
+       struct ext4_super_block *es = sbi->s_es;
+@@ -1965,8 +1965,9 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
+       ext4_fsblk_t o_blocks_count;
+       ext4_fsblk_t n_blocks_count_retry = 0;
+       unsigned long last_update_time = 0;
+-      int err = 0, flexbg_size = 1 << sbi->s_log_groups_per_flex;
++      int err = 0;
+       int meta_bg;
++      unsigned int flexbg_size = ext4_flex_bg_size(sbi);
+       /* See if the device is actually as big as what was requested */
+       bh = sb_bread(sb, n_blocks_count - 1);
+-- 
+2.43.0
+
diff --git a/queue-4.19/f2fs-fix-to-check-return-value-of-f2fs_reserve_new_b.patch b/queue-4.19/f2fs-fix-to-check-return-value-of-f2fs_reserve_new_b.patch
new file mode 100644 (file)
index 0000000..3c9a896
--- /dev/null
@@ -0,0 +1,69 @@
+From 0f4745ca879f6a8a40787dc028f20e3f53fec23e Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 16 Nov 2023 14:25:56 +0800
+Subject: f2fs: fix to check return value of f2fs_reserve_new_block()
+
+From: Chao Yu <chao@kernel.org>
+
+[ Upstream commit 956fa1ddc132e028f3b7d4cf17e6bfc8cb36c7fd ]
+
+Let's check return value of f2fs_reserve_new_block() in do_recover_data()
+rather than letting it fails silently.
+
+Also refactoring check condition on return value of f2fs_reserve_new_block()
+as below:
+- trigger f2fs_bug_on() only for ENOSPC case;
+- use do-while statement to avoid redundant codes;
+
+Signed-off-by: Chao Yu <chao@kernel.org>
+Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/f2fs/recovery.c | 23 +++++++++++++++++------
+ 1 file changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
+index ad0486beee2c..fffc7a9de04b 100644
+--- a/fs/f2fs/recovery.c
++++ b/fs/f2fs/recovery.c
+@@ -548,7 +548,16 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
+                */
+               if (dest == NEW_ADDR) {
+                       f2fs_truncate_data_blocks_range(&dn, 1);
+-                      f2fs_reserve_new_block(&dn);
++                      do {
++                              err = f2fs_reserve_new_block(&dn);
++                              if (err == -ENOSPC) {
++                                      f2fs_bug_on(sbi, 1);
++                                      break;
++                              }
++                      } while (err &&
++                              IS_ENABLED(CONFIG_F2FS_FAULT_INJECTION));
++                      if (err)
++                              goto err;
+                       continue;
+               }
+@@ -556,12 +565,14 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
+               if (f2fs_is_valid_blkaddr(sbi, dest, META_POR)) {
+                       if (src == NULL_ADDR) {
+-                              err = f2fs_reserve_new_block(&dn);
+-                              while (err &&
+-                                     IS_ENABLED(CONFIG_F2FS_FAULT_INJECTION))
++                              do {
+                                       err = f2fs_reserve_new_block(&dn);
+-                              /* We should not get -ENOSPC */
+-                              f2fs_bug_on(sbi, err);
++                                      if (err == -ENOSPC) {
++                                              f2fs_bug_on(sbi, 1);
++                                              break;
++                                      }
++                              } while (err &&
++                                      IS_ENABLED(CONFIG_F2FS_FAULT_INJECTION));
+                               if (err)
+                                       goto err;
+                       }
+-- 
+2.43.0
+
diff --git a/queue-4.19/fast_dput-handle-underflows-gracefully.patch b/queue-4.19/fast_dput-handle-underflows-gracefully.patch
new file mode 100644 (file)
index 0000000..40137b0
--- /dev/null
@@ -0,0 +1,78 @@
+From c537bad63f4413238328356939b1d22c0a0050db Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 1 Nov 2023 01:08:54 -0400
+Subject: fast_dput(): handle underflows gracefully
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+[ Upstream commit 504e08cebe1d4e1efe25f915234f646e74a364a8 ]
+
+If refcount is less than 1, we should just warn, unlock dentry and
+return true, so that the caller doesn't try to do anything else.
+
+Taking care of that leaves the rest of "lockref_put_return() has
+failed" case equivalent to "decrement refcount and rejoin the
+normal slow path after the point where we grab ->d_lock".
+
+NOTE: lockref_put_return() is strictly a fastpath thing - unlike
+the rest of lockref primitives, it does not contain a fallback.
+Caller (and it looks like fast_dput() is the only legitimate one
+in the entire kernel) has to do that itself.  Reasons for
+lockref_put_return() failures:
+       * ->d_lock held by somebody
+       * refcount <= 0
+       * ... or an architecture not supporting lockref use of
+cmpxchg - sparc, anything non-SMP, config with spinlock debugging...
+
+We could add a fallback, but it would be a clumsy API - we'd have
+to distinguish between:
+       (1) refcount > 1 - decremented, lock not held on return
+       (2) refcount < 1 - left alone, probably no sense to hold the lock
+       (3) refcount is 1, no cmphxcg - decremented, lock held on return
+       (4) refcount is 1, cmphxcg supported - decremented, lock *NOT* held
+           on return.
+We want to return with no lock held in case (4); that's the whole point of that
+thing.  We very much do not want to have the fallback in case (3) return without
+a lock, since the caller might have to retake it in that case.
+So it wouldn't be more convenient than doing the fallback in the caller and
+it would be very easy to screw up, especially since the test coverage would
+suck - no way to test (3) and (4) on the same kernel build.
+
+Reviewed-by: Christian Brauner <brauner@kernel.org>
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/dcache.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/fs/dcache.c b/fs/dcache.c
+index 1897833a4668..4d96eb591f5d 100644
+--- a/fs/dcache.c
++++ b/fs/dcache.c
+@@ -727,12 +727,12 @@ static inline bool fast_dput(struct dentry *dentry)
+        */
+       if (unlikely(ret < 0)) {
+               spin_lock(&dentry->d_lock);
+-              if (dentry->d_lockref.count > 1) {
+-                      dentry->d_lockref.count--;
++              if (WARN_ON_ONCE(dentry->d_lockref.count <= 0)) {
+                       spin_unlock(&dentry->d_lock);
+                       return true;
+               }
+-              return false;
++              dentry->d_lockref.count--;
++              goto locked;
+       }
+       /*
+@@ -783,6 +783,7 @@ static inline bool fast_dput(struct dentry *dentry)
+        * else could have killed it and marked it dead. Either way, we
+        * don't need to do anything else.
+        */
++locked:
+       if (dentry->d_lockref.count) {
+               spin_unlock(&dentry->d_lock);
+               return true;
+-- 
+2.43.0
+
diff --git a/queue-4.19/fs-jfs-ubsan-array-index-out-of-bounds-in-dbadjtree.patch b/queue-4.19/fs-jfs-ubsan-array-index-out-of-bounds-in-dbadjtree.patch
new file mode 100644 (file)
index 0000000..d4f0d61
--- /dev/null
@@ -0,0 +1,99 @@
+From 1b8bb1060fc0f9dcde8aa546bfd10c3d942db775 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 11 Oct 2023 23:46:37 +0500
+Subject: FS:JFS:UBSAN:array-index-out-of-bounds in dbAdjTree
+
+From: Osama Muhammad <osmtendev@gmail.com>
+
+[ Upstream commit 9862ec7ac1cbc6eb5ee4a045b5d5b8edbb2f7e68 ]
+
+Syzkaller reported the following issue:
+
+UBSAN: array-index-out-of-bounds in fs/jfs/jfs_dmap.c:2867:6
+index 196694 is out of range for type 's8[1365]' (aka 'signed char[1365]')
+CPU: 1 PID: 109 Comm: jfsCommit Not tainted 6.6.0-rc3-syzkaller #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/04/2023
+Call Trace:
+ <TASK>
+ __dump_stack lib/dump_stack.c:88 [inline]
+ dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
+ ubsan_epilogue lib/ubsan.c:217 [inline]
+ __ubsan_handle_out_of_bounds+0x11c/0x150 lib/ubsan.c:348
+ dbAdjTree+0x474/0x4f0 fs/jfs/jfs_dmap.c:2867
+ dbJoin+0x210/0x2d0 fs/jfs/jfs_dmap.c:2834
+ dbFreeBits+0x4eb/0xda0 fs/jfs/jfs_dmap.c:2331
+ dbFreeDmap fs/jfs/jfs_dmap.c:2080 [inline]
+ dbFree+0x343/0x650 fs/jfs/jfs_dmap.c:402
+ txFreeMap+0x798/0xd50 fs/jfs/jfs_txnmgr.c:2534
+ txUpdateMap+0x342/0x9e0
+ txLazyCommit fs/jfs/jfs_txnmgr.c:2664 [inline]
+ jfs_lazycommit+0x47a/0xb70 fs/jfs/jfs_txnmgr.c:2732
+ kthread+0x2d3/0x370 kernel/kthread.c:388
+ ret_from_fork+0x48/0x80 arch/x86/kernel/process.c:147
+ ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304
+ </TASK>
+================================================================================
+Kernel panic - not syncing: UBSAN: panic_on_warn set ...
+CPU: 1 PID: 109 Comm: jfsCommit Not tainted 6.6.0-rc3-syzkaller #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/04/2023
+Call Trace:
+ <TASK>
+ __dump_stack lib/dump_stack.c:88 [inline]
+ dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
+ panic+0x30f/0x770 kernel/panic.c:340
+ check_panic_on_warn+0x82/0xa0 kernel/panic.c:236
+ ubsan_epilogue lib/ubsan.c:223 [inline]
+ __ubsan_handle_out_of_bounds+0x13c/0x150 lib/ubsan.c:348
+ dbAdjTree+0x474/0x4f0 fs/jfs/jfs_dmap.c:2867
+ dbJoin+0x210/0x2d0 fs/jfs/jfs_dmap.c:2834
+ dbFreeBits+0x4eb/0xda0 fs/jfs/jfs_dmap.c:2331
+ dbFreeDmap fs/jfs/jfs_dmap.c:2080 [inline]
+ dbFree+0x343/0x650 fs/jfs/jfs_dmap.c:402
+ txFreeMap+0x798/0xd50 fs/jfs/jfs_txnmgr.c:2534
+ txUpdateMap+0x342/0x9e0
+ txLazyCommit fs/jfs/jfs_txnmgr.c:2664 [inline]
+ jfs_lazycommit+0x47a/0xb70 fs/jfs/jfs_txnmgr.c:2732
+ kthread+0x2d3/0x370 kernel/kthread.c:388
+ ret_from_fork+0x48/0x80 arch/x86/kernel/process.c:147
+ ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304
+ </TASK>
+Kernel Offset: disabled
+Rebooting in 86400 seconds..
+
+The issue is caused when the value of lp becomes greater than
+CTLTREESIZE which is the max size of stree. Adding a simple check
+solves this issue.
+
+Dave:
+As the function returns a void, good error handling
+would require a more intrusive code reorganization, so I modified
+Osama's patch at use WARN_ON_ONCE for lack of a cleaner option.
+
+The patch is tested via syzbot.
+
+Reported-by: syzbot+39ba34a099ac2e9bd3cb@syzkaller.appspotmail.com
+Link: https://syzkaller.appspot.com/bug?extid=39ba34a099ac2e9bd3cb
+Signed-off-by: Osama Muhammad <osmtendev@gmail.com>
+Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jfs/jfs_dmap.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c
+index 2f452b5ee731..b7fc47907d96 100644
+--- a/fs/jfs/jfs_dmap.c
++++ b/fs/jfs/jfs_dmap.c
+@@ -2948,6 +2948,9 @@ static void dbAdjTree(dmtree_t * tp, int leafno, int newval)
+       /* is the current value the same as the old value ?  if so,
+        * there is nothing to do.
+        */
++      if (WARN_ON_ONCE(lp >= CTLTREESIZE))
++              return;
++
+       if (tp->dmt_stree[lp] == newval)
+               return;
+-- 
+2.43.0
+
diff --git a/queue-4.19/hexagon-make-pfn-accessors-statics-inlines.patch b/queue-4.19/hexagon-make-pfn-accessors-statics-inlines.patch
new file mode 100644 (file)
index 0000000..8e4129e
--- /dev/null
@@ -0,0 +1,68 @@
+From 95d666d27f4c989feb728dca27363e83bccf00a6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Nov 2023 14:28:15 +0100
+Subject: Hexagon: Make pfn accessors statics inlines
+
+From: Linus Walleij <linus.walleij@linaro.org>
+
+[ Upstream commit d6e81532b10d8deb2bc30f7b44f09534876893e3 ]
+
+Making virt_to_pfn() a static inline taking a strongly typed
+(const void *) makes the contract of a passing a pointer of that
+type to the function explicit and exposes any misuse of the
+macro virt_to_pfn() acting polymorphic and accepting many types
+such as (void *), (unitptr_t) or (unsigned long) as arguments
+without warnings.
+
+For symmetry do the same with pfn_to_virt().
+
+For compiletime resolution of __pa() we need PAGE_OFFSET which
+was not available to __pa() and resolved by the preprocessor
+wherever __pa() was used. Fix this by explicitly including
+<asm/mem-layout.h> where required, following the pattern of the
+architectures page.h file.
+
+Acked-by: Brian Cain <bcain@quicinc.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/hexagon/include/asm/page.h | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/arch/hexagon/include/asm/page.h b/arch/hexagon/include/asm/page.h
+index 93f5669b4aa1..a12ba19e6460 100644
+--- a/arch/hexagon/include/asm/page.h
++++ b/arch/hexagon/include/asm/page.h
+@@ -91,6 +91,9 @@ typedef struct page *pgtable_t;
+ #define __pgd(x)       ((pgd_t) { (x) })
+ #define __pgprot(x)    ((pgprot_t) { (x) })
++/* Needed for PAGE_OFFSET used in the macro right below */
++#include <asm/mem-layout.h>
++
+ /*
+  * We need a __pa and a __va routine for kernel space.
+  * MIPS says they're only used during mem_init.
+@@ -140,8 +143,16 @@ static inline void clear_page(void *page)
+  */
+ #define page_to_phys(page)      (page_to_pfn(page) << PAGE_SHIFT)
+-#define virt_to_pfn(kaddr)      (__pa(kaddr) >> PAGE_SHIFT)
+-#define pfn_to_virt(pfn)        __va((pfn) << PAGE_SHIFT)
++static inline unsigned long virt_to_pfn(const void *kaddr)
++{
++      return __pa(kaddr) >> PAGE_SHIFT;
++}
++
++static inline void *pfn_to_virt(unsigned long pfn)
++{
++      return (void *)((unsigned long)__va(pfn) << PAGE_SHIFT);
++}
++
+ #define page_to_virt(page)    __va(page_to_phys(page))
+-- 
+2.43.0
+
diff --git a/queue-4.19/hwmon-pc87360-bounds-check-data-innr-usage.patch b/queue-4.19/hwmon-pc87360-bounds-check-data-innr-usage.patch
new file mode 100644 (file)
index 0000000..f891f30
--- /dev/null
@@ -0,0 +1,60 @@
+From c17402ef78ee304ee43c1ef233f373b0a2bfc7fd Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Nov 2023 12:02:07 -0800
+Subject: hwmon: (pc87360) Bounds check data->innr usage
+
+From: Kees Cook <keescook@chromium.org>
+
+[ Upstream commit 4265eb062a7303e537ab3792ade31f424c3c5189 ]
+
+Without visibility into the initializers for data->innr, GCC suspects
+using it as an index could walk off the end of the various 14-element
+arrays in data. Perform an explicit clamp to the array size. Silences
+the following warning with GCC 12+:
+
+../drivers/hwmon/pc87360.c: In function 'pc87360_update_device':
+../drivers/hwmon/pc87360.c:341:49: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
+  341 |                                 data->in_max[i] = pc87360_read_value(data,
+      |                                 ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
+  342 |                                                   LD_IN, i,
+      |                                                   ~~~~~~~~~
+  343 |                                                   PC87365_REG_IN_MAX);
+      |                                                   ~~~~~~~~~~~~~~~~~~~
+../drivers/hwmon/pc87360.c:209:12: note: at offset 255 into destination object 'in_max' of size 14
+  209 |         u8 in_max[14];          /* Register value */
+      |            ^~~~~~
+
+Cc: Jim Cromie <jim.cromie@gmail.com>
+Cc: Jean Delvare <jdelvare@suse.com>
+Cc: Guenter Roeck <linux@roeck-us.net>
+Cc: linux-hwmon@vger.kernel.org
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
+Link: https://lore.kernel.org/r/20231130200207.work.679-kees@kernel.org
+[groeck: Added comment into code clarifying context]
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/hwmon/pc87360.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/hwmon/pc87360.c b/drivers/hwmon/pc87360.c
+index 7e3697727537..d2b3137dccd4 100644
+--- a/drivers/hwmon/pc87360.c
++++ b/drivers/hwmon/pc87360.c
+@@ -1637,7 +1637,11 @@ static struct pc87360_data *pc87360_update_device(struct device *dev)
+               }
+               /* Voltages */
+-              for (i = 0; i < data->innr; i++) {
++              /*
++               * The min() below does not have any practical meaning and is
++               * only needed to silence a warning observed with gcc 12+.
++               */
++              for (i = 0; i < min(data->innr, ARRAY_SIZE(data->in)); i++) {
+                       data->in_status[i] = pc87360_read_value(data, LD_IN, i,
+                                            PC87365_REG_IN_STATUS);
+                       /* Clear bits */
+-- 
+2.43.0
+
diff --git a/queue-4.19/ib-ipoib-fix-mcast-list-locking.patch b/queue-4.19/ib-ipoib-fix-mcast-list-locking.patch
new file mode 100644 (file)
index 0000000..6a1502b
--- /dev/null
@@ -0,0 +1,94 @@
+From 8e557c74f9730eee998f6918c8f60649230b0387 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Dec 2023 09:07:45 +0100
+Subject: IB/ipoib: Fix mcast list locking
+
+From: Daniel Vacek <neelx@redhat.com>
+
+[ Upstream commit 4f973e211b3b1c6d36f7c6a19239d258856749f9 ]
+
+Releasing the `priv->lock` while iterating the `priv->multicast_list` in
+`ipoib_mcast_join_task()` opens a window for `ipoib_mcast_dev_flush()` to
+remove the items while in the middle of iteration. If the mcast is removed
+while the lock was dropped, the for loop spins forever resulting in a hard
+lockup (as was reported on RHEL 4.18.0-372.75.1.el8_6 kernel):
+
+    Task A (kworker/u72:2 below)       | Task B (kworker/u72:0 below)
+    -----------------------------------+-----------------------------------
+    ipoib_mcast_join_task(work)        | ipoib_ib_dev_flush_light(work)
+      spin_lock_irq(&priv->lock)       | __ipoib_ib_dev_flush(priv, ...)
+      list_for_each_entry(mcast,       | ipoib_mcast_dev_flush(dev = priv->dev)
+          &priv->multicast_list, list) |
+        ipoib_mcast_join(dev, mcast)   |
+          spin_unlock_irq(&priv->lock) |
+                                       |   spin_lock_irqsave(&priv->lock, flags)
+                                       |   list_for_each_entry_safe(mcast, tmcast,
+                                       |                  &priv->multicast_list, list)
+                                       |     list_del(&mcast->list);
+                                       |     list_add_tail(&mcast->list, &remove_list)
+                                       |   spin_unlock_irqrestore(&priv->lock, flags)
+          spin_lock_irq(&priv->lock)   |
+                                       |   ipoib_mcast_remove_list(&remove_list)
+   (Here, `mcast` is no longer on the  |     list_for_each_entry_safe(mcast, tmcast,
+    `priv->multicast_list` and we keep |                            remove_list, list)
+    spinning on the `remove_list` of   |  >>>  wait_for_completion(&mcast->done)
+    the other thread which is blocked  |
+    and the list is still valid on     |
+    it's stack.)
+
+Fix this by keeping the lock held and changing to GFP_ATOMIC to prevent
+eventual sleeps.
+Unfortunately we could not reproduce the lockup and confirm this fix but
+based on the code review I think this fix should address such lockups.
+
+crash> bc 31
+PID: 747      TASK: ff1c6a1a007e8000  CPU: 31   COMMAND: "kworker/u72:2"
+--
+    [exception RIP: ipoib_mcast_join_task+0x1b1]
+    RIP: ffffffffc0944ac1  RSP: ff646f199a8c7e00  RFLAGS: 00000002
+    RAX: 0000000000000000  RBX: ff1c6a1a04dc82f8  RCX: 0000000000000000
+                                  work (&priv->mcast_task{,.work})
+    RDX: ff1c6a192d60ac68  RSI: 0000000000000286  RDI: ff1c6a1a04dc8000
+           &mcast->list
+    RBP: ff646f199a8c7e90   R8: ff1c699980019420   R9: ff1c6a1920c9a000
+    R10: ff646f199a8c7e00  R11: ff1c6a191a7d9800  R12: ff1c6a192d60ac00
+                                                         mcast
+    R13: ff1c6a1d82200000  R14: ff1c6a1a04dc8000  R15: ff1c6a1a04dc82d8
+           dev                    priv (&priv->lock)     &priv->multicast_list (aka head)
+    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+index 805df1fcba84..de82fb0cb1d5 100644
+--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
++++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+@@ -543,21 +543,17 @@ static int ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
+                       /* SM supports sendonly-fullmember, otherwise fallback to full-member */
+                       rec.join_state = SENDONLY_FULLMEMBER_JOIN;
+       }
+-      spin_unlock_irq(&priv->lock);
+       multicast = ib_sa_join_multicast(&ipoib_sa_client, priv->ca, priv->port,
+-                                       &rec, comp_mask, GFP_KERNEL,
++                                       &rec, comp_mask, GFP_ATOMIC,
+                                        ipoib_mcast_join_complete, mcast);
+-      spin_lock_irq(&priv->lock);
+       if (IS_ERR(multicast)) {
+               ret = PTR_ERR(multicast);
+               ipoib_warn(priv, "ib_sa_join_multicast failed, status %d\n", ret);
+               /* Requeue this join task with a backoff delay */
+               __ipoib_mcast_schedule_join_thread(priv, mcast, 1);
+               clear_bit(IPOIB_MCAST_FLAG_BUSY, &mcast->flags);
+-              spin_unlock_irq(&priv->lock);
+               complete(&mcast->done);
+-              spin_lock_irq(&priv->lock);
+               return ret;
+       }
+       return 0;
+-- 
+2.43.0
+
diff --git a/queue-4.19/jfs-fix-array-index-out-of-bounds-in-dbadjtree.patch b/queue-4.19/jfs-fix-array-index-out-of-bounds-in-dbadjtree.patch
new file mode 100644 (file)
index 0000000..c6f16ce
--- /dev/null
@@ -0,0 +1,237 @@
+From 2f4c1c9720a95edbc72e83b7c55bf1659e88921c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 17 Oct 2023 17:33:56 +0530
+Subject: jfs: fix array-index-out-of-bounds in dbAdjTree
+
+From: Manas Ghandat <ghandatmanas@gmail.com>
+
+[ Upstream commit 74ecdda68242b174920fe7c6133a856fb7d8559b ]
+
+Currently there is a bound check missing in the dbAdjTree while
+accessing the dmt_stree. To add the required check added the bool is_ctl
+which is required to determine the size as suggest in the following
+commit.
+https://lore.kernel.org/linux-kernel-mentees/f9475918-2186-49b8-b801-6f0f9e75f4fa@oracle.com/
+
+Reported-by: syzbot+39ba34a099ac2e9bd3cb@syzkaller.appspotmail.com
+Closes: https://syzkaller.appspot.com/bug?extid=39ba34a099ac2e9bd3cb
+Signed-off-by: Manas Ghandat <ghandatmanas@gmail.com>
+Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jfs/jfs_dmap.c | 60 ++++++++++++++++++++++++-----------------------
+ 1 file changed, 31 insertions(+), 29 deletions(-)
+
+diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c
+index b7fc47907d96..893bc59658da 100644
+--- a/fs/jfs/jfs_dmap.c
++++ b/fs/jfs/jfs_dmap.c
+@@ -76,10 +76,10 @@
+  */
+ static void dbAllocBits(struct bmap * bmp, struct dmap * dp, s64 blkno,
+                       int nblocks);
+-static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval);
+-static int dbBackSplit(dmtree_t * tp, int leafno);
+-static int dbJoin(dmtree_t * tp, int leafno, int newval);
+-static void dbAdjTree(dmtree_t * tp, int leafno, int newval);
++static void dbSplit(dmtree_t *tp, int leafno, int splitsz, int newval, bool is_ctl);
++static int dbBackSplit(dmtree_t *tp, int leafno, bool is_ctl);
++static int dbJoin(dmtree_t *tp, int leafno, int newval, bool is_ctl);
++static void dbAdjTree(dmtree_t *tp, int leafno, int newval, bool is_ctl);
+ static int dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc,
+                   int level);
+ static int dbAllocAny(struct bmap * bmp, s64 nblocks, int l2nb, s64 * results);
+@@ -2184,7 +2184,7 @@ static int dbFreeDmap(struct bmap * bmp, struct dmap * dp, s64 blkno,
+                * system.
+                */
+               if (dp->tree.stree[word] == NOFREE)
+-                      dbBackSplit((dmtree_t *) & dp->tree, word);
++                      dbBackSplit((dmtree_t *)&dp->tree, word, false);
+               dbAllocBits(bmp, dp, blkno, nblocks);
+       }
+@@ -2270,7 +2270,7 @@ static void dbAllocBits(struct bmap * bmp, struct dmap * dp, s64 blkno,
+                        * the binary system of the leaves if need be.
+                        */
+                       dbSplit(tp, word, BUDMIN,
+-                              dbMaxBud((u8 *) & dp->wmap[word]));
++                              dbMaxBud((u8 *)&dp->wmap[word]), false);
+                       word += 1;
+               } else {
+@@ -2310,7 +2310,7 @@ static void dbAllocBits(struct bmap * bmp, struct dmap * dp, s64 blkno,
+                                * system of the leaves to reflect the current
+                                * allocation (size).
+                                */
+-                              dbSplit(tp, word, size, NOFREE);
++                              dbSplit(tp, word, size, NOFREE, false);
+                               /* get the number of dmap words handled */
+                               nw = BUDSIZE(size, BUDMIN);
+@@ -2417,7 +2417,7 @@ static int dbFreeBits(struct bmap * bmp, struct dmap * dp, s64 blkno,
+                       /* update the leaf for this dmap word.
+                        */
+                       rc = dbJoin(tp, word,
+-                                  dbMaxBud((u8 *) & dp->wmap[word]));
++                                  dbMaxBud((u8 *)&dp->wmap[word]), false);
+                       if (rc)
+                               return rc;
+@@ -2450,7 +2450,7 @@ static int dbFreeBits(struct bmap * bmp, struct dmap * dp, s64 blkno,
+                               /* update the leaf.
+                                */
+-                              rc = dbJoin(tp, word, size);
++                              rc = dbJoin(tp, word, size, false);
+                               if (rc)
+                                       return rc;
+@@ -2602,14 +2602,14 @@ dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, int level)
+                * that it is at the front of a binary buddy system.
+                */
+               if (oldval == NOFREE) {
+-                      rc = dbBackSplit((dmtree_t *) dcp, leafno);
++                      rc = dbBackSplit((dmtree_t *)dcp, leafno, true);
+                       if (rc)
+                               return rc;
+                       oldval = dcp->stree[ti];
+               }
+-              dbSplit((dmtree_t *) dcp, leafno, dcp->budmin, newval);
++              dbSplit((dmtree_t *) dcp, leafno, dcp->budmin, newval, true);
+       } else {
+-              rc = dbJoin((dmtree_t *) dcp, leafno, newval);
++              rc = dbJoin((dmtree_t *) dcp, leafno, newval, true);
+               if (rc)
+                       return rc;
+       }
+@@ -2638,7 +2638,7 @@ dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, int level)
+                                */
+                               if (alloc) {
+                                       dbJoin((dmtree_t *) dcp, leafno,
+-                                             oldval);
++                                             oldval, true);
+                               } else {
+                                       /* the dbJoin() above might have
+                                        * caused a larger binary buddy system
+@@ -2648,9 +2648,9 @@ dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, int level)
+                                        */
+                                       if (dcp->stree[ti] == NOFREE)
+                                               dbBackSplit((dmtree_t *)
+-                                                          dcp, leafno);
++                                                          dcp, leafno, true);
+                                       dbSplit((dmtree_t *) dcp, leafno,
+-                                              dcp->budmin, oldval);
++                                              dcp->budmin, oldval, true);
+                               }
+                               /* release the buffer and return the error.
+@@ -2698,7 +2698,7 @@ dbAdjCtl(struct bmap * bmp, s64 blkno, int newval, int alloc, int level)
+  *
+  * serialization: IREAD_LOCK(ipbmap) or IWRITE_LOCK(ipbmap) held on entry/exit;
+  */
+-static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval)
++static void dbSplit(dmtree_t *tp, int leafno, int splitsz, int newval, bool is_ctl)
+ {
+       int budsz;
+       int cursz;
+@@ -2720,7 +2720,7 @@ static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval)
+               while (cursz >= splitsz) {
+                       /* update the buddy's leaf with its new value.
+                        */
+-                      dbAdjTree(tp, leafno ^ budsz, cursz);
++                      dbAdjTree(tp, leafno ^ budsz, cursz, is_ctl);
+                       /* on to the next size and buddy.
+                        */
+@@ -2732,7 +2732,7 @@ static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval)
+       /* adjust the dmap tree to reflect the specified leaf's new
+        * value.
+        */
+-      dbAdjTree(tp, leafno, newval);
++      dbAdjTree(tp, leafno, newval, is_ctl);
+ }
+@@ -2763,7 +2763,7 @@ static void dbSplit(dmtree_t * tp, int leafno, int splitsz, int newval)
+  *
+  * serialization: IREAD_LOCK(ipbmap) or IWRITE_LOCK(ipbmap) held on entry/exit;
+  */
+-static int dbBackSplit(dmtree_t * tp, int leafno)
++static int dbBackSplit(dmtree_t *tp, int leafno, bool is_ctl)
+ {
+       int budsz, bud, w, bsz, size;
+       int cursz;
+@@ -2814,7 +2814,7 @@ static int dbBackSplit(dmtree_t * tp, int leafno)
+                                * system in two.
+                                */
+                               cursz = leaf[bud] - 1;
+-                              dbSplit(tp, bud, cursz, cursz);
++                              dbSplit(tp, bud, cursz, cursz, is_ctl);
+                               break;
+                       }
+               }
+@@ -2842,7 +2842,7 @@ static int dbBackSplit(dmtree_t * tp, int leafno)
+  *
+  * RETURN VALUES: none
+  */
+-static int dbJoin(dmtree_t * tp, int leafno, int newval)
++static int dbJoin(dmtree_t *tp, int leafno, int newval, bool is_ctl)
+ {
+       int budsz, buddy;
+       s8 *leaf;
+@@ -2897,12 +2897,12 @@ static int dbJoin(dmtree_t * tp, int leafno, int newval)
+                       if (leafno < buddy) {
+                               /* leafno is the left buddy.
+                                */
+-                              dbAdjTree(tp, buddy, NOFREE);
++                              dbAdjTree(tp, buddy, NOFREE, is_ctl);
+                       } else {
+                               /* buddy is the left buddy and becomes
+                                * leafno.
+                                */
+-                              dbAdjTree(tp, leafno, NOFREE);
++                              dbAdjTree(tp, leafno, NOFREE, is_ctl);
+                               leafno = buddy;
+                       }
+@@ -2915,7 +2915,7 @@ static int dbJoin(dmtree_t * tp, int leafno, int newval)
+       /* update the leaf value.
+        */
+-      dbAdjTree(tp, leafno, newval);
++      dbAdjTree(tp, leafno, newval, is_ctl);
+       return 0;
+ }
+@@ -2936,21 +2936,23 @@ static int dbJoin(dmtree_t * tp, int leafno, int newval)
+  *
+  * RETURN VALUES: none
+  */
+-static void dbAdjTree(dmtree_t * tp, int leafno, int newval)
++static void dbAdjTree(dmtree_t *tp, int leafno, int newval, bool is_ctl)
+ {
+       int lp, pp, k;
+-      int max;
++      int max, size;
++
++      size = is_ctl ? CTLTREESIZE : TREESIZE;
+       /* pick up the index of the leaf for this leafno.
+        */
+       lp = leafno + le32_to_cpu(tp->dmt_leafidx);
++      if (WARN_ON_ONCE(lp >= size || lp < 0))
++              return;
++
+       /* is the current value the same as the old value ?  if so,
+        * there is nothing to do.
+        */
+-      if (WARN_ON_ONCE(lp >= CTLTREESIZE))
+-              return;
+-
+       if (tp->dmt_stree[lp] == newval)
+               return;
+-- 
+2.43.0
+
diff --git a/queue-4.19/jfs-fix-array-index-out-of-bounds-in-dinewext.patch b/queue-4.19/jfs-fix-array-index-out-of-bounds-in-dinewext.patch
new file mode 100644 (file)
index 0000000..ddb4631
--- /dev/null
@@ -0,0 +1,78 @@
+From 84b2a72637eea4161adefa561fb0d816f7536453 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Dec 2023 09:36:22 +0800
+Subject: jfs: fix array-index-out-of-bounds in diNewExt
+
+From: Edward Adam Davis <eadavis@qq.com>
+
+[ Upstream commit 49f9637aafa6e63ba686c13cb8549bf5e6920402 ]
+
+[Syz report]
+UBSAN: array-index-out-of-bounds in fs/jfs/jfs_imap.c:2360:2
+index -878706688 is out of range for type 'struct iagctl[128]'
+CPU: 1 PID: 5065 Comm: syz-executor282 Not tainted 6.7.0-rc4-syzkaller-00009-gbee0e7762ad2 #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/10/2023
+Call Trace:
+ <TASK>
+ __dump_stack lib/dump_stack.c:88 [inline]
+ dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
+ ubsan_epilogue lib/ubsan.c:217 [inline]
+ __ubsan_handle_out_of_bounds+0x11c/0x150 lib/ubsan.c:348
+ diNewExt+0x3cf3/0x4000 fs/jfs/jfs_imap.c:2360
+ diAllocExt fs/jfs/jfs_imap.c:1949 [inline]
+ diAllocAG+0xbe8/0x1e50 fs/jfs/jfs_imap.c:1666
+ diAlloc+0x1d3/0x1760 fs/jfs/jfs_imap.c:1587
+ ialloc+0x8f/0x900 fs/jfs/jfs_inode.c:56
+ jfs_mkdir+0x1c5/0xb90 fs/jfs/namei.c:225
+ vfs_mkdir+0x2f1/0x4b0 fs/namei.c:4106
+ do_mkdirat+0x264/0x3a0 fs/namei.c:4129
+ __do_sys_mkdir fs/namei.c:4149 [inline]
+ __se_sys_mkdir fs/namei.c:4147 [inline]
+ __x64_sys_mkdir+0x6e/0x80 fs/namei.c:4147
+ do_syscall_x64 arch/x86/entry/common.c:51 [inline]
+ do_syscall_64+0x45/0x110 arch/x86/entry/common.c:82
+ entry_SYSCALL_64_after_hwframe+0x63/0x6b
+RIP: 0033:0x7fcb7e6a0b57
+Code: ff ff 77 07 31 c0 c3 0f 1f 40 00 48 c7 c2 b8 ff ff ff f7 d8 64 89 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 b8 53 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
+RSP: 002b:00007ffd83023038 EFLAGS: 00000286 ORIG_RAX: 0000000000000053
+RAX: ffffffffffffffda RBX: 00000000ffffffff RCX: 00007fcb7e6a0b57
+RDX: 00000000000a1020 RSI: 00000000000001ff RDI: 0000000020000140
+RBP: 0000000020000140 R08: 0000000000000000 R09: 0000000000000000
+R10: 0000000000000000 R11: 0000000000000286 R12: 00007ffd830230d0
+R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
+
+[Analysis]
+When the agstart is too large, it can cause agno overflow.
+
+[Fix]
+After obtaining agno, if the value is invalid, exit the subsequent process.
+
+Reported-and-tested-by: syzbot+553d90297e6d2f50dbc7@syzkaller.appspotmail.com
+Signed-off-by: Edward Adam Davis <eadavis@qq.com>
+
+Modified the test from agno > MAXAG to agno >= MAXAG based on linux-next
+report by kernel test robot (Dan Carpenter).
+
+Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jfs/jfs_imap.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c
+index b45cc109e506..00800c8c6f07 100644
+--- a/fs/jfs/jfs_imap.c
++++ b/fs/jfs/jfs_imap.c
+@@ -2194,6 +2194,9 @@ static int diNewExt(struct inomap * imap, struct iag * iagp, int extno)
+       /* get the ag and iag numbers for this iag.
+        */
+       agno = BLKTOAG(le64_to_cpu(iagp->agstart), sbi);
++      if (agno >= MAXAG || agno < 0)
++              return -EIO;
++
+       iagno = le32_to_cpu(iagp->iagnum);
+       /* check if this is the last free extent within the
+-- 
+2.43.0
+
diff --git a/queue-4.19/jfs-fix-slab-out-of-bounds-read-in-dtsearch.patch b/queue-4.19/jfs-fix-slab-out-of-bounds-read-in-dtsearch.patch
new file mode 100644 (file)
index 0000000..47df885
--- /dev/null
@@ -0,0 +1,45 @@
+From 700617a6c108ba874c20dda84d988cdc4e2dd140 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 25 Oct 2023 11:39:07 +0530
+Subject: jfs: fix slab-out-of-bounds Read in dtSearch
+
+From: Manas Ghandat <ghandatmanas@gmail.com>
+
+[ Upstream commit fa5492ee89463a7590a1449358002ff7ef63529f ]
+
+Currently while searching for current page in the sorted entry table
+of the page there is a out of bound access. Added a bound check to fix
+the error.
+
+Dave:
+Set return code to -EIO
+
+Reported-by: kernel test robot <lkp@intel.com>
+Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
+Closes: https://lore.kernel.org/r/202310241724.Ed02yUz9-lkp@intel.com/
+Signed-off-by: Manas Ghandat <ghandatmanas@gmail.com>
+Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jfs/jfs_dtree.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
+index 320c9f42b65b..ea2c8f0fe832 100644
+--- a/fs/jfs/jfs_dtree.c
++++ b/fs/jfs/jfs_dtree.c
+@@ -646,6 +646,11 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
+               for (base = 0, lim = p->header.nextindex; lim; lim >>= 1) {
+                       index = base + (lim >> 1);
++                      if (stbl[index] < 0) {
++                              rc = -EIO;
++                              goto out;
++                      }
++
+                       if (p->header.flag & BT_LEAF) {
+                               /* uppercase leaf name to compare */
+                               cmp =
+-- 
+2.43.0
+
diff --git a/queue-4.19/jfs-fix-uaf-in-jfs_evict_inode.patch b/queue-4.19/jfs-fix-uaf-in-jfs_evict_inode.patch
new file mode 100644 (file)
index 0000000..5866b31
--- /dev/null
@@ -0,0 +1,50 @@
+From d31c27e2d4b7ef83f57c277b60fc59a3446952f6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 31 Oct 2023 13:39:04 +0800
+Subject: jfs: fix uaf in jfs_evict_inode
+
+From: Edward Adam Davis <eadavis@qq.com>
+
+[ Upstream commit e0e1958f4c365e380b17ccb35617345b31ef7bf3 ]
+
+When the execution of diMount(ipimap) fails, the object ipimap that has been
+released may be accessed in diFreeSpecial(). Asynchronous ipimap release occurs
+when rcu_core() calls jfs_free_node().
+
+Therefore, when diMount(ipimap) fails, sbi->ipimap should not be initialized as
+ipimap.
+
+Reported-and-tested-by: syzbot+01cf2dbcbe2022454388@syzkaller.appspotmail.com
+Signed-off-by: Edward Adam Davis <eadavis@qq.com>
+Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jfs/jfs_mount.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/fs/jfs/jfs_mount.c b/fs/jfs/jfs_mount.c
+index f1a705d15904..97d91c1686b8 100644
+--- a/fs/jfs/jfs_mount.c
++++ b/fs/jfs/jfs_mount.c
+@@ -184,15 +184,15 @@ int jfs_mount(struct super_block *sb)
+       }
+       jfs_info("jfs_mount: ipimap:0x%p", ipimap);
+-      /* map further access of per fileset inodes by the fileset inode */
+-      sbi->ipimap = ipimap;
+-
+       /* initialize fileset inode allocation map */
+       if ((rc = diMount(ipimap))) {
+               jfs_err("jfs_mount: diMount failed w/rc = %d", rc);
+               goto err_ipimap;
+       }
++      /* map further access of per fileset inodes by the fileset inode */
++      sbi->ipimap = ipimap;
++
+       return rc;
+       /*
+-- 
+2.43.0
+
diff --git a/queue-4.19/kvm-s390-fix-setting-of-fpc-register.patch b/queue-4.19/kvm-s390-fix-setting-of-fpc-register.patch
new file mode 100644 (file)
index 0000000..72e09e9
--- /dev/null
@@ -0,0 +1,70 @@
+From cc0319228838a597d22cd92f4a9839662ec85d4c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Nov 2023 18:56:00 +0100
+Subject: KVM: s390: fix setting of fpc register
+
+From: Heiko Carstens <hca@linux.ibm.com>
+
+[ Upstream commit b988b1bb0053c0dcd26187d29ef07566a565cf55 ]
+
+kvm_arch_vcpu_ioctl_set_fpu() allows to set the floating point control
+(fpc) register of a guest cpu. The new value is tested for validity by
+temporarily loading it into the fpc register.
+
+This may lead to corruption of the fpc register of the host process:
+if an interrupt happens while the value is temporarily loaded into the fpc
+register, and within interrupt context floating point or vector registers
+are used, the current fp/vx registers are saved with save_fpu_regs()
+assuming they belong to user space and will be loaded into fp/vx registers
+when returning to user space.
+
+test_fp_ctl() restores the original user space / host process fpc register
+value, however it will be discarded, when returning to user space.
+
+In result the host process will incorrectly continue to run with the value
+that was supposed to be used for a guest cpu.
+
+Fix this by simply removing the test. There is another test right before
+the SIE context is entered which will handles invalid values.
+
+This results in a change of behaviour: invalid values will now be accepted
+instead of that the ioctl fails with -EINVAL. This seems to be acceptable,
+given that this interface is most likely not used anymore, and this is in
+addition the same behaviour implemented with the memory mapped interface
+(replace invalid values with zero) - see sync_regs() in kvm-s390.c.
+
+Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
+Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/s390/kvm/kvm-s390.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
+index 92041d442d2e..bc700cb9fc53 100644
+--- a/arch/s390/kvm/kvm-s390.c
++++ b/arch/s390/kvm/kvm-s390.c
+@@ -2995,10 +2995,6 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
+       vcpu_load(vcpu);
+-      if (test_fp_ctl(fpu->fpc)) {
+-              ret = -EINVAL;
+-              goto out;
+-      }
+       vcpu->run->s.regs.fpc = fpu->fpc;
+       if (MACHINE_HAS_VX)
+               convert_fp_to_vx((__vector128 *) vcpu->run->s.regs.vrs,
+@@ -3006,7 +3002,6 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
+       else
+               memcpy(vcpu->run->s.regs.fprs, &fpu->fprs, sizeof(fpu->fprs));
+-out:
+       vcpu_put(vcpu);
+       return ret;
+ }
+-- 
+2.43.0
+
diff --git a/queue-4.19/leds-trigger-panic-don-t-register-panic-notifier-if-.patch b/queue-4.19/leds-trigger-panic-don-t-register-panic-notifier-if-.patch
new file mode 100644 (file)
index 0000000..2fe671f
--- /dev/null
@@ -0,0 +1,43 @@
+From b4000fe76c347789a90201e840a8cae37013c699 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 16 Dec 2023 21:05:33 +0100
+Subject: leds: trigger: panic: Don't register panic notifier if creating the
+ trigger failed
+
+From: Heiner Kallweit <hkallweit1@gmail.com>
+
+[ Upstream commit afacb21834bb02785ddb0c3ec197208803b74faa ]
+
+It doesn't make sense to register the panic notifier if creating the
+panic trigger failed.
+
+Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
+Link: https://lore.kernel.org/r/8a61e229-5388-46c7-919a-4d18cc7362b2@gmail.com
+Signed-off-by: Lee Jones <lee@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/leds/trigger/ledtrig-panic.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/leds/trigger/ledtrig-panic.c b/drivers/leds/trigger/ledtrig-panic.c
+index d735526b9db4..2fc04418a87e 100644
+--- a/drivers/leds/trigger/ledtrig-panic.c
++++ b/drivers/leds/trigger/ledtrig-panic.c
+@@ -67,10 +67,13 @@ static long led_panic_blink(int state)
+ static int __init ledtrig_panic_init(void)
+ {
++      led_trigger_register_simple("panic", &trigger);
++      if (!trigger)
++              return -ENOMEM;
++
+       atomic_notifier_chain_register(&panic_notifier_list,
+                                      &led_trigger_panic_nb);
+-      led_trigger_register_simple("panic", &trigger);
+       panic_blink = led_panic_blink;
+       return 0;
+ }
+-- 
+2.43.0
+
diff --git a/queue-4.19/libsubcmd-fix-memory-leak-in-uniq.patch b/queue-4.19/libsubcmd-fix-memory-leak-in-uniq.patch
new file mode 100644 (file)
index 0000000..d5ecc70
--- /dev/null
@@ -0,0 +1,62 @@
+From b2d23d89ec03ba32e60ea2b0674db3fd01a4ddef Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Dec 2023 16:05:13 -0800
+Subject: libsubcmd: Fix memory leak in uniq()
+
+From: Ian Rogers <irogers@google.com>
+
+[ Upstream commit ad30469a841b50dbb541df4d6971d891f703c297 ]
+
+uniq() will write one command name over another causing the overwritten
+string to be leaked. Fix by doing a pass that removes duplicates and a
+second that removes the holes.
+
+Signed-off-by: Ian Rogers <irogers@google.com>
+Cc: Adrian Hunter <adrian.hunter@intel.com>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Chenyuan Mi <cymi20@fudan.edu.cn>
+Cc: Ingo Molnar <mingo@redhat.com>
+Cc: Jiri Olsa <jolsa@kernel.org>
+Cc: Mark Rutland <mark.rutland@arm.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Link: https://lore.kernel.org/r/20231208000515.1693746-1-irogers@google.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ tools/lib/subcmd/help.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/tools/lib/subcmd/help.c b/tools/lib/subcmd/help.c
+index 2859f107abc8..4260c8b4257b 100644
+--- a/tools/lib/subcmd/help.c
++++ b/tools/lib/subcmd/help.c
+@@ -50,11 +50,21 @@ void uniq(struct cmdnames *cmds)
+       if (!cmds->cnt)
+               return;
+-      for (i = j = 1; i < cmds->cnt; i++)
+-              if (strcmp(cmds->names[i]->name, cmds->names[i-1]->name))
+-                      cmds->names[j++] = cmds->names[i];
+-
++      for (i = 1; i < cmds->cnt; i++) {
++              if (!strcmp(cmds->names[i]->name, cmds->names[i-1]->name))
++                      zfree(&cmds->names[i - 1]);
++      }
++      for (i = 0, j = 0; i < cmds->cnt; i++) {
++              if (cmds->names[i]) {
++                      if (i == j)
++                              j++;
++                      else
++                              cmds->names[j++] = cmds->names[i];
++              }
++      }
+       cmds->cnt = j;
++      while (j < i)
++              cmds->names[j++] = NULL;
+ }
+ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)
+-- 
+2.43.0
+
diff --git a/queue-4.19/md-whenassemble-the-array-consult-the-superblock-of-.patch b/queue-4.19/md-whenassemble-the-array-consult-the-superblock-of-.patch
new file mode 100644 (file)
index 0000000..a2a796b
--- /dev/null
@@ -0,0 +1,155 @@
+From 1efd403bf8b119ba42f6a5755e6ef7e161908f07 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Dec 2023 14:24:31 +0200
+Subject: md: Whenassemble the array, consult the superblock of the freshest
+ device
+
+From: Alex Lyakas <alex.lyakas@zadara.com>
+
+[ Upstream commit dc1cc22ed58f11d58d8553c5ec5f11cbfc3e3039 ]
+
+Upon assembling the array, both kernel and mdadm allow the devices to have event
+counter difference of 1, and still consider them as up-to-date.
+However, a device whose event count is behind by 1, may in fact not be up-to-date,
+and array resync with such a device may cause data corruption.
+To avoid this, consult the superblock of the freshest device about the status
+of a device, whose event counter is behind by 1.
+
+Signed-off-by: Alex Lyakas <alex.lyakas@zadara.com>
+Signed-off-by: Song Liu <song@kernel.org>
+Link: https://lore.kernel.org/r/1702470271-16073-1-git-send-email-alex.lyakas@zadara.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/md.c | 54 ++++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 44 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/md/md.c b/drivers/md/md.c
+index 6b074c2202d5..3cc28b283607 100644
+--- a/drivers/md/md.c
++++ b/drivers/md/md.c
+@@ -1034,6 +1034,7 @@ struct super_type  {
+                                         struct md_rdev *refdev,
+                                         int minor_version);
+       int                 (*validate_super)(struct mddev *mddev,
++                                            struct md_rdev *freshest,
+                                             struct md_rdev *rdev);
+       void                (*sync_super)(struct mddev *mddev,
+                                         struct md_rdev *rdev);
+@@ -1160,8 +1161,9 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor
+ /*
+  * validate_super for 0.90.0
++ * note: we are not using "freshest" for 0.9 superblock
+  */
+-static int super_90_validate(struct mddev *mddev, struct md_rdev *rdev)
++static int super_90_validate(struct mddev *mddev, struct md_rdev *freshest, struct md_rdev *rdev)
+ {
+       mdp_disk_t *desc;
+       mdp_super_t *sb = page_address(rdev->sb_page);
+@@ -1665,7 +1667,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
+       return ret;
+ }
+-static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev)
++static int super_1_validate(struct mddev *mddev, struct md_rdev *freshest, struct md_rdev *rdev)
+ {
+       struct mdp_superblock_1 *sb = page_address(rdev->sb_page);
+       __u64 ev1 = le64_to_cpu(sb->events);
+@@ -1761,13 +1763,15 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev)
+               }
+       } else if (mddev->pers == NULL) {
+               /* Insist of good event counter while assembling, except for
+-               * spares (which don't need an event count) */
+-              ++ev1;
++               * spares (which don't need an event count).
++               * Similar to mdadm, we allow event counter difference of 1
++               * from the freshest device.
++               */
+               if (rdev->desc_nr >= 0 &&
+                   rdev->desc_nr < le32_to_cpu(sb->max_dev) &&
+                   (le16_to_cpu(sb->dev_roles[rdev->desc_nr]) < MD_DISK_ROLE_MAX ||
+                    le16_to_cpu(sb->dev_roles[rdev->desc_nr]) == MD_DISK_ROLE_JOURNAL))
+-                      if (ev1 < mddev->events)
++                      if (ev1 + 1 < mddev->events)
+                               return -EINVAL;
+       } else if (mddev->bitmap) {
+               /* If adding to array with a bitmap, then we can accept an
+@@ -1788,8 +1792,38 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev)
+                   rdev->desc_nr >= le32_to_cpu(sb->max_dev)) {
+                       role = MD_DISK_ROLE_SPARE;
+                       rdev->desc_nr = -1;
+-              } else
++              } else if (mddev->pers == NULL && freshest && ev1 < mddev->events) {
++                      /*
++                       * If we are assembling, and our event counter is smaller than the
++                       * highest event counter, we cannot trust our superblock about the role.
++                       * It could happen that our rdev was marked as Faulty, and all other
++                       * superblocks were updated with +1 event counter.
++                       * Then, before the next superblock update, which typically happens when
++                       * remove_and_add_spares() removes the device from the array, there was
++                       * a crash or reboot.
++                       * If we allow current rdev without consulting the freshest superblock,
++                       * we could cause data corruption.
++                       * Note that in this case our event counter is smaller by 1 than the
++                       * highest, otherwise, this rdev would not be allowed into array;
++                       * both kernel and mdadm allow event counter difference of 1.
++                       */
++                      struct mdp_superblock_1 *freshest_sb = page_address(freshest->sb_page);
++                      u32 freshest_max_dev = le32_to_cpu(freshest_sb->max_dev);
++
++                      if (rdev->desc_nr >= freshest_max_dev) {
++                              /* this is unexpected, better not proceed */
++                              pr_warn("md: %s: rdev[%pg]: desc_nr(%d) >= freshest(%pg)->sb->max_dev(%u)\n",
++                                              mdname(mddev), rdev->bdev, rdev->desc_nr,
++                                              freshest->bdev, freshest_max_dev);
++                              return -EUCLEAN;
++                      }
++
++                      role = le16_to_cpu(freshest_sb->dev_roles[rdev->desc_nr]);
++                      pr_debug("md: %s: rdev[%pg]: role=%d(0x%x) according to freshest %pg\n",
++                                   mdname(mddev), rdev->bdev, role, role, freshest->bdev);
++              } else {
+                       role = le16_to_cpu(sb->dev_roles[rdev->desc_nr]);
++              }
+               switch(role) {
+               case MD_DISK_ROLE_SPARE: /* spare */
+                       break;
+@@ -2691,7 +2725,7 @@ static int add_bound_rdev(struct md_rdev *rdev)
+                * and should be added immediately.
+                */
+               super_types[mddev->major_version].
+-                      validate_super(mddev, rdev);
++                      validate_super(mddev, NULL/*freshest*/, rdev);
+               if (add_journal)
+                       mddev_suspend(mddev);
+               err = mddev->pers->hot_add_disk(mddev, rdev);
+@@ -3593,7 +3627,7 @@ static void analyze_sbs(struct mddev *mddev)
+               }
+       super_types[mddev->major_version].
+-              validate_super(mddev, freshest);
++              validate_super(mddev, NULL/*freshest*/, freshest);
+       i = 0;
+       rdev_for_each_safe(rdev, tmp, mddev) {
+@@ -3608,7 +3642,7 @@ static void analyze_sbs(struct mddev *mddev)
+               }
+               if (rdev != freshest) {
+                       if (super_types[mddev->major_version].
+-                          validate_super(mddev, rdev)) {
++                          validate_super(mddev, freshest, rdev)) {
+                               pr_warn("md: kicking non-fresh %s from array!\n",
+                                       bdevname(rdev->bdev,b));
+                               md_kick_rdev_from_array(rdev);
+@@ -6453,7 +6487,7 @@ static int add_new_disk(struct mddev *mddev, mdu_disk_info_t *info)
+                       rdev->saved_raid_disk = rdev->raid_disk;
+               } else
+                       super_types[mddev->major_version].
+-                              validate_super(mddev, rdev);
++                              validate_super(mddev, NULL/*freshest*/, rdev);
+               if ((info->state & (1<<MD_DISK_SYNC)) &&
+                    rdev->raid_disk != info->raid_disk) {
+                       /* This was a hot-add request, but events doesn't
+-- 
+2.43.0
+
diff --git a/queue-4.19/media-ddbridge-fix-an-error-code-problem-in-ddb_prob.patch b/queue-4.19/media-ddbridge-fix-an-error-code-problem-in-ddb_prob.patch
new file mode 100644 (file)
index 0000000..75f4572
--- /dev/null
@@ -0,0 +1,34 @@
+From a4335eb5391b73f0e6656313fc33cd4e3709d902 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 20 Oct 2023 17:17:23 +0800
+Subject: media: ddbridge: fix an error code problem in ddb_probe
+
+From: Su Hui <suhui@nfschina.com>
+
+[ Upstream commit 09b4195021be69af1e1936cca995712a6d0f2562 ]
+
+Error code is assigned to 'stat', return 'stat' rather than '-1'.
+
+Signed-off-by: Su Hui <suhui@nfschina.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/pci/ddbridge/ddbridge-main.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/media/pci/ddbridge/ddbridge-main.c b/drivers/media/pci/ddbridge/ddbridge-main.c
+index f4748cfd904b..7aa6c966ba0d 100644
+--- a/drivers/media/pci/ddbridge/ddbridge-main.c
++++ b/drivers/media/pci/ddbridge/ddbridge-main.c
+@@ -247,7 +247,7 @@ static int ddb_probe(struct pci_dev *pdev,
+       ddb_unmap(dev);
+       pci_set_drvdata(pdev, NULL);
+       pci_disable_device(pdev);
+-      return -1;
++      return stat;
+ }
+ /****************************************************************************/
+-- 
+2.43.0
+
diff --git a/queue-4.19/media-rockchip-rga-fix-swizzling-for-rgb-formats.patch b/queue-4.19/media-rockchip-rga-fix-swizzling-for-rgb-formats.patch
new file mode 100644 (file)
index 0000000..9b24816
--- /dev/null
@@ -0,0 +1,74 @@
+From 65d29edc307bf86cc8380434baca0e537aa6cd60 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 13 Oct 2023 13:00:22 +0200
+Subject: media: rockchip: rga: fix swizzling for RGB formats
+
+From: Michael Tretter <m.tretter@pengutronix.de>
+
+[ Upstream commit 9e7dc39260edac180c206bb6149595a40eabae3e ]
+
+When using 32 bit RGB formats, the RGA on the rk3568 produces wrong
+colors as the wrong color channels are read or written.  The reason is
+that the format description for the channel swizzeling is wrong and the
+wrong bits are configured. For example, when converting ARGB32 to NV12,
+the alpha channel is used as blue channel.. This doesn't happen if the
+color format is the same on both sides.
+
+Fix the color_swap settings of the formats to correctly handle 32 bit
+RGB formats.
+
+For RGA_COLOR_FMT_XBGR8888, the RGA_COLOR_ALPHA_SWAP bit doesn't have an
+effect. Thus, it isn't possible to handle the V4L2_PIX_FMT_XRGB32. Thus,
+it is removed from the list of supported formats.
+
+Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/platform/rockchip/rga/rga.c | 15 +++------------
+ 1 file changed, 3 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c
+index 86a76f35a9a1..03bf575fd31a 100644
+--- a/drivers/media/platform/rockchip/rga/rga.c
++++ b/drivers/media/platform/rockchip/rga/rga.c
+@@ -195,25 +195,16 @@ static int rga_setup_ctrls(struct rga_ctx *ctx)
+ static struct rga_fmt formats[] = {
+       {
+               .fourcc = V4L2_PIX_FMT_ARGB32,
+-              .color_swap = RGA_COLOR_RB_SWAP,
++              .color_swap = RGA_COLOR_ALPHA_SWAP,
+               .hw_format = RGA_COLOR_FMT_ABGR8888,
+               .depth = 32,
+               .uv_factor = 1,
+               .y_div = 1,
+               .x_div = 1,
+       },
+-      {
+-              .fourcc = V4L2_PIX_FMT_XRGB32,
+-              .color_swap = RGA_COLOR_RB_SWAP,
+-              .hw_format = RGA_COLOR_FMT_XBGR8888,
+-              .depth = 32,
+-              .uv_factor = 1,
+-              .y_div = 1,
+-              .x_div = 1,
+-      },
+       {
+               .fourcc = V4L2_PIX_FMT_ABGR32,
+-              .color_swap = RGA_COLOR_ALPHA_SWAP,
++              .color_swap = RGA_COLOR_RB_SWAP,
+               .hw_format = RGA_COLOR_FMT_ABGR8888,
+               .depth = 32,
+               .uv_factor = 1,
+@@ -222,7 +213,7 @@ static struct rga_fmt formats[] = {
+       },
+       {
+               .fourcc = V4L2_PIX_FMT_XBGR32,
+-              .color_swap = RGA_COLOR_ALPHA_SWAP,
++              .color_swap = RGA_COLOR_RB_SWAP,
+               .hw_format = RGA_COLOR_FMT_XBGR8888,
+               .depth = 32,
+               .uv_factor = 1,
+-- 
+2.43.0
+
diff --git a/queue-4.19/media-stk1160-fixed-high-volume-of-stk1160_dbg-messa.patch b/queue-4.19/media-stk1160-fixed-high-volume-of-stk1160_dbg-messa.patch
new file mode 100644 (file)
index 0000000..4389905
--- /dev/null
@@ -0,0 +1,47 @@
+From 4465bd258e990305e4d085a9427e5b3af799976c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 25 Nov 2023 14:32:36 +0530
+Subject: media: stk1160: Fixed high volume of stk1160_dbg messages
+
+From: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
+
+[ Upstream commit b3695e86d25aafbe175dd51f6aaf6f68d341d590 ]
+
+The function stk1160_dbg gets called too many times, which causes
+the output to get flooded with messages. Since stk1160_dbg uses
+printk, it is now replaced with printk_ratelimited.
+
+Suggested-by: Phillip Potter <phil@philpotter.co.uk>
+Signed-off-by: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
+Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/media/usb/stk1160/stk1160-video.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/usb/stk1160/stk1160-video.c b/drivers/media/usb/stk1160/stk1160-video.c
+index 2811f612820f..0e98b450ae01 100644
+--- a/drivers/media/usb/stk1160/stk1160-video.c
++++ b/drivers/media/usb/stk1160/stk1160-video.c
+@@ -117,8 +117,7 @@ void stk1160_copy_video(struct stk1160 *dev, u8 *src, int len)
+       /*
+        * TODO: These stk1160_dbg are very spammy!
+-       * We should 1) check why we are getting them
+-       * and 2) add ratelimit.
++       * We should check why we are getting them.
+        *
+        * UPDATE: One of the reasons (the only one?) for getting these
+        * is incorrect standard (mismatch between expected and configured).
+@@ -161,7 +160,7 @@ void stk1160_copy_video(struct stk1160 *dev, u8 *src, int len)
+       /* Let the bug hunt begin! sanity checks! */
+       if (lencopy < 0) {
+-              stk1160_dbg("copy skipped: negative lencopy\n");
++              printk_ratelimited(KERN_DEBUG "copy skipped: negative lencopy\n");
+               return;
+       }
+-- 
+2.43.0
+
diff --git a/queue-4.19/mfd-ti_am335x_tscadc-fix-ti-soc-dependencies.patch b/queue-4.19/mfd-ti_am335x_tscadc-fix-ti-soc-dependencies.patch
new file mode 100644 (file)
index 0000000..4c5c31a
--- /dev/null
@@ -0,0 +1,35 @@
+From 5583e6b1d86626486480480f9e6ba98d14daaf44 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Dec 2023 15:56:39 +0000
+Subject: mfd: ti_am335x_tscadc: Fix TI SoC dependencies
+
+From: Peter Robinson <pbrobinson@gmail.com>
+
+[ Upstream commit 284d16c456e5d4b143f375b8ccc4038ab3f4ee0f ]
+
+The ti_am335x_tscadc is specific to some TI SoCs, update
+the dependencies for those SoCs and compile testing.
+
+Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
+Link: https://lore.kernel.org/r/20231220155643.445849-1-pbrobinson@gmail.com
+Signed-off-by: Lee Jones <lee@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/mfd/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
+index dd938a5d0409..6b7526669875 100644
+--- a/drivers/mfd/Kconfig
++++ b/drivers/mfd/Kconfig
+@@ -1247,6 +1247,7 @@ config MFD_DAVINCI_VOICECODEC
+ config MFD_TI_AM335X_TSCADC
+       tristate "TI ADC / Touch Screen chip support"
++      depends on ARCH_OMAP2PLUS || ARCH_K3 || COMPILE_TEST
+       select MFD_CORE
+       select REGMAP
+       select REGMAP_MMIO
+-- 
+2.43.0
+
diff --git a/queue-4.19/misc-lis3lv02d_i2c-add-missing-setting-of-the-reg_ct.patch b/queue-4.19/misc-lis3lv02d_i2c-add-missing-setting-of-the-reg_ct.patch
new file mode 100644 (file)
index 0000000..36bafc8
--- /dev/null
@@ -0,0 +1,60 @@
+From 05efee78b940387654e63893d06f73f265440bf2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Dec 2023 19:34:02 +0100
+Subject: misc: lis3lv02d_i2c: Add missing setting of the reg_ctrl callback
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ Upstream commit b1b9f7a494400c0c39f8cd83de3aaa6111c55087 ]
+
+The lis3lv02d_i2c driver was missing a line to set the lis3_dev's
+reg_ctrl callback.
+
+lis3_reg_ctrl(on) is called from the init callback, but due to
+the missing reg_ctrl callback the regulators where never turned off
+again leading to the following oops/backtrace when detaching the driver:
+
+[   82.313527] ------------[ cut here ]------------
+[   82.313546] WARNING: CPU: 1 PID: 1724 at drivers/regulator/core.c:2396 _regulator_put+0x219/0x230
+...
+[   82.313695] RIP: 0010:_regulator_put+0x219/0x230
+...
+[   82.314767] Call Trace:
+[   82.314770]  <TASK>
+[   82.314772]  ? _regulator_put+0x219/0x230
+[   82.314777]  ? __warn+0x81/0x170
+[   82.314784]  ? _regulator_put+0x219/0x230
+[   82.314791]  ? report_bug+0x18d/0x1c0
+[   82.314801]  ? handle_bug+0x3c/0x80
+[   82.314806]  ? exc_invalid_op+0x13/0x60
+[   82.314812]  ? asm_exc_invalid_op+0x16/0x20
+[   82.314845]  ? _regulator_put+0x219/0x230
+[   82.314857]  regulator_bulk_free+0x39/0x60
+[   82.314865]  i2c_device_remove+0x22/0xb0
+
+Add the missing setting of the callback so that the regulators
+properly get turned off again when not used.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Link: https://lore.kernel.org/r/20231224183402.95640-1-hdegoede@redhat.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/misc/lis3lv02d/lis3lv02d_i2c.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/misc/lis3lv02d/lis3lv02d_i2c.c b/drivers/misc/lis3lv02d/lis3lv02d_i2c.c
+index 14b7d539fed6..e8da06020c81 100644
+--- a/drivers/misc/lis3lv02d/lis3lv02d_i2c.c
++++ b/drivers/misc/lis3lv02d/lis3lv02d_i2c.c
+@@ -164,6 +164,7 @@ static int lis3lv02d_i2c_probe(struct i2c_client *client,
+       lis3_dev.init     = lis3_i2c_init;
+       lis3_dev.read     = lis3_i2c_read;
+       lis3_dev.write    = lis3_i2c_write;
++      lis3_dev.reg_ctrl = lis3_reg_ctrl;
+       lis3_dev.irq      = client->irq;
+       lis3_dev.ac       = lis3lv02d_axis_map;
+       lis3_dev.pm_dev   = &client->dev;
+-- 
+2.43.0
+
diff --git a/queue-4.19/pci-add-intel_hda_arl-to-pci_ids.h.patch b/queue-4.19/pci-add-intel_hda_arl-to-pci_ids.h.patch
new file mode 100644 (file)
index 0000000..99f3bc4
--- /dev/null
@@ -0,0 +1,41 @@
+From 5f1a50d6ae29db0d7b8fb8719d1bb8cf616b3d64 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Dec 2023 15:27:06 -0600
+Subject: PCI: add INTEL_HDA_ARL to pci_ids.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+
+[ Upstream commit 5ec42bf04d72fd6d0a6855810cc779e0ee31dfd7 ]
+
+The PCI ID insertion follows the increasing order in the table, but
+this hardware follows MTL (MeteorLake).
+
+Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
+Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
+Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
+Acked-by: Mark Brown <broonie@kernel.org>
+Link: https://lore.kernel.org/r/20231204212710.185976-2-pierre-louis.bossart@linux.intel.com
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/linux/pci_ids.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
+index 76d5490231a7..3ac7b92b35b9 100644
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -3004,6 +3004,7 @@
+ #define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0
+ #define PCI_DEVICE_ID_INTEL_82443GX_2 0x71a2
+ #define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601
++#define PCI_DEVICE_ID_INTEL_HDA_ARL   0x7728
+ #define PCI_DEVICE_ID_INTEL_SCH_LPC   0x8119
+ #define PCI_DEVICE_ID_INTEL_SCH_IDE   0x811a
+ #define PCI_DEVICE_ID_INTEL_E6XX_CU   0x8183
+-- 
+2.43.0
+
diff --git a/queue-4.19/pci-add-no-pm-reset-quirk-for-nvidia-spectrum-device.patch b/queue-4.19/pci-add-no-pm-reset-quirk-for-nvidia-spectrum-device.patch
new file mode 100644 (file)
index 0000000..bc6f70f
--- /dev/null
@@ -0,0 +1,62 @@
+From 2b38534eb4628528dfac39e22ad6533e186857e0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 15 Nov 2023 13:17:16 +0100
+Subject: PCI: Add no PM reset quirk for NVIDIA Spectrum devices
+
+From: Ido Schimmel <idosch@nvidia.com>
+
+[ Upstream commit 3ed48c80b28d8dcd584d6ddaf00c75b7673e1a05 ]
+
+Spectrum-{1,2,3,4} devices report that a D3hot->D0 transition causes a
+reset (i.e., they advertise NoSoftRst-). However, this transition does
+not have any effect on the device: It continues to be operational and
+network ports remain up. Advertising this support makes it seem as if a
+PM reset is viable for these devices. Mark it as unavailable to skip it
+when testing reset methods.
+
+Before:
+
+ # cat /sys/bus/pci/devices/0000\:03\:00.0/reset_method
+ pm bus
+
+After:
+
+ # cat /sys/bus/pci/devices/0000\:03\:00.0/reset_method
+ bus
+
+Signed-off-by: Ido Schimmel <idosch@nvidia.com>
+Acked-by: Bjorn Helgaas <bhelgaas@google.com>
+Signed-off-by: Petr Machata <petrm@nvidia.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/quirks.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
+index eb507751c115..a5d49f75e1ac 100644
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -3532,6 +3532,19 @@ static void quirk_no_pm_reset(struct pci_dev *dev)
+ DECLARE_PCI_FIXUP_CLASS_HEADER(PCI_VENDOR_ID_ATI, PCI_ANY_ID,
+                              PCI_CLASS_DISPLAY_VGA, 8, quirk_no_pm_reset);
++/*
++ * Spectrum-{1,2,3,4} devices report that a D3hot->D0 transition causes a reset
++ * (i.e., they advertise NoSoftRst-). However, this transition does not have
++ * any effect on the device: It continues to be operational and network ports
++ * remain up. Advertising this support makes it seem as if a PM reset is viable
++ * for these devices. Mark it as unavailable to skip it when testing reset
++ * methods.
++ */
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MELLANOX, 0xcb84, quirk_no_pm_reset);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MELLANOX, 0xcf6c, quirk_no_pm_reset);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MELLANOX, 0xcf70, quirk_no_pm_reset);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MELLANOX, 0xcf80, quirk_no_pm_reset);
++
+ /*
+  * Thunderbolt controllers with broken MSI hotplug signaling:
+  * Entire 1st generation (Light Ridge, Eagle Ridge, Light Peak) and part
+-- 
+2.43.0
+
diff --git a/queue-4.19/pci-only-override-amd-usb-controller-if-required.patch b/queue-4.19/pci-only-override-amd-usb-controller-if-required.patch
new file mode 100644 (file)
index 0000000..a880ba5
--- /dev/null
@@ -0,0 +1,55 @@
+From 7cb953fbc309ba4565353059aee1ab4c2082a834 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 20 Nov 2023 13:04:36 -0300
+Subject: PCI: Only override AMD USB controller if required
+
+From: Guilherme G. Piccoli <gpiccoli@igalia.com>
+
+[ Upstream commit e585a37e5061f6d5060517aed1ca4ccb2e56a34c ]
+
+By running a Van Gogh device (Steam Deck), the following message
+was noticed in the kernel log:
+
+  pci 0000:04:00.3: PCI class overridden (0x0c03fe -> 0x0c03fe) so dwc3 driver can claim this instead of xhci
+
+Effectively this means the quirk executed but changed nothing, since the
+class of this device was already the proper one (likely adjusted by newer
+firmware versions).
+
+Check and perform the override only if necessary.
+
+Link: https://lore.kernel.org/r/20231120160531.361552-1-gpiccoli@igalia.com
+Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Cc: Huang Rui <ray.huang@amd.com>
+Cc: Vicki Pfau <vi@endrift.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pci/quirks.c | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
+index a5d49f75e1ac..99a8a24ea79d 100644
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -611,10 +611,13 @@ static void quirk_amd_dwc_class(struct pci_dev *pdev)
+ {
+       u32 class = pdev->class;
+-      /* Use "USB Device (not host controller)" class */
+-      pdev->class = PCI_CLASS_SERIAL_USB_DEVICE;
+-      pci_info(pdev, "PCI class overridden (%#08x -> %#08x) so dwc3 driver can claim this instead of xhci\n",
+-               class, pdev->class);
++      if (class != PCI_CLASS_SERIAL_USB_DEVICE) {
++              /* Use "USB Device (not host controller)" class */
++              pdev->class = PCI_CLASS_SERIAL_USB_DEVICE;
++              pci_info(pdev,
++                      "PCI class overridden (%#08x -> %#08x) so dwc3 driver can claim this instead of xhci\n",
++                      class, pdev->class);
++      }
+ }
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB,
+               quirk_amd_dwc_class);
+-- 
+2.43.0
+
diff --git a/queue-4.19/pnp-acpi-fix-fortify-warning.patch b/queue-4.19/pnp-acpi-fix-fortify-warning.patch
new file mode 100644 (file)
index 0000000..7013d67
--- /dev/null
@@ -0,0 +1,83 @@
+From e4e62074a56f8a529652b2cc65f26233ad9d457f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 28 Nov 2023 05:52:10 +0300
+Subject: PNP: ACPI: fix fortify warning
+
+From: Dmitry Antipov <dmantipov@yandex.ru>
+
+[ Upstream commit ba3f5058db437d919f8468db50483dd9028ff688 ]
+
+When compiling with gcc version 14.0.0 20231126 (experimental)
+and CONFIG_FORTIFY_SOURCE=y, I've noticed the following:
+
+In file included from ./include/linux/string.h:295,
+                 from ./include/linux/bitmap.h:12,
+                 from ./include/linux/cpumask.h:12,
+                 from ./arch/x86/include/asm/paravirt.h:17,
+                 from ./arch/x86/include/asm/cpuid.h:62,
+                 from ./arch/x86/include/asm/processor.h:19,
+                 from ./arch/x86/include/asm/cpufeature.h:5,
+                 from ./arch/x86/include/asm/thread_info.h:53,
+                 from ./include/linux/thread_info.h:60,
+                 from ./arch/x86/include/asm/preempt.h:9,
+                 from ./include/linux/preempt.h:79,
+                 from ./include/linux/spinlock.h:56,
+                 from ./include/linux/mmzone.h:8,
+                 from ./include/linux/gfp.h:7,
+                 from ./include/linux/slab.h:16,
+                 from ./include/linux/resource_ext.h:11,
+                 from ./include/linux/acpi.h:13,
+                 from drivers/pnp/pnpacpi/rsparser.c:11:
+In function 'fortify_memcpy_chk',
+    inlined from 'pnpacpi_parse_allocated_vendor' at drivers/pnp/pnpacpi/rsparser.c:158:3,
+    inlined from 'pnpacpi_allocated_resource' at drivers/pnp/pnpacpi/rsparser.c:249:3:
+./include/linux/fortify-string.h:588:25: warning: call to '__read_overflow2_field'
+declared with attribute warning: detected read beyond size of field (2nd parameter);
+maybe use struct_group()? [-Wattribute-warning]
+  588 |                         __read_overflow2_field(q_size_field, size);
+      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+According to the comments in include/linux/fortify-string.h, 'memcpy()',
+'memmove()' and 'memset()' must not be used beyond individual struct
+members to ensure that the compiler can enforce protection against
+buffer overflows, and, IIUC, this also applies to partial copies from
+the particular member ('vendor->byte_data' in this case). So it should
+be better (and safer) to do both copies at once (and 'byte_data' of
+'struct acpi_resource_vendor_typed' seems to be a good candidate for
+'__counted_by(byte_length)' as well).
+
+Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
+Reviewed-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/pnp/pnpacpi/rsparser.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c
+index 43d8ed577e70..d8cee80e8df8 100644
+--- a/drivers/pnp/pnpacpi/rsparser.c
++++ b/drivers/pnp/pnpacpi/rsparser.c
+@@ -160,13 +160,13 @@ static int vendor_resource_matches(struct pnp_dev *dev,
+ static void pnpacpi_parse_allocated_vendor(struct pnp_dev *dev,
+                                   struct acpi_resource_vendor_typed *vendor)
+ {
+-      if (vendor_resource_matches(dev, vendor, &hp_ccsr_uuid, 16)) {
+-              u64 start, length;
++      struct { u64 start, length; } range;
+-              memcpy(&start, vendor->byte_data, sizeof(start));
+-              memcpy(&length, vendor->byte_data + 8, sizeof(length));
+-
+-              pnp_add_mem_resource(dev, start, start + length - 1, 0);
++      if (vendor_resource_matches(dev, vendor, &hp_ccsr_uuid,
++                                  sizeof(range))) {
++              memcpy(&range, vendor->byte_data, sizeof(range));
++              pnp_add_mem_resource(dev, range.start, range.start +
++                                   range.length - 1, 0);
+       }
+ }
+-- 
+2.43.0
+
diff --git a/queue-4.19/powerpc-fix-build-error-due-to-is_valid_bugaddr.patch b/queue-4.19/powerpc-fix-build-error-due-to-is_valid_bugaddr.patch
new file mode 100644 (file)
index 0000000..b3f3672
--- /dev/null
@@ -0,0 +1,48 @@
+From f36ca6abf7f3e0b34e2d7ffd6bed396769624e0f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Nov 2023 22:44:33 +1100
+Subject: powerpc: Fix build error due to is_valid_bugaddr()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+[ Upstream commit f8d3555355653848082c351fa90775214fb8a4fa ]
+
+With CONFIG_GENERIC_BUG=n the build fails with:
+
+  arch/powerpc/kernel/traps.c:1442:5: error: no previous prototype for ‘is_valid_bugaddr’ [-Werror=missing-prototypes]
+  1442 | int is_valid_bugaddr(unsigned long addr)
+       |     ^~~~~~~~~~~~~~~~
+
+The prototype is only defined, and the function is only needed, when
+CONFIG_GENERIC_BUG=y, so move the implementation under that.
+
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://msgid.link/20231130114433.3053544-2-mpe@ellerman.id.au
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/kernel/traps.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
+index 63c751ce130a..67a00131ec42 100644
+--- a/arch/powerpc/kernel/traps.c
++++ b/arch/powerpc/kernel/traps.c
+@@ -1341,10 +1341,12 @@ static int emulate_instruction(struct pt_regs *regs)
+       return -EINVAL;
+ }
++#ifdef CONFIG_GENERIC_BUG
+ int is_valid_bugaddr(unsigned long addr)
+ {
+       return is_kernel_addr(addr);
+ }
++#endif
+ #ifdef CONFIG_MATH_EMULATION
+ static int emulate_math(struct pt_regs *regs)
+-- 
+2.43.0
+
diff --git a/queue-4.19/powerpc-lib-validate-size-for-vector-operations.patch b/queue-4.19/powerpc-lib-validate-size-for-vector-operations.patch
new file mode 100644 (file)
index 0000000..58adfb9
--- /dev/null
@@ -0,0 +1,71 @@
+From 2901335e24ba61b29e45a13e90ca1cd6b3568a34 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 23 Nov 2023 12:47:05 +0530
+Subject: powerpc/lib: Validate size for vector operations
+
+From: Naveen N Rao <naveen@kernel.org>
+
+[ Upstream commit 8f9abaa6d7de0a70fc68acaedce290c1f96e2e59 ]
+
+Some of the fp/vmx code in sstep.c assume a certain maximum size for the
+instructions being emulated. The size of those operations however is
+determined separately in analyse_instr().
+
+Add a check to validate the assumption on the maximum size of the
+operations, so as to prevent any unintended kernel stack corruption.
+
+Signed-off-by: Naveen N Rao <naveen@kernel.org>
+Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
+Build-tested-by: Gustavo A. R. Silva <gustavoars@kernel.org>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://msgid.link/20231123071705.397625-1-naveen@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/lib/sstep.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
+index 30c434abe861..3da6290e3ccc 100644
+--- a/arch/powerpc/lib/sstep.c
++++ b/arch/powerpc/lib/sstep.c
+@@ -473,6 +473,8 @@ static int do_fp_load(struct instruction_op *op, unsigned long ea,
+       } u;
+       nb = GETSIZE(op->type);
++      if (nb > sizeof(u))
++              return -EINVAL;
+       if (!address_ok(regs, ea, nb))
+               return -EFAULT;
+       rn = op->reg;
+@@ -523,6 +525,8 @@ static int do_fp_store(struct instruction_op *op, unsigned long ea,
+       } u;
+       nb = GETSIZE(op->type);
++      if (nb > sizeof(u))
++              return -EINVAL;
+       if (!address_ok(regs, ea, nb))
+               return -EFAULT;
+       rn = op->reg;
+@@ -567,6 +571,9 @@ static nokprobe_inline int do_vec_load(int rn, unsigned long ea,
+               u8 b[sizeof(__vector128)];
+       } u = {};
++      if (size > sizeof(u))
++              return -EINVAL;
++
+       if (!address_ok(regs, ea & ~0xfUL, 16))
+               return -EFAULT;
+       /* align to multiple of size */
+@@ -594,6 +601,9 @@ static nokprobe_inline int do_vec_store(int rn, unsigned long ea,
+               u8 b[sizeof(__vector128)];
+       } u;
++      if (size > sizeof(u))
++              return -EINVAL;
++
+       if (!address_ok(regs, ea & ~0xfUL, 16))
+               return -EFAULT;
+       /* align to multiple of size */
+-- 
+2.43.0
+
diff --git a/queue-4.19/powerpc-mm-fix-build-failures-due-to-arch_reserved_k.patch b/queue-4.19/powerpc-mm-fix-build-failures-due-to-arch_reserved_k.patch
new file mode 100644 (file)
index 0000000..9c36cb1
--- /dev/null
@@ -0,0 +1,68 @@
+From 2a494de2b34ce1a2994e346945d24796e3538cde Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Nov 2023 22:44:32 +1100
+Subject: powerpc/mm: Fix build failures due to arch_reserved_kernel_pages()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+[ Upstream commit d8c3f243d4db24675b653f0568bb65dae34e6455 ]
+
+With NUMA=n and FA_DUMP=y or PRESERVE_FA_DUMP=y the build fails with:
+
+  arch/powerpc/kernel/fadump.c:1739:22: error: no previous prototype for ‘arch_reserved_kernel_pages’ [-Werror=missing-prototypes]
+  1739 | unsigned long __init arch_reserved_kernel_pages(void)
+       |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The prototype for arch_reserved_kernel_pages() is in include/linux/mm.h,
+but it's guarded by __HAVE_ARCH_RESERVED_KERNEL_PAGES. The powerpc
+headers define __HAVE_ARCH_RESERVED_KERNEL_PAGES in asm/mmzone.h, which
+is not included into the generic headers when NUMA=n.
+
+Move the definition of __HAVE_ARCH_RESERVED_KERNEL_PAGES into asm/mmu.h
+which is included regardless of NUMA=n.
+
+Additionally the ifdef around __HAVE_ARCH_RESERVED_KERNEL_PAGES needs to
+also check for CONFIG_PRESERVE_FA_DUMP.
+
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://msgid.link/20231130114433.3053544-1-mpe@ellerman.id.au
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/include/asm/mmu.h    | 4 ++++
+ arch/powerpc/include/asm/mmzone.h | 3 ---
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h
+index 2b396de45e9e..20cdf744522b 100644
+--- a/arch/powerpc/include/asm/mmu.h
++++ b/arch/powerpc/include/asm/mmu.h
+@@ -330,5 +330,9 @@ static inline void mmu_early_init_devtree(void) { }
+ #include <asm/nohash/mmu.h>
+ #endif
++#if defined(CONFIG_FA_DUMP) || defined(CONFIG_PRESERVE_FA_DUMP)
++#define __HAVE_ARCH_RESERVED_KERNEL_PAGES
++#endif
++
+ #endif /* __KERNEL__ */
+ #endif /* _ASM_POWERPC_MMU_H_ */
+diff --git a/arch/powerpc/include/asm/mmzone.h b/arch/powerpc/include/asm/mmzone.h
+index 91c69ff53a8a..50c2198c2c76 100644
+--- a/arch/powerpc/include/asm/mmzone.h
++++ b/arch/powerpc/include/asm/mmzone.h
+@@ -42,9 +42,6 @@ u64 memory_hotplug_max(void);
+ #else
+ #define memory_hotplug_max() memblock_end_of_DRAM()
+ #endif /* CONFIG_NEED_MULTIPLE_NODES */
+-#ifdef CONFIG_FA_DUMP
+-#define __HAVE_ARCH_RESERVED_KERNEL_PAGES
+-#endif
+ #endif /* __KERNEL__ */
+ #endif /* _ASM_MMZONE_H_ */
+-- 
+2.43.0
+
diff --git a/queue-4.19/powerpc-mm-fix-null-pointer-dereference-in-pgtable_c.patch b/queue-4.19/powerpc-mm-fix-null-pointer-dereference-in-pgtable_c.patch
new file mode 100644 (file)
index 0000000..653b611
--- /dev/null
@@ -0,0 +1,49 @@
+From 1e30954b234ed80e0063f44c6543d28ca8fb6092 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 4 Dec 2023 10:32:23 +0800
+Subject: powerpc/mm: Fix null-pointer dereference in pgtable_cache_add
+
+From: Kunwu Chan <chentao@kylinos.cn>
+
+[ Upstream commit f46c8a75263f97bda13c739ba1c90aced0d3b071 ]
+
+kasprintf() returns a pointer to dynamically allocated memory
+which can be NULL upon failure. Ensure the allocation was successful
+by checking the pointer validity.
+
+Suggested-by: Christophe Leroy <christophe.leroy@csgroup.eu>
+Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Kunwu Chan <chentao@kylinos.cn>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://msgid.link/20231204023223.2447523-1-chentao@kylinos.cn
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/powerpc/mm/init-common.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/arch/powerpc/mm/init-common.c b/arch/powerpc/mm/init-common.c
+index 2b656e67f2ea..927703af49be 100644
+--- a/arch/powerpc/mm/init-common.c
++++ b/arch/powerpc/mm/init-common.c
+@@ -65,7 +65,7 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *))
+        * as to leave enough 0 bits in the address to contain it. */
+       unsigned long minalign = max(MAX_PGTABLE_INDEX_SIZE + 1,
+                                    HUGEPD_SHIFT_MASK + 1);
+-      struct kmem_cache *new;
++      struct kmem_cache *new = NULL;
+       /* It would be nice if this was a BUILD_BUG_ON(), but at the
+        * moment, gcc doesn't seem to recognize is_power_of_2 as a
+@@ -78,7 +78,8 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *))
+       align = max_t(unsigned long, align, minalign);
+       name = kasprintf(GFP_KERNEL, "pgtable-2^%d", shift);
+-      new = kmem_cache_create(name, table_size, align, 0, ctor);
++      if (name)
++              new = kmem_cache_create(name, table_size, align, 0, ctor);
+       if (!new)
+               panic("Could not allocate pgtable cache for order %d", shift);
+-- 
+2.43.0
+
diff --git a/queue-4.19/pstore-ram-fix-crash-when-setting-number-of-cpus-to-.patch b/queue-4.19/pstore-ram-fix-crash-when-setting-number-of-cpus-to-.patch
new file mode 100644 (file)
index 0000000..605d3b1
--- /dev/null
@@ -0,0 +1,47 @@
+From b02fbd865abb0c32ab7a60481b053de71b7f1295 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 24 Feb 2023 10:36:32 +0800
+Subject: pstore/ram: Fix crash when setting number of cpus to an odd number
+
+From: Weichen Chen <weichen.chen@mediatek.com>
+
+[ Upstream commit d49270a04623ce3c0afddbf3e984cb245aa48e9c ]
+
+When the number of cpu cores is adjusted to 7 or other odd numbers,
+the zone size will become an odd number.
+The address of the zone will become:
+    addr of zone0 = BASE
+    addr of zone1 = BASE + zone_size
+    addr of zone2 = BASE + zone_size*2
+    ...
+The address of zone1/3/5/7 will be mapped to non-alignment va.
+Eventually crashes will occur when accessing these va.
+
+So, use ALIGN_DOWN() to make sure the zone size is even
+to avoid this bug.
+
+Signed-off-by: Weichen Chen <weichen.chen@mediatek.com>
+Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com>
+Tested-by: "Guilherme G. Piccoli" <gpiccoli@igalia.com>
+Link: https://lore.kernel.org/r/20230224023632.6840-1-weichen.chen@mediatek.com
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/pstore/ram.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
+index 33294dee7d7f..0050aa56b0fa 100644
+--- a/fs/pstore/ram.c
++++ b/fs/pstore/ram.c
+@@ -590,6 +590,7 @@ static int ramoops_init_przs(const char *name,
+       }
+       zone_sz = mem_sz / *cnt;
++      zone_sz = ALIGN_DOWN(zone_sz, 2);
+       if (!zone_sz) {
+               dev_err(dev, "%s zone size == 0\n", name);
+               goto fail;
+-- 
+2.43.0
+
diff --git a/queue-4.19/rdma-ipoib-fix-error-code-return-in-ipoib_mcast_join.patch b/queue-4.19/rdma-ipoib-fix-error-code-return-in-ipoib_mcast_join.patch
new file mode 100644 (file)
index 0000000..f4ce6e6
--- /dev/null
@@ -0,0 +1,34 @@
+From e56e1a76970c9231ca0cd4f2e188880468bbd652 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 21 Nov 2023 14:03:15 +0100
+Subject: RDMA/IPoIB: Fix error code return in ipoib_mcast_join
+
+From: Jack Wang <jinpu.wang@ionos.com>
+
+[ Upstream commit 753fff78f430704548f45eda52d6d55371a52c0f ]
+
+Return the error code in case of ib_sa_join_multicast fail.
+
+Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
+Link: https://lore.kernel.org/r/20231121130316.126364-2-jinpu.wang@ionos.com
+Signed-off-by: Leon Romanovsky <leon@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+index b9e9562f5034..805df1fcba84 100644
+--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
++++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
+@@ -558,6 +558,7 @@ static int ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
+               spin_unlock_irq(&priv->lock);
+               complete(&mcast->done);
+               spin_lock_irq(&priv->lock);
++              return ret;
+       }
+       return 0;
+ }
+-- 
+2.43.0
+
diff --git a/queue-4.19/rxrpc_find_service_conn_rcu-fix-the-usage-of-read_se.patch b/queue-4.19/rxrpc_find_service_conn_rcu-fix-the-usage-of-read_se.patch
new file mode 100644 (file)
index 0000000..8f5dae0
--- /dev/null
@@ -0,0 +1,46 @@
+From 039a17cdd7fdb9da8a6bd26837fcba589591892f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 17 Nov 2023 17:48:46 +0100
+Subject: rxrpc_find_service_conn_rcu: fix the usage of read_seqbegin_or_lock()
+
+From: Oleg Nesterov <oleg@redhat.com>
+
+[ Upstream commit bad1a11c0f061aa073bab785389fe04f19ba02e1 ]
+
+rxrpc_find_service_conn_rcu() should make the "seq" counter odd on the
+second pass, otherwise read_seqbegin_or_lock() never takes the lock.
+
+Signed-off-by: Oleg Nesterov <oleg@redhat.com>
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: Marc Dionne <marc.dionne@auristor.com>
+cc: linux-afs@lists.infradead.org
+Link: https://lore.kernel.org/r/20231117164846.GA10410@redhat.com/
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/conn_service.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/net/rxrpc/conn_service.c b/net/rxrpc/conn_service.c
+index 6da7c4bf15e8..4b1564824aed 100644
+--- a/net/rxrpc/conn_service.c
++++ b/net/rxrpc/conn_service.c
+@@ -29,7 +29,7 @@ struct rxrpc_connection *rxrpc_find_service_conn_rcu(struct rxrpc_peer *peer,
+       struct rxrpc_conn_proto k;
+       struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
+       struct rb_node *p;
+-      unsigned int seq = 0;
++      unsigned int seq = 1;
+       k.epoch = sp->hdr.epoch;
+       k.cid   = sp->hdr.cid & RXRPC_CIDMASK;
+@@ -39,6 +39,7 @@ struct rxrpc_connection *rxrpc_find_service_conn_rcu(struct rxrpc_peer *peer,
+                * under just the RCU read lock, so we have to check for
+                * changes.
+                */
++              seq++; /* 2 on the 1st/lockless path, otherwise odd */
+               read_seqbegin_or_lock(&peer->service_conn_lock, &seq);
+               p = rcu_dereference_raw(peer->service_conns.rb_node);
+-- 
+2.43.0
+
diff --git a/queue-4.19/s390-ptrace-handle-setting-of-fpc-register-correctly.patch b/queue-4.19/s390-ptrace-handle-setting-of-fpc-register-correctly.patch
new file mode 100644 (file)
index 0000000..a3a400d
--- /dev/null
@@ -0,0 +1,71 @@
+From 9193cb79051eeca807903f3c51ac539a40228ed0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 30 Nov 2023 18:55:59 +0100
+Subject: s390/ptrace: handle setting of fpc register correctly
+
+From: Heiko Carstens <hca@linux.ibm.com>
+
+[ Upstream commit 8b13601d19c541158a6e18b278c00ba69ae37829 ]
+
+If the content of the floating point control (fpc) register of a traced
+process is modified with the ptrace interface the new value is tested for
+validity by temporarily loading it into the fpc register.
+
+This may lead to corruption of the fpc register of the tracing process:
+if an interrupt happens while the value is temporarily loaded into the
+fpc register, and within interrupt context floating point or vector
+registers are used, the current fp/vx registers are saved with
+save_fpu_regs() assuming they belong to user space and will be loaded into
+fp/vx registers when returning to user space.
+
+test_fp_ctl() restores the original user space fpc register value, however
+it will be discarded, when returning to user space.
+
+In result the tracer will incorrectly continue to run with the value that
+was supposed to be used for the traced process.
+
+Fix this by saving fpu register contents with save_fpu_regs() before using
+test_fp_ctl().
+
+Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/s390/kernel/ptrace.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c
+index c36289a3ad50..0495a1906a38 100644
+--- a/arch/s390/kernel/ptrace.c
++++ b/arch/s390/kernel/ptrace.c
+@@ -414,6 +414,7 @@ static int __poke_user(struct task_struct *child, addr_t addr, addr_t data)
+               /*
+                * floating point control reg. is in the thread structure
+                */
++              save_fpu_regs();
+               if ((unsigned int) data != 0 ||
+                   test_fp_ctl(data >> (BITS_PER_LONG - 32)))
+                       return -EINVAL;
+@@ -774,6 +775,7 @@ static int __poke_user_compat(struct task_struct *child,
+               /*
+                * floating point control reg. is in the thread structure
+                */
++              save_fpu_regs();
+               if (test_fp_ctl(tmp))
+                       return -EINVAL;
+               child->thread.fpu.fpc = data;
+@@ -1002,9 +1004,7 @@ static int s390_fpregs_set(struct task_struct *target,
+       int rc = 0;
+       freg_t fprs[__NUM_FPRS];
+-      if (target == current)
+-              save_fpu_regs();
+-
++      save_fpu_regs();
+       if (MACHINE_HAS_VX)
+               convert_vx_to_fp(fprs, target->thread.fpu.vxrs);
+       else
+-- 
+2.43.0
+
diff --git a/queue-4.19/scsi-libfc-don-t-schedule-abort-twice.patch b/queue-4.19/scsi-libfc-don-t-schedule-abort-twice.patch
new file mode 100644 (file)
index 0000000..3b7fc9f
--- /dev/null
@@ -0,0 +1,68 @@
+From 9c632d3985b120a0180b9010bb954acd42880c8b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Nov 2023 17:58:30 +0100
+Subject: scsi: libfc: Don't schedule abort twice
+
+From: Hannes Reinecke <hare@suse.de>
+
+[ Upstream commit b57c4db5d23b9df0118a25e2441c9288edd73710 ]
+
+The current FC error recovery is sending up to three REC (recovery) frames
+in 10 second intervals, and as a final step sending an ABTS after 30
+seconds for the command itself.  Unfortunately sending an ABTS is also the
+action for the SCSI abort handler, and the default timeout for SCSI
+commands is also 30 seconds. This causes two ABTS to be scheduled, with the
+libfc one slightly earlier. The ABTS scheduled by SCSI EH then sees the
+command to be already aborted, and will always return with a 'GOOD' status
+irrespective on the actual result from the first ABTS.  This causes the
+SCSI EH abort handler to always succeed, and SCSI EH never to be engaged.
+Fix this by not issuing an ABTS when a SCSI command is present for the
+exchange, but rather wait for the abort scheduled from SCSI EH.  And warn
+if an abort is already scheduled to avoid similar errors in the future.
+
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+Link: https://lore.kernel.org/r/20231129165832.224100-2-hare@kernel.org
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/libfc/fc_fcp.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
+index 4fae253d4f3d..119117443496 100644
+--- a/drivers/scsi/libfc/fc_fcp.c
++++ b/drivers/scsi/libfc/fc_fcp.c
+@@ -282,6 +282,11 @@ static int fc_fcp_send_abort(struct fc_fcp_pkt *fsp)
+       if (!fsp->seq_ptr)
+               return -EINVAL;
++      if (fsp->state & FC_SRB_ABORT_PENDING) {
++              FC_FCP_DBG(fsp, "abort already pending\n");
++              return -EBUSY;
++      }
++
+       per_cpu_ptr(fsp->lp->stats, get_cpu())->FcpPktAborts++;
+       put_cpu();
+@@ -1710,11 +1715,12 @@ static void fc_fcp_recovery(struct fc_fcp_pkt *fsp, u8 code)
+       fsp->status_code = code;
+       fsp->cdb_status = 0;
+       fsp->io_status = 0;
+-      /*
+-       * if this fails then we let the scsi command timer fire and
+-       * scsi-ml escalate.
+-       */
+-      fc_fcp_send_abort(fsp);
++      if (!fsp->cmd)
++              /*
++               * Only abort non-scsi commands; otherwise let the
++               * scsi command timer fire and scsi-ml escalate.
++               */
++              fc_fcp_send_abort(fsp);
+ }
+ /**
+-- 
+2.43.0
+
diff --git a/queue-4.19/scsi-libfc-fix-up-timeout-error-in-fc_fcp_rec_error.patch b/queue-4.19/scsi-libfc-fix-up-timeout-error-in-fc_fcp_rec_error.patch
new file mode 100644 (file)
index 0000000..3258489
--- /dev/null
@@ -0,0 +1,37 @@
+From 05f86b0f746716237c9d05d79ffc039be89fdba2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 29 Nov 2023 17:58:31 +0100
+Subject: scsi: libfc: Fix up timeout error in fc_fcp_rec_error()
+
+From: Hannes Reinecke <hare@suse.de>
+
+[ Upstream commit 53122a49f49796beb2c4a1bb702303b66347e29f ]
+
+We should set the status to FC_TIMED_OUT when a timeout error is passed to
+fc_fcp_rec_error().
+
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+Link: https://lore.kernel.org/r/20231129165832.224100-3-hare@kernel.org
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/libfc/fc_fcp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
+index 119117443496..faea7333c7e8 100644
+--- a/drivers/scsi/libfc/fc_fcp.c
++++ b/drivers/scsi/libfc/fc_fcp.c
+@@ -1697,7 +1697,7 @@ static void fc_fcp_rec_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
+               if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY)
+                       fc_fcp_rec(fsp);
+               else
+-                      fc_fcp_recovery(fsp, FC_ERROR);
++                      fc_fcp_recovery(fsp, FC_TIMED_OUT);
+               break;
+       }
+       fc_fcp_unlock_pkt(fsp);
+-- 
+2.43.0
+
diff --git a/queue-4.19/scsi-lpfc-fix-possible-file-string-name-overflow-whe.patch b/queue-4.19/scsi-lpfc-fix-possible-file-string-name-overflow-whe.patch
new file mode 100644 (file)
index 0000000..41932a8
--- /dev/null
@@ -0,0 +1,64 @@
+From 69443661015b410bde045823fbe2376444547e16 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 31 Oct 2023 12:12:17 -0700
+Subject: scsi: lpfc: Fix possible file string name overflow when updating
+ firmware
+
+From: Justin Tee <justin.tee@broadcom.com>
+
+[ Upstream commit f5779b529240b715f0e358489ad0ed933bf77c97 ]
+
+Because file_name and phba->ModelName are both declared a size 80 bytes,
+the extra ".grp" file extension could cause an overflow into file_name.
+
+Define a ELX_FW_NAME_SIZE macro with value 84.  84 incorporates the 4 extra
+characters from ".grp".  file_name is changed to be declared as a char and
+initialized to zeros i.e. null chars.
+
+Signed-off-by: Justin Tee <justin.tee@broadcom.com>
+Link: https://lore.kernel.org/r/20231031191224.150862-3-justintee8345@gmail.com
+Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/lpfc/lpfc.h      | 1 +
+ drivers/scsi/lpfc/lpfc_init.c | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
+index 706aca3f7c25..53b661793268 100644
+--- a/drivers/scsi/lpfc/lpfc.h
++++ b/drivers/scsi/lpfc/lpfc.h
+@@ -32,6 +32,7 @@
+ struct lpfc_sli2_slim;
+ #define ELX_MODEL_NAME_SIZE   80
++#define ELX_FW_NAME_SIZE      84
+ #define LPFC_PCI_DEV_LP               0x1
+ #define LPFC_PCI_DEV_OC               0x2
+diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
+index c6caacaa3e7a..7db4e893e10e 100644
+--- a/drivers/scsi/lpfc/lpfc_init.c
++++ b/drivers/scsi/lpfc/lpfc_init.c
+@@ -11428,7 +11428,7 @@ lpfc_write_firmware(const struct firmware *fw, void *context)
+ int
+ lpfc_sli4_request_firmware_update(struct lpfc_hba *phba, uint8_t fw_upgrade)
+ {
+-      uint8_t file_name[ELX_MODEL_NAME_SIZE];
++      char file_name[ELX_FW_NAME_SIZE] = {0};
+       int ret;
+       const struct firmware *fw;
+@@ -11437,7 +11437,7 @@ lpfc_sli4_request_firmware_update(struct lpfc_hba *phba, uint8_t fw_upgrade)
+           LPFC_SLI_INTF_IF_TYPE_2)
+               return -EPERM;
+-      snprintf(file_name, ELX_MODEL_NAME_SIZE, "%s.grp", phba->ModelName);
++      scnprintf(file_name, sizeof(file_name), "%s.grp", phba->ModelName);
+       if (fw_upgrade == INT_FW_UPGRADE) {
+               ret = request_firmware_nowait(THIS_MODULE, FW_ACTION_HOTPLUG,
+-- 
+2.43.0
+
index 9ac594f4ab2994c5c6df8e13a44703084fd8aaea..cd1a9a6d7b7c2d21ce4d77bd5c77a68cdab2ceac 100644 (file)
@@ -47,3 +47,85 @@ mips-call-lose_fpu-0-before-initializing-fcr31-in-mips_set_personality_nan.patch
 tick-sched-preserve-number-of-idle-sleeps-across-cpu-hotplug-events.patch
 x86-entry-ia32-ensure-s32-is-sign-extended-to-s64.patch
 net-sched-cbs-fix-not-adding-cbs-instance-to-list.patch
+powerpc-mm-fix-null-pointer-dereference-in-pgtable_c.patch
+powerpc-fix-build-error-due-to-is_valid_bugaddr.patch
+powerpc-mm-fix-build-failures-due-to-arch_reserved_k.patch
+powerpc-lib-validate-size-for-vector-operations.patch
+audit-send-netlink-ack-before-setting-connection-in-.patch
+acpi-video-add-quirk-for-the-colorful-x15-at-23-lapt.patch
+pnp-acpi-fix-fortify-warning.patch
+acpi-extlog-fix-null-pointer-dereference-check.patch
+fs-jfs-ubsan-array-index-out-of-bounds-in-dbadjtree.patch
+ubsan-array-index-out-of-bounds-in-dtsplitroot.patch
+jfs-fix-slab-out-of-bounds-read-in-dtsearch.patch
+jfs-fix-array-index-out-of-bounds-in-dbadjtree.patch
+jfs-fix-uaf-in-jfs_evict_inode.patch
+pstore-ram-fix-crash-when-setting-number-of-cpus-to-.patch
+crypto-stm32-crc32-fix-parsing-list-of-devices.patch
+afs-fix-the-usage-of-read_seqbegin_or_lock-in-afs_fi.patch
+rxrpc_find_service_conn_rcu-fix-the-usage-of-read_se.patch
+jfs-fix-array-index-out-of-bounds-in-dinewext.patch
+hexagon-make-pfn-accessors-statics-inlines.patch
+s390-ptrace-handle-setting-of-fpc-register-correctly.patch
+kvm-s390-fix-setting-of-fpc-register.patch
+sunrpc-fix-a-suspicious-rcu-usage-warning.patch
+ext4-fix-inconsistent-between-segment-fstrim-and-ful.patch
+ext4-unify-the-type-of-flexbg_size-to-unsigned-int.patch
+ext4-remove-unnecessary-check-from-alloc_flex_gd.patch
+ext4-avoid-online-resizing-failures-due-to-oversized.patch
+scsi-lpfc-fix-possible-file-string-name-overflow-whe.patch
+pci-add-no-pm-reset-quirk-for-nvidia-spectrum-device.patch
+bonding-return-enomem-instead-of-bug-in-alb_upper_de.patch
+arm-dts-imx7s-fix-lcdif-compatible.patch
+arm-dts-imx7s-fix-nand-controller-size-cells.patch
+wifi-ath9k-fix-potential-array-index-out-of-bounds-r.patch
+bpf-add-map-and-need_defer-parameters-to-.map_fd_put.patch
+scsi-libfc-don-t-schedule-abort-twice.patch
+scsi-libfc-fix-up-timeout-error-in-fc_fcp_rec_error.patch
+arm-dts-rockchip-fix-rk3036-hdmi-ports-node.patch
+arm-dts-imx25-27-eukrea-fix-rtc-node-name.patch
+arm-dts-imx-use-flash-0-0-pattern.patch
+arm-dts-imx27-fix-sram-node.patch
+arm-dts-imx1-fix-sram-node.patch
+arm-dts-imx27-apf27dev-fix-led-name.patch
+arm-dts-imx23-sansa-use-preferred-i2c-gpios-properti.patch
+arm-dts-imx23-28-fix-the-dma-controller-node-name.patch
+md-whenassemble-the-array-consult-the-superblock-of-.patch
+wifi-rtl8xxxu-add-additional-usb-ids-for-rtl8192eu-d.patch
+wifi-rtlwifi-rtl8723-be-ae-using-calculate_bit_shift.patch
+wifi-cfg80211-free-beacon_ies-when-overridden-from-h.patch
+f2fs-fix-to-check-return-value-of-f2fs_reserve_new_b.patch
+asoc-doc-fix-undefined-snd_soc_dapm_nopm-argument.patch
+fast_dput-handle-underflows-gracefully.patch
+rdma-ipoib-fix-error-code-return-in-ipoib_mcast_join.patch
+drm-drm_file-fix-use-of-uninitialized-variable.patch
+drm-framebuffer-fix-use-of-uninitialized-variable.patch
+drm-mipi-dsi-fix-detach-call-without-attach.patch
+media-stk1160-fixed-high-volume-of-stk1160_dbg-messa.patch
+media-rockchip-rga-fix-swizzling-for-rgb-formats.patch
+pci-add-intel_hda_arl-to-pci_ids.h.patch
+alsa-hda-intel-add-hda_arl-pci-id-support.patch
+hwmon-pc87360-bounds-check-data-innr-usage.patch
+drm-exynos-call-drm_atomic_helper_shutdown-at-shutdo.patch
+ib-ipoib-fix-mcast-list-locking.patch
+media-ddbridge-fix-an-error-code-problem-in-ddb_prob.patch
+drm-msm-dpu-ratelimit-framedone-timeout-msgs.patch
+clk-hi3620-fix-memory-leak-in-hi3620_mmc_clk_init.patch
+clk-mmp-pxa168-fix-memory-leak-in-pxa168_clk_init.patch
+drm-amd-display-make-flip_timestamp_in_us-a-64-bit-v.patch
+drm-amdgpu-let-kfd-sync-with-vm-fences.patch
+drm-amdgpu-drop-fence-check-in-to_amdgpu_amdkfd_fenc.patch
+leds-trigger-panic-don-t-register-panic-notifier-if-.patch
+um-fix-naming-clash-between-uml-and-scheduler.patch
+um-don-t-use-vfprintf-for-os_info.patch
+um-net-fix-return-type-of-uml_net_start_xmit.patch
+mfd-ti_am335x_tscadc-fix-ti-soc-dependencies.patch
+pci-only-override-amd-usb-controller-if-required.patch
+usb-hub-replace-hardcoded-quirk-value-with-bit-macro.patch
+misc-lis3lv02d_i2c-add-missing-setting-of-the-reg_ct.patch
+libsubcmd-fix-memory-leak-in-uniq.patch
+virtio_net-fix-d-directive-writing-between-1-and-11-.patch
+blk-mq-fix-io-hang-from-sbitmap-wakeup-race.patch
+ceph-fix-deadlock-or-deadcode-of-misusing-dget.patch
+drm-amdgpu-release-adev-pm.fw-before-return-in-amdgp.patch
+wifi-cfg80211-fix-rcu-dereference-in-__cfg80211_bss_.patch
diff --git a/queue-4.19/sunrpc-fix-a-suspicious-rcu-usage-warning.patch b/queue-4.19/sunrpc-fix-a-suspicious-rcu-usage-warning.patch
new file mode 100644 (file)
index 0000000..4cf2542
--- /dev/null
@@ -0,0 +1,121 @@
+From 051066c88776c61fe1270cac02e73eadd90bf9ec Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 27 Nov 2023 17:06:18 -0500
+Subject: SUNRPC: Fix a suspicious RCU usage warning
+
+From: Anna Schumaker <Anna.Schumaker@Netapp.com>
+
+[ Upstream commit 31b62908693c90d4d07db597e685d9f25a120073 ]
+
+I received the following warning while running cthon against an ontap
+server running pNFS:
+
+[   57.202521] =============================
+[   57.202522] WARNING: suspicious RCU usage
+[   57.202523] 6.7.0-rc3-g2cc14f52aeb7 #41492 Not tainted
+[   57.202525] -----------------------------
+[   57.202525] net/sunrpc/xprtmultipath.c:349 RCU-list traversed in non-reader section!!
+[   57.202527]
+               other info that might help us debug this:
+
+[   57.202528]
+               rcu_scheduler_active = 2, debug_locks = 1
+[   57.202529] no locks held by test5/3567.
+[   57.202530]
+               stack backtrace:
+[   57.202532] CPU: 0 PID: 3567 Comm: test5 Not tainted 6.7.0-rc3-g2cc14f52aeb7 #41492 5b09971b4965c0aceba19f3eea324a4a806e227e
+[   57.202534] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS unknown 2/2/2022
+[   57.202536] Call Trace:
+[   57.202537]  <TASK>
+[   57.202540]  dump_stack_lvl+0x77/0xb0
+[   57.202551]  lockdep_rcu_suspicious+0x154/0x1a0
+[   57.202556]  rpc_xprt_switch_has_addr+0x17c/0x190 [sunrpc ebe02571b9a8ceebf7d98e71675af20c19bdb1f6]
+[   57.202596]  rpc_clnt_setup_test_and_add_xprt+0x50/0x180 [sunrpc ebe02571b9a8ceebf7d98e71675af20c19bdb1f6]
+[   57.202621]  ? rpc_clnt_add_xprt+0x254/0x300 [sunrpc ebe02571b9a8ceebf7d98e71675af20c19bdb1f6]
+[   57.202646]  rpc_clnt_add_xprt+0x27a/0x300 [sunrpc ebe02571b9a8ceebf7d98e71675af20c19bdb1f6]
+[   57.202671]  ? __pfx_rpc_clnt_setup_test_and_add_xprt+0x10/0x10 [sunrpc ebe02571b9a8ceebf7d98e71675af20c19bdb1f6]
+[   57.202696]  nfs4_pnfs_ds_connect+0x345/0x760 [nfsv4 c716d88496ded0ea6d289bbea684fa996f9b57a9]
+[   57.202728]  ? __pfx_nfs4_test_session_trunk+0x10/0x10 [nfsv4 c716d88496ded0ea6d289bbea684fa996f9b57a9]
+[   57.202754]  nfs4_fl_prepare_ds+0x75/0xc0 [nfs_layout_nfsv41_files e3a4187f18ae8a27b630f9feae6831b584a9360a]
+[   57.202760]  filelayout_write_pagelist+0x4a/0x200 [nfs_layout_nfsv41_files e3a4187f18ae8a27b630f9feae6831b584a9360a]
+[   57.202765]  pnfs_generic_pg_writepages+0xbe/0x230 [nfsv4 c716d88496ded0ea6d289bbea684fa996f9b57a9]
+[   57.202788]  __nfs_pageio_add_request+0x3fd/0x520 [nfs 6c976fa593a7c2976f5a0aeb4965514a828e6902]
+[   57.202813]  nfs_pageio_add_request+0x18b/0x390 [nfs 6c976fa593a7c2976f5a0aeb4965514a828e6902]
+[   57.202831]  nfs_do_writepage+0x116/0x1e0 [nfs 6c976fa593a7c2976f5a0aeb4965514a828e6902]
+[   57.202849]  nfs_writepages_callback+0x13/0x30 [nfs 6c976fa593a7c2976f5a0aeb4965514a828e6902]
+[   57.202866]  write_cache_pages+0x265/0x450
+[   57.202870]  ? __pfx_nfs_writepages_callback+0x10/0x10 [nfs 6c976fa593a7c2976f5a0aeb4965514a828e6902]
+[   57.202891]  nfs_writepages+0x141/0x230 [nfs 6c976fa593a7c2976f5a0aeb4965514a828e6902]
+[   57.202913]  do_writepages+0xd2/0x230
+[   57.202917]  ? filemap_fdatawrite_wbc+0x5c/0x80
+[   57.202921]  filemap_fdatawrite_wbc+0x67/0x80
+[   57.202924]  filemap_write_and_wait_range+0xd9/0x170
+[   57.202930]  nfs_wb_all+0x49/0x180 [nfs 6c976fa593a7c2976f5a0aeb4965514a828e6902]
+[   57.202947]  nfs4_file_flush+0x72/0xb0 [nfsv4 c716d88496ded0ea6d289bbea684fa996f9b57a9]
+[   57.202969]  __se_sys_close+0x46/0xd0
+[   57.202972]  do_syscall_64+0x68/0x100
+[   57.202975]  ? do_syscall_64+0x77/0x100
+[   57.202976]  ? do_syscall_64+0x77/0x100
+[   57.202979]  entry_SYSCALL_64_after_hwframe+0x6e/0x76
+[   57.202982] RIP: 0033:0x7fe2b12e4a94
+[   57.202985] Code: 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 80 3d d5 18 0e 00 00 74 13 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 44 c3 0f 1f 00 48 83 ec 18 89 7c 24 0c e8 c3
+[   57.202987] RSP: 002b:00007ffe857ddb38 EFLAGS: 00000202 ORIG_RAX: 0000000000000003
+[   57.202989] RAX: ffffffffffffffda RBX: 00007ffe857dfd68 RCX: 00007fe2b12e4a94
+[   57.202991] RDX: 0000000000002000 RSI: 00007ffe857ddc40 RDI: 0000000000000003
+[   57.202992] RBP: 00007ffe857dfc50 R08: 7fffffffffffffff R09: 0000000065650f49
+[   57.202993] R10: 00007fe2b11f8300 R11: 0000000000000202 R12: 0000000000000000
+[   57.202994] R13: 00007ffe857dfd80 R14: 00007fe2b1445000 R15: 0000000000000000
+[   57.202999]  </TASK>
+
+The problem seems to be that two out of three callers aren't taking the
+rcu_read_lock() before calling the list_for_each_entry_rcu() function in
+rpc_xprt_switch_has_addr(). I fix this by having
+rpc_xprt_switch_has_addr() unconditionaly take the rcu_read_lock(),
+which is okay to do recursively in the case that the lock has already
+been taken by a caller.
+
+Reviewed-by: Jeff Layton <jlayton@kernel.org>
+Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sunrpc/xprtmultipath.c | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/net/sunrpc/xprtmultipath.c b/net/sunrpc/xprtmultipath.c
+index e2d64c7138c3..699d5ba128fa 100644
+--- a/net/sunrpc/xprtmultipath.c
++++ b/net/sunrpc/xprtmultipath.c
+@@ -235,8 +235,9 @@ struct rpc_xprt *xprt_iter_current_entry(struct rpc_xprt_iter *xpi)
+       return xprt_switch_find_current_entry(head, xpi->xpi_cursor);
+ }
+-bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps,
+-                            const struct sockaddr *sap)
++static
++bool __rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps,
++                              const struct sockaddr *sap)
+ {
+       struct list_head *head;
+       struct rpc_xprt *pos;
+@@ -255,6 +256,18 @@ bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps,
+       return false;
+ }
++bool rpc_xprt_switch_has_addr(struct rpc_xprt_switch *xps,
++                            const struct sockaddr *sap)
++{
++      bool res;
++
++      rcu_read_lock();
++      res = __rpc_xprt_switch_has_addr(xps, sap);
++      rcu_read_unlock();
++
++      return res;
++}
++
+ static
+ struct rpc_xprt *xprt_switch_find_next_entry(struct list_head *head,
+               const struct rpc_xprt *cur)
+-- 
+2.43.0
+
diff --git a/queue-4.19/ubsan-array-index-out-of-bounds-in-dtsplitroot.patch b/queue-4.19/ubsan-array-index-out-of-bounds-in-dtsplitroot.patch
new file mode 100644 (file)
index 0000000..f6b37be
--- /dev/null
@@ -0,0 +1,77 @@
+From cc4a2f8744c839a21d3bdb8ad04ca2a0233e8819 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 14 Oct 2023 00:10:28 +0500
+Subject: UBSAN: array-index-out-of-bounds in dtSplitRoot
+
+From: Osama Muhammad <osmtendev@gmail.com>
+
+[ Upstream commit 27e56f59bab5ddafbcfe69ad7a4a6ea1279c1b16 ]
+
+Syzkaller reported the following issue:
+
+oop0: detected capacity change from 0 to 32768
+
+UBSAN: array-index-out-of-bounds in fs/jfs/jfs_dtree.c:1971:9
+index -2 is out of range for type 'struct dtslot [128]'
+CPU: 0 PID: 3613 Comm: syz-executor270 Not tainted 6.0.0-syzkaller-09423-g493ffd6605b2 #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/22/2022
+Call Trace:
+ <TASK>
+ __dump_stack lib/dump_stack.c:88 [inline]
+ dump_stack_lvl+0x1b1/0x28e lib/dump_stack.c:106
+ ubsan_epilogue lib/ubsan.c:151 [inline]
+ __ubsan_handle_out_of_bounds+0xdb/0x130 lib/ubsan.c:283
+ dtSplitRoot+0x8d8/0x1900 fs/jfs/jfs_dtree.c:1971
+ dtSplitUp fs/jfs/jfs_dtree.c:985 [inline]
+ dtInsert+0x1189/0x6b80 fs/jfs/jfs_dtree.c:863
+ jfs_mkdir+0x757/0xb00 fs/jfs/namei.c:270
+ vfs_mkdir+0x3b3/0x590 fs/namei.c:4013
+ do_mkdirat+0x279/0x550 fs/namei.c:4038
+ __do_sys_mkdirat fs/namei.c:4053 [inline]
+ __se_sys_mkdirat fs/namei.c:4051 [inline]
+ __x64_sys_mkdirat+0x85/0x90 fs/namei.c:4051
+ do_syscall_x64 arch/x86/entry/common.c:50 [inline]
+ do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80
+ entry_SYSCALL_64_after_hwframe+0x63/0xcd
+RIP: 0033:0x7fcdc0113fd9
+Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
+RSP: 002b:00007ffeb8bc67d8 EFLAGS: 00000246 ORIG_RAX: 0000000000000102
+RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fcdc0113fd9
+RDX: 0000000000000000 RSI: 0000000020000340 RDI: 0000000000000003
+RBP: 00007fcdc00d37a0 R08: 0000000000000000 R09: 00007fcdc00d37a0
+R10: 00005555559a72c0 R11: 0000000000000246 R12: 00000000f8008000
+R13: 0000000000000000 R14: 00083878000000f8 R15: 0000000000000000
+ </TASK>
+
+The issue is caused when the value of fsi becomes less than -1.
+The check to break the loop when fsi value becomes -1 is present
+but syzbot was able to produce value less than -1 which cause the error.
+This patch simply add the change for the values less than 0.
+
+The patch is tested via syzbot.
+
+Reported-and-tested-by: syzbot+d4b1df2e9d4ded6488ec@syzkaller.appspotmail.com
+Link: https://syzkaller.appspot.com/bug?extid=d4b1df2e9d4ded6488ec
+Signed-off-by: Osama Muhammad <osmtendev@gmail.com>
+Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/jfs/jfs_dtree.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c
+index 52bae3f5c914..320c9f42b65b 100644
+--- a/fs/jfs/jfs_dtree.c
++++ b/fs/jfs/jfs_dtree.c
+@@ -1983,7 +1983,7 @@ static int dtSplitRoot(tid_t tid,
+               do {
+                       f = &rp->slot[fsi];
+                       fsi = f->next;
+-              } while (fsi != -1);
++              } while (fsi >= 0);
+               f->next = n;
+       }
+-- 
+2.43.0
+
diff --git a/queue-4.19/um-don-t-use-vfprintf-for-os_info.patch b/queue-4.19/um-don-t-use-vfprintf-for-os_info.patch
new file mode 100644 (file)
index 0000000..ba10d3a
--- /dev/null
@@ -0,0 +1,72 @@
+From 7c04716c684d299f39fc70d0ab94ef84fe18212d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 10 Nov 2023 12:03:41 +0100
+Subject: um: Don't use vfprintf() for os_info()
+
+From: Benjamin Berg <benjamin@sipsolutions.net>
+
+[ Upstream commit 236f9fe39b02c15fa5530b53e9cca48354394389 ]
+
+The threads allocated inside the kernel have only a single page of
+stack. Unfortunately, the vfprintf function in standard glibc may use
+too much stack-space, overflowing it.
+
+To make os_info safe to be used by helper threads, use the kernel
+vscnprintf function into a smallish buffer and write out the information
+to stderr.
+
+Signed-off-by: Benjamin Berg <benjamin@sipsolutions.net>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/um/os-Linux/util.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/arch/um/os-Linux/util.c b/arch/um/os-Linux/util.c
+index 8cc8b2617a67..0436cc9537e0 100644
+--- a/arch/um/os-Linux/util.c
++++ b/arch/um/os-Linux/util.c
+@@ -166,23 +166,38 @@ __uml_setup("quiet", quiet_cmd_param,
+ "quiet\n"
+ "    Turns off information messages during boot.\n\n");
++/*
++ * The os_info/os_warn functions will be called by helper threads. These
++ * have a very limited stack size and using the libc formatting functions
++ * may overflow the stack.
++ * So pull in the kernel vscnprintf and use that instead with a fixed
++ * on-stack buffer.
++ */
++int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
++
+ void os_info(const char *fmt, ...)
+ {
++      char buf[256];
+       va_list list;
++      int len;
+       if (quiet_info)
+               return;
+       va_start(list, fmt);
+-      vfprintf(stderr, fmt, list);
++      len = vscnprintf(buf, sizeof(buf), fmt, list);
++      fwrite(buf, len, 1, stderr);
+       va_end(list);
+ }
+ void os_warn(const char *fmt, ...)
+ {
++      char buf[256];
+       va_list list;
++      int len;
+       va_start(list, fmt);
+-      vfprintf(stderr, fmt, list);
++      len = vscnprintf(buf, sizeof(buf), fmt, list);
++      fwrite(buf, len, 1, stderr);
+       va_end(list);
+ }
+-- 
+2.43.0
+
diff --git a/queue-4.19/um-fix-naming-clash-between-uml-and-scheduler.patch b/queue-4.19/um-fix-naming-clash-between-uml-and-scheduler.patch
new file mode 100644 (file)
index 0000000..211abe6
--- /dev/null
@@ -0,0 +1,82 @@
+From f32bc3f9fb1436c9c3ae8cd5656a05263000b8a2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Sep 2023 15:34:44 +0100
+Subject: um: Fix naming clash between UML and scheduler
+
+From: Anton Ivanov <anton.ivanov@cambridgegreys.com>
+
+[ Upstream commit 541d4e4d435c8b9bfd29f70a1da4a2db97794e0a ]
+
+__cant_sleep was already used and exported by the scheduler.
+The name had to be changed to a UML specific one.
+
+Signed-off-by: Anton Ivanov <anton.ivanov@cambridgegreys.com>
+Reviewed-by: Peter Lafreniere <peter@n8pjl.ca>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/um/include/shared/kern_util.h | 2 +-
+ arch/um/kernel/process.c           | 2 +-
+ arch/um/os-Linux/helper.c          | 6 +++---
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/arch/um/include/shared/kern_util.h b/arch/um/include/shared/kern_util.h
+index 35ab97e4bb9b..f2da8347d5f5 100644
+--- a/arch/um/include/shared/kern_util.h
++++ b/arch/um/include/shared/kern_util.h
+@@ -49,7 +49,7 @@ extern void do_uml_exitcalls(void);
+  * Are we disallowed to sleep? Used to choose between GFP_KERNEL and
+  * GFP_ATOMIC.
+  */
+-extern int __cant_sleep(void);
++extern int __uml_cant_sleep(void);
+ extern int get_current_pid(void);
+ extern int copy_from_user_proc(void *to, void *from, int size);
+ extern int cpu(void);
+diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
+index 691b83b10649..c9d09d04d19d 100644
+--- a/arch/um/kernel/process.c
++++ b/arch/um/kernel/process.c
+@@ -210,7 +210,7 @@ void arch_cpu_idle(void)
+       local_irq_enable();
+ }
+-int __cant_sleep(void) {
++int __uml_cant_sleep(void) {
+       return in_atomic() || irqs_disabled() || in_interrupt();
+       /* Is in_interrupt() really needed? */
+ }
+diff --git a/arch/um/os-Linux/helper.c b/arch/um/os-Linux/helper.c
+index 3f02d4232812..53d450e4a53a 100644
+--- a/arch/um/os-Linux/helper.c
++++ b/arch/um/os-Linux/helper.c
+@@ -45,7 +45,7 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv)
+       unsigned long stack, sp;
+       int pid, fds[2], ret, n;
+-      stack = alloc_stack(0, __cant_sleep());
++      stack = alloc_stack(0, __uml_cant_sleep());
+       if (stack == 0)
+               return -ENOMEM;
+@@ -69,7 +69,7 @@ int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv)
+       data.pre_data = pre_data;
+       data.argv = argv;
+       data.fd = fds[1];
+-      data.buf = __cant_sleep() ? uml_kmalloc(PATH_MAX, UM_GFP_ATOMIC) :
++      data.buf = __uml_cant_sleep() ? uml_kmalloc(PATH_MAX, UM_GFP_ATOMIC) :
+                                       uml_kmalloc(PATH_MAX, UM_GFP_KERNEL);
+       pid = clone(helper_child, (void *) sp, CLONE_VM, &data);
+       if (pid < 0) {
+@@ -116,7 +116,7 @@ int run_helper_thread(int (*proc)(void *), void *arg, unsigned int flags,
+       unsigned long stack, sp;
+       int pid, status, err;
+-      stack = alloc_stack(0, __cant_sleep());
++      stack = alloc_stack(0, __uml_cant_sleep());
+       if (stack == 0)
+               return -ENOMEM;
+-- 
+2.43.0
+
diff --git a/queue-4.19/um-net-fix-return-type-of-uml_net_start_xmit.patch b/queue-4.19/um-net-fix-return-type-of-uml_net_start_xmit.patch
new file mode 100644 (file)
index 0000000..43ba013
--- /dev/null
@@ -0,0 +1,53 @@
+From c3c52b99ed1d9b49f321cae3de9f323eb0c11af8 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Dec 2023 09:49:46 -0700
+Subject: um: net: Fix return type of uml_net_start_xmit()
+
+From: Nathan Chancellor <nathan@kernel.org>
+
+[ Upstream commit 7d748f60a4b82b50bf25fad1bd42d33f049f76aa ]
+
+With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG),
+indirect call targets are validated against the expected function
+pointer prototype to make sure the call target is valid to help mitigate
+ROP attacks. If they are not identical, there is a failure at run time,
+which manifests as either a kernel panic or thread getting killed. A
+warning in clang aims to catch these at compile time, which reveals:
+
+  arch/um/drivers/net_kern.c:353:21: warning: incompatible function pointer types initializing 'netdev_tx_t (*)(struct sk_buff *, struct net_device *)' (aka 'enum netdev_tx (*)(struct sk_buff *, struct net_device *)') with an expression of type 'int (struct sk_buff *, struct net_device *)' [-Wincompatible-function-pointer-types-strict]
+    353 |         .ndo_start_xmit         = uml_net_start_xmit,
+        |                                   ^~~~~~~~~~~~~~~~~~
+  1 warning generated.
+
+->ndo_start_xmit() in 'struct net_device_ops' expects a return type of
+'netdev_tx_t', not 'int'. Adjust the return type of uml_net_start_xmit()
+to match the prototype's to resolve the warning. While UML does not
+currently implement support for kCFI, it could in the future, which
+means this warning becomes a fatal CFI failure at run time.
+
+Reported-by: kernel test robot <lkp@intel.com>
+Closes: https://lore.kernel.org/oe-kbuild-all/202310031340.v1vPh207-lkp@intel.com/
+Acked-by: Anton Ivanov <anton.ivanov@cambridgegreys.com>
+Signed-off-by: Nathan Chancellor <nathan@kernel.org>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/um/drivers/net_kern.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c
+index 3ef1b48e064a..0216e3254c90 100644
+--- a/arch/um/drivers/net_kern.c
++++ b/arch/um/drivers/net_kern.c
+@@ -206,7 +206,7 @@ static int uml_net_close(struct net_device *dev)
+       return 0;
+ }
+-static int uml_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
++static netdev_tx_t uml_net_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+       struct uml_net_private *lp = netdev_priv(dev);
+       unsigned long flags;
+-- 
+2.43.0
+
diff --git a/queue-4.19/usb-hub-replace-hardcoded-quirk-value-with-bit-macro.patch b/queue-4.19/usb-hub-replace-hardcoded-quirk-value-with-bit-macro.patch
new file mode 100644 (file)
index 0000000..f4fe2d9
--- /dev/null
@@ -0,0 +1,39 @@
+From e8863b887911b5409446cc5d847d7db6823040b0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 Dec 2023 19:18:28 +0100
+Subject: usb: hub: Replace hardcoded quirk value with BIT() macro
+
+From: Hardik Gajjar <hgajjar@de.adit-jv.com>
+
+[ Upstream commit 6666ea93d2c422ebeb8039d11e642552da682070 ]
+
+This patch replaces the hardcoded quirk value in the macro with
+BIT().
+
+Signed-off-by: Hardik Gajjar <hgajjar@de.adit-jv.com>
+Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
+Link: https://lore.kernel.org/r/20231205181829.127353-1-hgajjar@de.adit-jv.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/usb/core/hub.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
+index 898df2e43945..b4e970ad1f79 100644
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -43,8 +43,8 @@
+ #define USB_VENDOR_TEXAS_INSTRUMENTS          0x0451
+ #define USB_PRODUCT_TUSB8041_USB3             0x8140
+ #define USB_PRODUCT_TUSB8041_USB2             0x8142
+-#define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND      0x01
+-#define HUB_QUIRK_DISABLE_AUTOSUSPEND         0x02
++#define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND      BIT(0)
++#define HUB_QUIRK_DISABLE_AUTOSUSPEND         BIT(1)
+ #define USB_TP_TRANSMISSION_DELAY     40      /* ns */
+ #define USB_TP_TRANSMISSION_DELAY_MAX 65535   /* ns */
+-- 
+2.43.0
+
diff --git a/queue-4.19/virtio_net-fix-d-directive-writing-between-1-and-11-.patch b/queue-4.19/virtio_net-fix-d-directive-writing-between-1-and-11-.patch
new file mode 100644 (file)
index 0000000..29f1542
--- /dev/null
@@ -0,0 +1,84 @@
+From 6a925fc9504dacdd53944fd3e55269b6082fcdff Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 4 Jan 2024 10:09:02 +0800
+Subject: =?UTF-8?q?virtio=5Fnet:=20Fix=20"=E2=80=98%d=E2=80=99=20directive?=
+ =?UTF-8?q?=20writing=20between=201=20and=2011=20bytes=20into=20a=20region?=
+ =?UTF-8?q?=20of=20size=2010"=20warnings?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Zhu Yanjun <yanjun.zhu@linux.dev>
+
+[ Upstream commit e3fe8d28c67bf6c291e920c6d04fa22afa14e6e4 ]
+
+Fix the warnings when building virtio_net driver.
+
+"
+drivers/net/virtio_net.c: In function ‘init_vqs’:
+drivers/net/virtio_net.c:4551:48: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 10 [-Wformat-overflow=]
+ 4551 |                 sprintf(vi->rq[i].name, "input.%d", i);
+      |                                                ^~
+In function ‘virtnet_find_vqs’,
+    inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
+drivers/net/virtio_net.c:4551:41: note: directive argument in the range [-2147483643, 65534]
+ 4551 |                 sprintf(vi->rq[i].name, "input.%d", i);
+      |                                         ^~~~~~~~~~
+drivers/net/virtio_net.c:4551:17: note: ‘sprintf’ output between 8 and 18 bytes into a destination of size 16
+ 4551 |                 sprintf(vi->rq[i].name, "input.%d", i);
+      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+drivers/net/virtio_net.c: In function ‘init_vqs’:
+drivers/net/virtio_net.c:4552:49: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 9 [-Wformat-overflow=]
+ 4552 |                 sprintf(vi->sq[i].name, "output.%d", i);
+      |                                                 ^~
+In function ‘virtnet_find_vqs’,
+    inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
+drivers/net/virtio_net.c:4552:41: note: directive argument in the range [-2147483643, 65534]
+ 4552 |                 sprintf(vi->sq[i].name, "output.%d", i);
+      |                                         ^~~~~~~~~~~
+drivers/net/virtio_net.c:4552:17: note: ‘sprintf’ output between 9 and 19 bytes into a destination of size 16
+ 4552 |                 sprintf(vi->sq[i].name, "output.%d", i);
+
+"
+
+Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
+Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
+Link: https://lore.kernel.org/r/20240104020902.2753599-1-yanjun.zhu@intel.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/virtio_net.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
+index 331d74f9281b..2b012d7165cd 100644
+--- a/drivers/net/virtio_net.c
++++ b/drivers/net/virtio_net.c
+@@ -2727,10 +2727,11 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
+ {
+       vq_callback_t **callbacks;
+       struct virtqueue **vqs;
+-      int ret = -ENOMEM;
+-      int i, total_vqs;
+       const char **names;
++      int ret = -ENOMEM;
++      int total_vqs;
+       bool *ctx;
++      u16 i;
+       /* We expect 1 RX virtqueue followed by 1 TX virtqueue, followed by
+        * possible N-1 RX/TX queue pairs used in multiqueue mode, followed by
+@@ -2767,8 +2768,8 @@ static int virtnet_find_vqs(struct virtnet_info *vi)
+       for (i = 0; i < vi->max_queue_pairs; i++) {
+               callbacks[rxq2vq(i)] = skb_recv_done;
+               callbacks[txq2vq(i)] = skb_xmit_done;
+-              sprintf(vi->rq[i].name, "input.%d", i);
+-              sprintf(vi->sq[i].name, "output.%d", i);
++              sprintf(vi->rq[i].name, "input.%u", i);
++              sprintf(vi->sq[i].name, "output.%u", i);
+               names[rxq2vq(i)] = vi->rq[i].name;
+               names[txq2vq(i)] = vi->sq[i].name;
+               if (ctx)
+-- 
+2.43.0
+
diff --git a/queue-4.19/wifi-ath9k-fix-potential-array-index-out-of-bounds-r.patch b/queue-4.19/wifi-ath9k-fix-potential-array-index-out-of-bounds-r.patch
new file mode 100644 (file)
index 0000000..89483b6
--- /dev/null
@@ -0,0 +1,61 @@
+From 4fa7aeedd7e9198cdae812187b2958965469d3ac Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 22 Nov 2023 20:31:04 +0200
+Subject: wifi: ath9k: Fix potential array-index-out-of-bounds read in
+ ath9k_htc_txstatus()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Minsuk Kang <linuxlovemin@yonsei.ac.kr>
+
+[ Upstream commit 2adc886244dff60f948497b59affb6c6ebb3c348 ]
+
+Fix an array-index-out-of-bounds read in ath9k_htc_txstatus(). The bug
+occurs when txs->cnt, data from a URB provided by a USB device, is
+bigger than the size of the array txs->txstatus, which is
+HTC_MAX_TX_STATUS. WARN_ON() already checks it, but there is no bug
+handling code after the check. Make the function return if that is the
+case.
+
+Found by a modified version of syzkaller.
+
+UBSAN: array-index-out-of-bounds in htc_drv_txrx.c
+index 13 is out of range for type '__wmi_event_txstatus [12]'
+Call Trace:
+ ath9k_htc_txstatus
+ ath9k_wmi_event_tasklet
+ tasklet_action_common
+ __do_softirq
+ irq_exit_rxu
+ sysvec_apic_timer_interrupt
+
+Signed-off-by: Minsuk Kang <linuxlovemin@yonsei.ac.kr>
+Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://lore.kernel.org/r/20231113065756.1491991-1-linuxlovemin@yonsei.ac.kr
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+index 979ac31a77a0..527bca8f7deb 100644
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+@@ -647,9 +647,10 @@ void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event)
+       struct ath9k_htc_tx_event *tx_pend;
+       int i;
+-      for (i = 0; i < txs->cnt; i++) {
+-              WARN_ON(txs->cnt > HTC_MAX_TX_STATUS);
++      if (WARN_ON_ONCE(txs->cnt > HTC_MAX_TX_STATUS))
++              return;
++      for (i = 0; i < txs->cnt; i++) {
+               __txs = &txs->txstatus[i];
+               skb = ath9k_htc_tx_get_packet(priv, __txs);
+-- 
+2.43.0
+
diff --git a/queue-4.19/wifi-cfg80211-fix-rcu-dereference-in-__cfg80211_bss_.patch b/queue-4.19/wifi-cfg80211-fix-rcu-dereference-in-__cfg80211_bss_.patch
new file mode 100644 (file)
index 0000000..033558d
--- /dev/null
@@ -0,0 +1,38 @@
+From c4b07012b73459d723500c00054c09d35401b226 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 3 Jan 2024 20:13:51 +0800
+Subject: wifi: cfg80211: fix RCU dereference in __cfg80211_bss_update
+
+From: Edward Adam Davis <eadavis@qq.com>
+
+[ Upstream commit 1184950e341c11b6f82bc5b59564411d9537ab27 ]
+
+Replace rcu_dereference() with rcu_access_pointer() since we hold
+the lock here (and aren't in an RCU critical section).
+
+Fixes: 32af9a9e1069 ("wifi: cfg80211: free beacon_ies when overridden from hidden BSS")
+Reported-and-tested-by: syzbot+864a269c27ee06b58374@syzkaller.appspotmail.com
+Signed-off-by: Edward Adam Davis <eadavis@qq.com>
+Link: https://msgid.link/tencent_BF8F0DF0258C8DBF124CDDE4DD8D992DCF07@qq.com
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/wireless/scan.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/wireless/scan.c b/net/wireless/scan.c
+index 7f1a4ba975dd..dacb9ceee3ef 100644
+--- a/net/wireless/scan.c
++++ b/net/wireless/scan.c
+@@ -1019,7 +1019,7 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,
+                                        &hidden->hidden_list);
+                               hidden->refcount++;
+-                              ies = (void *)rcu_dereference(new->pub.beacon_ies);
++                              ies = (void *)rcu_access_pointer(new->pub.beacon_ies);
+                               rcu_assign_pointer(new->pub.beacon_ies,
+                                                  hidden->pub.beacon_ies);
+                               if (ies)
+-- 
+2.43.0
+
diff --git a/queue-4.19/wifi-cfg80211-free-beacon_ies-when-overridden-from-h.patch b/queue-4.19/wifi-cfg80211-free-beacon_ies-when-overridden-from-h.patch
new file mode 100644 (file)
index 0000000..8a140ac
--- /dev/null
@@ -0,0 +1,44 @@
+From bc69fe03d1b470beb536312cb7edfc646a078e69 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 20 Dec 2023 13:41:41 +0200
+Subject: wifi: cfg80211: free beacon_ies when overridden from hidden BSS
+
+From: Benjamin Berg <benjamin.berg@intel.com>
+
+[ Upstream commit 32af9a9e1069e55bc02741fb00ac9d0ca1a2eaef ]
+
+This is a more of a cosmetic fix. The branch will only be taken if
+proberesp_ies is set, which implies that beacon_ies is not set unless we
+are connected to an AP that just did a channel switch. And, in that case
+we should have found the BSS in the internal storage to begin with.
+
+Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
+Reviewed-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
+Link: https://msgid.link/20231220133549.b898e22dadff.Id8c4c10aedd176ef2e18a4cad747b299f150f9df@changeid
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/wireless/scan.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/net/wireless/scan.c b/net/wireless/scan.c
+index d871349036a5..7f1a4ba975dd 100644
+--- a/net/wireless/scan.c
++++ b/net/wireless/scan.c
+@@ -1018,8 +1018,12 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,
+                               list_add(&new->hidden_list,
+                                        &hidden->hidden_list);
+                               hidden->refcount++;
++
++                              ies = (void *)rcu_dereference(new->pub.beacon_ies);
+                               rcu_assign_pointer(new->pub.beacon_ies,
+                                                  hidden->pub.beacon_ies);
++                              if (ies)
++                                      kfree_rcu(ies, rcu_head);
+                       }
+               } else {
+                       /*
+-- 
+2.43.0
+
diff --git a/queue-4.19/wifi-rtl8xxxu-add-additional-usb-ids-for-rtl8192eu-d.patch b/queue-4.19/wifi-rtl8xxxu-add-additional-usb-ids-for-rtl8192eu-d.patch
new file mode 100644 (file)
index 0000000..7c3bc91
--- /dev/null
@@ -0,0 +1,48 @@
+From ec227b0d103542e9743af12b2b0e48f88a2dcb9a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 17 Dec 2023 20:30:17 +0800
+Subject: wifi: rtl8xxxu: Add additional USB IDs for RTL8192EU devices
+
+From: Zenm Chen <zenmchen@gmail.com>
+
+[ Upstream commit 4e87ca403e2008b9e182239e1abbf6876a55eb33 ]
+
+Add additional USB IDs found in the vendor driver from
+https://github.com/Mange/rtl8192eu-linux-driver to support more
+RTL8192EU devices.
+
+Signed-off-by: Zenm Chen <zenmchen@gmail.com>
+Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://msgid.link/20231217123017.1982-1-zenmchen@gmail.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c    | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+index 780dab276829..9c5a7ea1479e 100644
+--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
++++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+@@ -6366,6 +6366,18 @@ static const struct usb_device_id dev_table[] = {
+       .driver_info = (unsigned long)&rtl8192eu_fops},
+ {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_REALTEK, 0x818c, 0xff, 0xff, 0xff),
+       .driver_info = (unsigned long)&rtl8192eu_fops},
++/* D-Link DWA-131 rev C1 */
++{USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3312, 0xff, 0xff, 0xff),
++      .driver_info = (unsigned long)&rtl8192eu_fops},
++/* TP-Link TL-WN8200ND V2 */
++{USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0126, 0xff, 0xff, 0xff),
++      .driver_info = (unsigned long)&rtl8192eu_fops},
++/* Mercusys MW300UM */
++{USB_DEVICE_AND_INTERFACE_INFO(0x2c4e, 0x0100, 0xff, 0xff, 0xff),
++      .driver_info = (unsigned long)&rtl8192eu_fops},
++/* Mercusys MW300UH */
++{USB_DEVICE_AND_INTERFACE_INFO(0x2c4e, 0x0104, 0xff, 0xff, 0xff),
++      .driver_info = (unsigned long)&rtl8192eu_fops},
+ #endif
+ { }
+ };
+-- 
+2.43.0
+
diff --git a/queue-4.19/wifi-rtlwifi-rtl8723-be-ae-using-calculate_bit_shift.patch b/queue-4.19/wifi-rtlwifi-rtl8723-be-ae-using-calculate_bit_shift.patch
new file mode 100644 (file)
index 0000000..d83fa65
--- /dev/null
@@ -0,0 +1,77 @@
+From 8869c992df26affe5a91a69f97d104ac6d76a273 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Dec 2023 14:57:39 +0800
+Subject: wifi: rtlwifi: rtl8723{be,ae}: using calculate_bit_shift()
+
+From: Su Hui <suhui@nfschina.com>
+
+[ Upstream commit 5c16618bc06a41ad68fd8499a21d35ef57ca06c2 ]
+
+Using calculate_bit_shift() to replace rtl8723_phy_calculate_bit_shift().
+And fix an undefined bitwise shift behavior problem.
+
+Signed-off-by: Su Hui <suhui@nfschina.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://msgid.link/20231219065739.1895666-12-suhui@nfschina.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/realtek/rtlwifi/rtl8723ae/phy.c | 6 +++---
+ drivers/net/wireless/realtek/rtlwifi/rtl8723be/phy.c | 4 ++--
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/phy.c
+index 5cf29f5a4b54..e6ac496e898e 100644
+--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/phy.c
++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/phy.c
+@@ -72,7 +72,7 @@ u32 rtl8723e_phy_query_rf_reg(struct ieee80211_hw *hw,
+                                                           rfpath, regaddr);
+       }
+-      bitshift = rtl8723_phy_calculate_bit_shift(bitmask);
++      bitshift = calculate_bit_shift(bitmask);
+       readback_value = (original_value & bitmask) >> bitshift;
+       spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
+@@ -104,7 +104,7 @@ void rtl8723e_phy_set_rf_reg(struct ieee80211_hw *hw,
+                       original_value = rtl8723_phy_rf_serial_read(hw,
+                                                                   rfpath,
+                                                                   regaddr);
+-                      bitshift = rtl8723_phy_calculate_bit_shift(bitmask);
++                      bitshift = calculate_bit_shift(bitmask);
+                       data =
+                           ((original_value & (~bitmask)) |
+                            (data << bitshift));
+@@ -113,7 +113,7 @@ void rtl8723e_phy_set_rf_reg(struct ieee80211_hw *hw,
+               rtl8723_phy_rf_serial_write(hw, rfpath, regaddr, data);
+       } else {
+               if (bitmask != RFREG_OFFSET_MASK) {
+-                      bitshift = rtl8723_phy_calculate_bit_shift(bitmask);
++                      bitshift = calculate_bit_shift(bitmask);
+                       data =
+                           ((original_value & (~bitmask)) |
+                            (data << bitshift));
+diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/phy.c
+index 1263b12db5dc..bbbbf61d7bcf 100644
+--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/phy.c
++++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/phy.c
+@@ -64,7 +64,7 @@ u32 rtl8723be_phy_query_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
+       spin_lock_irqsave(&rtlpriv->locks.rf_lock, flags);
+       original_value = rtl8723_phy_rf_serial_read(hw, rfpath, regaddr);
+-      bitshift = rtl8723_phy_calculate_bit_shift(bitmask);
++      bitshift = calculate_bit_shift(bitmask);
+       readback_value = (original_value & bitmask) >> bitshift;
+       spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
+@@ -92,7 +92,7 @@ void rtl8723be_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path path,
+       if (bitmask != RFREG_OFFSET_MASK) {
+                       original_value = rtl8723_phy_rf_serial_read(hw, path,
+                                                                   regaddr);
+-                      bitshift = rtl8723_phy_calculate_bit_shift(bitmask);
++                      bitshift = calculate_bit_shift(bitmask);
+                       data = ((original_value & (~bitmask)) |
+                               (data << bitshift));
+               }
+-- 
+2.43.0
+