]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Mar 2026 13:14:09 +0000 (14:14 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 17 Mar 2026 13:14:09 +0000 (14:14 +0100)
added patches:
btrfs-abort-transaction-on-failure-to-update-root-in-the-received-subvol-ioctl.patch
btrfs-fix-transaction-abort-on-file-creation-due-to-name-hash-collision.patch
drm-amd-set-num-ip-blocks-to-0-if-discovery-fails.patch
drm-amdgpu-fix-use-after-free-race-in-vm-acquire.patch
drm-bridge-ti-sn65dsi83-fix-cha_dsi_clk_range-rounding.patch
iio-chemical-bme680-fix-measurement-wait-duration-calculation.patch
iio-chemical-sps30_i2c-fix-buffer-size-in-sps30_i2c_read_meas.patch
iio-chemical-sps30_serial-fix-buffer-size-in-sps30_serial_read_meas.patch
iio-dac-ds4424-reject-128-raw-value.patch
iio-gyro-mpu3050-core-fix-pm_runtime-error-handling.patch
iio-gyro-mpu3050-i2c-fix-pm_runtime-error-handling.patch
iio-imu-inv_icm42600-fix-odr-switch-to-the-same-value.patch
iio-potentiometer-mcp4131-fix-double-application-of-wiper-shift.patch
lib-bootconfig-check-bounds-before-writing-in-__xbc_open_brace.patch
lib-bootconfig-fix-off-by-one-in-xbc_verify_tree-unclosed-brace-error.patch
lib-bootconfig-fix-snprintf-truncation-check-in-xbc_node_compose_key_after.patch
s390-dasd-copy-detected-format-information-to-secondary-device.patch
s390-dasd-move-quiesce-state-with-pprc-swap.patch
scsi-core-fix-error-handling-for-scsi_alloc_sdev.patch
smb-client-fix-atomic-open-with-o_direct-o_sync.patch
smb-client-fix-iface-port-assignment-in-parse_server_interfaces.patch
tracing-fix-trace_buf_size-cmdline-parameter-with-sizes-2g.patch
x86-apic-disable-x2apic-on-resume-if-the-kernel-expects-so.patch
xfs-fix-undersized-l_iclog_roundoff-values.patch

25 files changed:
queue-6.1/btrfs-abort-transaction-on-failure-to-update-root-in-the-received-subvol-ioctl.patch [new file with mode: 0644]
queue-6.1/btrfs-fix-transaction-abort-on-file-creation-due-to-name-hash-collision.patch [new file with mode: 0644]
queue-6.1/drm-amd-set-num-ip-blocks-to-0-if-discovery-fails.patch [new file with mode: 0644]
queue-6.1/drm-amdgpu-fix-use-after-free-race-in-vm-acquire.patch [new file with mode: 0644]
queue-6.1/drm-bridge-ti-sn65dsi83-fix-cha_dsi_clk_range-rounding.patch [new file with mode: 0644]
queue-6.1/iio-chemical-bme680-fix-measurement-wait-duration-calculation.patch [new file with mode: 0644]
queue-6.1/iio-chemical-sps30_i2c-fix-buffer-size-in-sps30_i2c_read_meas.patch [new file with mode: 0644]
queue-6.1/iio-chemical-sps30_serial-fix-buffer-size-in-sps30_serial_read_meas.patch [new file with mode: 0644]
queue-6.1/iio-dac-ds4424-reject-128-raw-value.patch [new file with mode: 0644]
queue-6.1/iio-gyro-mpu3050-core-fix-pm_runtime-error-handling.patch [new file with mode: 0644]
queue-6.1/iio-gyro-mpu3050-i2c-fix-pm_runtime-error-handling.patch [new file with mode: 0644]
queue-6.1/iio-imu-inv_icm42600-fix-odr-switch-to-the-same-value.patch [new file with mode: 0644]
queue-6.1/iio-potentiometer-mcp4131-fix-double-application-of-wiper-shift.patch [new file with mode: 0644]
queue-6.1/lib-bootconfig-check-bounds-before-writing-in-__xbc_open_brace.patch [new file with mode: 0644]
queue-6.1/lib-bootconfig-fix-off-by-one-in-xbc_verify_tree-unclosed-brace-error.patch [new file with mode: 0644]
queue-6.1/lib-bootconfig-fix-snprintf-truncation-check-in-xbc_node_compose_key_after.patch [new file with mode: 0644]
queue-6.1/s390-dasd-copy-detected-format-information-to-secondary-device.patch [new file with mode: 0644]
queue-6.1/s390-dasd-move-quiesce-state-with-pprc-swap.patch [new file with mode: 0644]
queue-6.1/scsi-core-fix-error-handling-for-scsi_alloc_sdev.patch [new file with mode: 0644]
queue-6.1/series
queue-6.1/smb-client-fix-atomic-open-with-o_direct-o_sync.patch [new file with mode: 0644]
queue-6.1/smb-client-fix-iface-port-assignment-in-parse_server_interfaces.patch [new file with mode: 0644]
queue-6.1/tracing-fix-trace_buf_size-cmdline-parameter-with-sizes-2g.patch [new file with mode: 0644]
queue-6.1/x86-apic-disable-x2apic-on-resume-if-the-kernel-expects-so.patch [new file with mode: 0644]
queue-6.1/xfs-fix-undersized-l_iclog_roundoff-values.patch [new file with mode: 0644]

diff --git a/queue-6.1/btrfs-abort-transaction-on-failure-to-update-root-in-the-received-subvol-ioctl.patch b/queue-6.1/btrfs-abort-transaction-on-failure-to-update-root-in-the-received-subvol-ioctl.patch
new file mode 100644 (file)
index 0000000..f7e931e
--- /dev/null
@@ -0,0 +1,36 @@
+From 0f475ee0ebce5c9492b260027cd95270191675fa Mon Sep 17 00:00:00 2001
+From: Filipe Manana <fdmanana@suse.com>
+Date: Fri, 27 Feb 2026 00:02:33 +0000
+Subject: btrfs: abort transaction on failure to update root in the received subvol ioctl
+
+From: Filipe Manana <fdmanana@suse.com>
+
+commit 0f475ee0ebce5c9492b260027cd95270191675fa upstream.
+
+If we failed to update the root we don't abort the transaction, which is
+wrong since we already used the transaction to remove an item from the
+uuid tree.
+
+Fixes: dd5f9615fc5c ("Btrfs: maintain subvolume items in the UUID tree")
+CC: stable@vger.kernel.org # 3.12+
+Reviewed-by: Anand Jain <asj@kernel.org>
+Signed-off-by: Filipe Manana <fdmanana@suse.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/ioctl.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/fs/btrfs/ioctl.c
++++ b/fs/btrfs/ioctl.c
+@@ -4921,7 +4921,8 @@ static long _btrfs_ioctl_set_received_su
+       ret = btrfs_update_root(trans, fs_info->tree_root,
+                               &root->root_key, &root->root_item);
+-      if (ret < 0) {
++      if (unlikely(ret < 0)) {
++              btrfs_abort_transaction(trans, ret);
+               btrfs_end_transaction(trans);
+               goto out;
+       }
diff --git a/queue-6.1/btrfs-fix-transaction-abort-on-file-creation-due-to-name-hash-collision.patch b/queue-6.1/btrfs-fix-transaction-abort-on-file-creation-due-to-name-hash-collision.patch
new file mode 100644 (file)
index 0000000..4ff790f
--- /dev/null
@@ -0,0 +1,189 @@
+From 2d1ababdedd4ba38867c2500eb7f95af5ddeeef7 Mon Sep 17 00:00:00 2001
+From: Filipe Manana <fdmanana@suse.com>
+Date: Thu, 26 Feb 2026 11:05:43 +0000
+Subject: btrfs: fix transaction abort on file creation due to name hash collision
+
+From: Filipe Manana <fdmanana@suse.com>
+
+commit 2d1ababdedd4ba38867c2500eb7f95af5ddeeef7 upstream.
+
+If we attempt to create several files with names that result in the same
+hash, we have to pack them in same dir item and that has a limit inherent
+to the leaf size. However if we reach that limit, we trigger a transaction
+abort and turns the filesystem into RO mode. This allows for a malicious
+user to disrupt a system, without the need to have administration
+privileges/capabilities.
+
+Reproducer:
+
+  $ cat exploit-hash-collisions.sh
+  #!/bin/bash
+
+  DEV=/dev/sdi
+  MNT=/mnt/sdi
+
+  # Use smallest node size to make the test faster and require fewer file
+  # names that result in hash collision.
+  mkfs.btrfs -f --nodesize 4K $DEV
+  mount $DEV $MNT
+
+  # List of names that result in the same crc32c hash for btrfs.
+  declare -a names=(
+   'foobar'
+   '%a8tYkxfGMLWRGr55QSeQc4PBNH9PCLIvR6jZnkDtUUru1t@RouaUe_L:@xGkbO3nCwvLNYeK9vhE628gss:T$yZjZ5l-Nbd6CbC$M=hqE-ujhJICXyIxBvYrIU9-TDC'
+   'AQci3EUB%shMsg-N%frgU:02ByLs=IPJU0OpgiWit5nexSyxZDncY6WB:=zKZuk5Zy0DD$Ua78%MelgBuMqaHGyKsJUFf9s=UW80PcJmKctb46KveLSiUtNmqrMiL9-Y0I_l5Fnam04CGIg=8@U:Z'
+   'CvVqJpJzueKcuA$wqwePfyu7VxuWNN3ho$p0zi2H8QFYK$7YlEqOhhb%:hHgjhIjW5vnqWHKNP4'
+   'ET:vk@rFU4tsvMB0$C_p=xQHaYZjvoF%-BTc%wkFW8yaDAPcCYoR%x$FH5O:'
+   'HwTon%v7SGSP4FE08jBwwiu5aot2CFKXHTeEAa@38fUcNGOWvE@Mz6WBeDH_VooaZ6AgsXPkVGwy9l@@ZbNXabUU9csiWrrOp0MWUdfi$EZ3w9GkIqtz7I_eOsByOkBOO'
+   'Ij%2VlFGXSuPvxJGf5UWy6O@1svxGha%b@=%wjkq:CIgE6u7eJOjmQY5qTtxE2Rjbis9@us'
+   'KBkjG5%9R8K9sOG8UTnAYjxLNAvBmvV5vz3IiZaPmKuLYO03-6asI9lJ_j4@6Xo$KZicaLWJ3Pv8XEwVeUPMwbHYWwbx0pYvNlGMO9F:ZhHAwyctnGy%_eujl%WPd4U2BI7qooOSr85J-C2V$LfY'
+   'NcRfDfuUQ2=zP8K3CCF5dFcpfiOm6mwenShsAb_F%n6GAGC7fT2JFFn:c35X-3aYwoq7jNX5$ZJ6hI3wnZs$7KgGi7wjulffhHNUxAT0fRRLF39vJ@NvaEMxsMO'
+   'Oj42AQAEzRoTxa5OuSKIr=A_lwGMy132v4g3Pdq1GvUG9874YseIFQ6QU'
+   'Ono7avN5GjC:_6dBJ_'
+   'WHmN2gnmaN-9dVDy4aWo:yNGFzz8qsJyJhWEWcud7$QzN2D9R0efIWWEdu5kwWr73NZm4=@CoCDxrrZnRITr-kGtU_cfW2:%2_am'
+   'WiFnuTEhAG9FEC6zopQmj-A-$LDQ0T3WULz%ox3UZAPybSV6v1Z$b4L_XBi4M4BMBtJZpz93r9xafpB77r:lbwvitWRyo$odnAUYlYMmU4RvgnNd--e=I5hiEjGLETTtaScWlQp8mYsBovZwM2k'
+   'XKyH=OsOAF3p%uziGF_ZVr$ivrvhVgD@1u%5RtrV-gl_vqAwHkK@x7YwlxX3qT6WKKQ%PR56NrUBU2dOAOAdzr2=5nJuKPM-T-$ZpQfCL7phxQbUcb:BZOTPaFExc-qK-gDRCDW2'
+   'd3uUR6OFEwZr%ns1XH_@tbxA@cCPmbBRLdyh7p6V45H$P2$F%w0RqrD3M0g8aGvWpoTFMiBdOTJXjD:JF7=h9a_43xBywYAP%r$SPZi%zDg%ql-KvkdUCtF9OLaQlxmd'
+   'ePTpbnit%hyNm@WELlpKzNZYOzOTf8EQ$sEfkMy1VOfIUu3coyvIr13-Y7Sv5v-Ivax2Go_GQRFMU1b3362nktT9WOJf3SpT%z8sZmM3gvYQBDgmKI%%RM-G7hyrhgYflOw%z::ZRcv5O:lDCFm'
+   'evqk743Y@dvZAiG5J05L_ROFV@$2%rVWJ2%3nxV72-W7$e$-SK3tuSHA2mBt$qloC5jwNx33GmQUjD%akhBPu=VJ5g$xhlZiaFtTrjeeM5x7dt4cHpX0cZkmfImndYzGmvwQG:$euFYmXn$_2rA9mKZ'
+   'gkgUtnihWXsZQTEkrMAWIxir09k3t7jk_IK25t1:cy1XWN0GGqC%FrySdcmU7M8MuPO_ppkLw3=Dfr0UuBAL4%GFk2$Ma10V1jDRGJje%Xx9EV2ERaWKtjpwiZwh0gCSJsj5UL7CR8RtW5opCVFKGGy8Cky'
+   'hNgsG_8lNRik3PvphqPm0yEH3P%%fYG:kQLY=6O-61Wa6nrV_WVGR6TLB09vHOv%g4VQRP8Gzx7VXUY1qvZyS'
+   'isA7JVzN12xCxVPJZ_qoLm-pTBuhjjHMvV7o=F:EaClfYNyFGlsfw-Kf%uxdqW-kwk1sPl2vhbjyHU1A6$hz'
+   'kiJ_fgcdZFDiOptjgH5PN9-PSyLO4fbk_:u5_2tz35lV_iXiJ6cx7pwjTtKy-XGaQ5IefmpJ4N_ZqGsqCsKuqOOBgf9LkUdffHet@Wu'
+   'lvwtxyhE9:%Q3UxeHiViUyNzJsy:fm38pg_b6s25JvdhOAT=1s0$pG25x=LZ2rlHTszj=gN6M4zHZYr_qrB49i=pA--@WqWLIuX7o1S_SfS@2FSiUZN'
+   'rC24cw3UBDZ=5qJBUMs9e$=S4Y94ni%Z8639vnrGp=0Hv4z3dNFL0fBLmQ40=EYIY:Z=SLc@QLMSt2zsss2ZXrP7j4='
+   'uwGl2s-fFrf@GqS=DQqq2I0LJSsOmM%xzTjS:lzXguE3wChdMoHYtLRKPvfaPOZF2fER@j53evbKa7R%A7r4%YEkD=kicJe@SFiGtXHbKe4gCgPAYbnVn'
+   'UG37U6KKua2bgc:IHzRs7BnB6FD:2Mt5Cc5NdlsW%$1tyvnfz7S27FvNkroXwAW:mBZLA1@qa9WnDbHCDmQmfPMC9z-Eq6QT0jhhPpqyymaD:R02ghwYo%yx7SAaaq-:x33LYpei$5g8DMl3C'
+   'y2vjek0FE1PDJC0qpfnN:x8k2wCFZ9xiUF2ege=JnP98R%wxjKkdfEiLWvQzmnW'
+   '8-HCSgH5B%K7P8_jaVtQhBXpBk:pE-$P7ts58U0J@iR9YZntMPl7j$s62yAJO@_9eanFPS54b=UTw$94C-t=HLxT8n6o9P=QnIxq-f1=Ne2dvhe6WbjEQtc'
+   'YPPh:IFt2mtR6XWSmjHptXL_hbSYu8bMw-JP8@PNyaFkdNFsk$M=xfL6LDKCDM-mSyGA_2MBwZ8Dr4=R1D%7-mCaaKGxb990jzaagRktDTyp'
+   '9hD2ApKa_t_7x-a@GCG28kY:7$M@5udI1myQ$x5udtggvagmCQcq9QXWRC5hoB0o-_zHQUqZI5rMcz_kbMgvN5jr63LeYA4Cj-c6F5Ugmx6DgVf@2Jqm%MafecpgooqreJ53P-QTS'
+  )
+
+  # Now create files with all those names in the same parent directory.
+  # It should not fail since a 4K leaf has enough space for them.
+  for name in "${names[@]}"; do
+       touch $MNT/$name
+  done
+
+  # Now add one more file name that causes a crc32c hash collision.
+  # This should fail, but it should not turn the filesystem into RO mode
+  # (which could be exploited by malicious users) due to a transaction
+  # abort.
+  touch $MNT/'W6tIm-VK2@BGC@IBfcgg6j_p:pxp_QUqtWpGD5Ok_GmijKOJJt'
+
+  # Check that we are able to create another file, with a name that does not cause
+  # a crc32c hash collision.
+  echo -n "hello world" > $MNT/baz
+
+  # Unmount and mount again, verify file baz exists and with the right content.
+  umount $MNT
+  mount $DEV $MNT
+  echo "File baz content: $(cat $MNT/baz)"
+
+  umount $MNT
+
+When running the reproducer:
+
+  $ ./exploit-hash-collisions.sh
+  (...)
+  touch: cannot touch '/mnt/sdi/W6tIm-VK2@BGC@IBfcgg6j_p:pxp_QUqtWpGD5Ok_GmijKOJJt': Value too large for defined data type
+  ./exploit-hash-collisions.sh: line 57: /mnt/sdi/baz: Read-only file system
+  cat: /mnt/sdi/baz: No such file or directory
+  File baz content:
+
+And the transaction abort stack trace in dmesg/syslog:
+
+  $ dmesg
+  (...)
+  [758240.509761] ------------[ cut here ]------------
+  [758240.510668] BTRFS: Transaction aborted (error -75)
+  [758240.511577] WARNING: fs/btrfs/inode.c:6854 at btrfs_create_new_inode+0x805/0xb50 [btrfs], CPU#6: touch/888644
+  [758240.513513] Modules linked in: btrfs dm_zero (...)
+  [758240.523221] CPU: 6 UID: 0 PID: 888644 Comm: touch Tainted: G        W           6.19.0-rc8-btrfs-next-225+ #1 PREEMPT(full)
+  [758240.524621] Tainted: [W]=WARN
+  [758240.525037] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
+  [758240.526331] RIP: 0010:btrfs_create_new_inode+0x80b/0xb50 [btrfs]
+  [758240.527093] Code: 0f 82 cf (...)
+  [758240.529211] RSP: 0018:ffffce64418fbb48 EFLAGS: 00010292
+  [758240.529935] RAX: 00000000ffffffd3 RBX: 0000000000000000 RCX: 00000000ffffffb5
+  [758240.531040] RDX: 0000000d04f33e06 RSI: 00000000ffffffb5 RDI: ffffffffc0919dd0
+  [758240.531920] RBP: ffffce64418fbc10 R08: 0000000000000000 R09: 00000000ffffffb5
+  [758240.532928] R10: 0000000000000000 R11: ffff8e52c0000000 R12: ffff8e53eee7d0f0
+  [758240.533818] R13: ffff8e57f70932a0 R14: ffff8e5417629568 R15: 0000000000000000
+  [758240.534664] FS:  00007f1959a2a740(0000) GS:ffff8e5b27cae000(0000) knlGS:0000000000000000
+  [758240.535821] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+  [758240.536644] CR2: 00007f1959b10ce0 CR3: 000000012a2cc005 CR4: 0000000000370ef0
+  [758240.537517] Call Trace:
+  [758240.537828]  <TASK>
+  [758240.538099]  btrfs_create_common+0xbf/0x140 [btrfs]
+  [758240.538760]  path_openat+0x111a/0x15b0
+  [758240.539252]  do_filp_open+0xc2/0x170
+  [758240.539699]  ? preempt_count_add+0x47/0xa0
+  [758240.540200]  ? __virt_addr_valid+0xe4/0x1a0
+  [758240.540800]  ? __check_object_size+0x1b3/0x230
+  [758240.541661]  ? alloc_fd+0x118/0x180
+  [758240.542315]  do_sys_openat2+0x70/0xd0
+  [758240.543012]  __x64_sys_openat+0x50/0xa0
+  [758240.543723]  do_syscall_64+0x50/0xf20
+  [758240.544462]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
+  [758240.545397] RIP: 0033:0x7f1959abc687
+  [758240.546019] Code: 48 89 fa (...)
+  [758240.548522] RSP: 002b:00007ffe16ff8690 EFLAGS: 00000202 ORIG_RAX: 0000000000000101
+  [758240.566278] RAX: ffffffffffffffda RBX: 00007f1959a2a740 RCX: 00007f1959abc687
+  [758240.567068] RDX: 0000000000000941 RSI: 00007ffe16ffa333 RDI: ffffffffffffff9c
+  [758240.567860] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
+  [758240.568707] R10: 00000000000001b6 R11: 0000000000000202 R12: 0000561eec7c4b90
+  [758240.569712] R13: 0000561eec7c311f R14: 00007ffe16ffa333 R15: 0000000000000000
+  [758240.570758]  </TASK>
+  [758240.571040] ---[ end trace 0000000000000000 ]---
+  [758240.571681] BTRFS: error (device sdi state A) in btrfs_create_new_inode:6854: errno=-75 unknown
+  [758240.572899] BTRFS info (device sdi state EA): forced readonly
+
+Fix this by checking for hash collision, and if the adding a new name is
+possible, early in btrfs_create_new_inode() before we do any tree updates,
+so that we don't need to abort the transaction if we cannot add the new
+name due to the leaf size limit.
+
+A test case for fstests will be sent soon.
+
+Fixes: caae78e03234 ("btrfs: move common inode creation code into btrfs_create_new_inode()")
+CC: stable@vger.kernel.org # 6.1+
+Reviewed-by: Boris Burkov <boris@bur.io>
+Reviewed-by: Qu Wenruo <wqu@suse.com>
+Signed-off-by: Filipe Manana <fdmanana@suse.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/btrfs/inode.c |   19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+--- a/fs/btrfs/inode.c
++++ b/fs/btrfs/inode.c
+@@ -6466,6 +6466,25 @@ int btrfs_create_new_inode(struct btrfs_
+       unsigned long ptr;
+       int ret;
++      if (!args->orphan && !args->subvol) {
++              /*
++               * Before anything else, check if we can add the name to the
++               * parent directory. We want to avoid a dir item overflow in
++               * case we have an existing dir item due to existing name
++               * hash collisions. We do this check here before we call
++               * btrfs_add_link() down below so that we can avoid a
++               * transaction abort (which could be exploited by malicious
++               * users).
++               *
++               * For subvolumes we already do this in btrfs_mksubvol().
++               */
++              ret = btrfs_check_dir_item_collision(BTRFS_I(dir)->root,
++                                                   btrfs_ino(BTRFS_I(dir)),
++                                                   name);
++              if (ret < 0)
++                      return ret;
++      }
++
+       path = btrfs_alloc_path();
+       if (!path)
+               return -ENOMEM;
diff --git a/queue-6.1/drm-amd-set-num-ip-blocks-to-0-if-discovery-fails.patch b/queue-6.1/drm-amd-set-num-ip-blocks-to-0-if-discovery-fails.patch
new file mode 100644 (file)
index 0000000..7cb4711
--- /dev/null
@@ -0,0 +1,53 @@
+From 3646ff28780b4c52c5b5081443199e7a430110e5 Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <mario.limonciello@amd.com>
+Date: Tue, 10 Mar 2026 11:58:22 -0500
+Subject: drm/amd: Set num IP blocks to 0 if discovery fails
+
+From: Mario Limonciello <mario.limonciello@amd.com>
+
+commit 3646ff28780b4c52c5b5081443199e7a430110e5 upstream.
+
+If discovery has failed for any reason (such as no support for a block)
+then there is no need to unwind all the IP blocks in fini. In this
+condition there can actually be failures during the unwind too.
+
+Reset num_ip_blocks to zero during failure path and skip the unnecessary
+cleanup path.
+
+Suggested-by: Lijo Lazar <lijo.lazar@amd.com>
+Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
+Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+(cherry picked from commit fae5984296b981c8cc3acca35b701c1f332a6cd8)
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |    4 +++-
+ drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    |    2 +-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+@@ -2182,8 +2182,10 @@ static int amdgpu_device_ip_early_init(s
+               break;
+       default:
+               r = amdgpu_discovery_set_ip_blocks(adev);
+-              if (r)
++              if (r) {
++                      adev->num_ip_blocks = 0;
+                       return r;
++              }
+               break;
+       }
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+@@ -79,7 +79,7 @@ void amdgpu_driver_unload_kms(struct drm
+ {
+       struct amdgpu_device *adev = drm_to_adev(dev);
+-      if (adev == NULL)
++      if (adev == NULL || !adev->num_ip_blocks)
+               return;
+       amdgpu_unregister_gpu_instance(adev);
diff --git a/queue-6.1/drm-amdgpu-fix-use-after-free-race-in-vm-acquire.patch b/queue-6.1/drm-amdgpu-fix-use-after-free-race-in-vm-acquire.patch
new file mode 100644 (file)
index 0000000..5f04fe6
--- /dev/null
@@ -0,0 +1,45 @@
+From 2c1030f2e84885cc58bffef6af67d5b9d2e7098f Mon Sep 17 00:00:00 2001
+From: Alysa Liu <Alysa.Liu@amd.com>
+Date: Thu, 5 Feb 2026 11:21:45 -0500
+Subject: drm/amdgpu: Fix use-after-free race in VM acquire
+
+From: Alysa Liu <Alysa.Liu@amd.com>
+
+commit 2c1030f2e84885cc58bffef6af67d5b9d2e7098f upstream.
+
+Replace non-atomic vm->process_info assignment with cmpxchg()
+to prevent race when parent/child processes sharing a drm_file
+both try to acquire the same VM after fork().
+
+Reviewed-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
+Signed-off-by: Alysa Liu <Alysa.Liu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+(cherry picked from commit c7c573275ec20db05be769288a3e3bb2250ec618)
+Cc: stable@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+@@ -1371,7 +1371,10 @@ static int init_kfd_vm(struct amdgpu_vm
+               *ef = dma_fence_get(&info->eviction_fence->base);
+       }
+-      vm->process_info = *process_info;
++      if (cmpxchg(&vm->process_info, NULL, *process_info) != NULL) {
++              ret = -EINVAL;
++              goto already_acquired;
++      }
+       /* Validate page directory and attach eviction fence */
+       ret = amdgpu_bo_reserve(vm->root.bo, true);
+@@ -1409,6 +1412,7 @@ validate_pd_fail:
+       amdgpu_bo_unreserve(vm->root.bo);
+ reserve_pd_fail:
+       vm->process_info = NULL;
++already_acquired:
+       if (info) {
+               /* Two fence references: one in info and one in *ef */
+               dma_fence_put(&info->eviction_fence->base);
diff --git a/queue-6.1/drm-bridge-ti-sn65dsi83-fix-cha_dsi_clk_range-rounding.patch b/queue-6.1/drm-bridge-ti-sn65dsi83-fix-cha_dsi_clk_range-rounding.patch
new file mode 100644 (file)
index 0000000..73d9641
--- /dev/null
@@ -0,0 +1,50 @@
+From 2f22702dc0fee06a240404e0f7ead5b789b253d8 Mon Sep 17 00:00:00 2001
+From: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Date: Thu, 26 Feb 2026 17:16:44 +0100
+Subject: drm/bridge: ti-sn65dsi83: fix CHA_DSI_CLK_RANGE rounding
+
+From: Luca Ceresoli <luca.ceresoli@bootlin.com>
+
+commit 2f22702dc0fee06a240404e0f7ead5b789b253d8 upstream.
+
+The DSI frequency must be in the range:
+
+  (CHA_DSI_CLK_RANGE * 5 MHz) <= DSI freq < ((CHA_DSI_CLK_RANGE + 1) * 5 MHz)
+
+So the register value should point to the lower range value, but
+DIV_ROUND_UP() rounds the division to the higher range value, resulting in
+an excess of 1 (unless the frequency is an exact multiple of 5 MHz).
+
+For example for a 437100000 MHz clock CHA_DSI_CLK_RANGE should be 87 (0x57):
+
+  (87 * 5 = 435) <= 437.1 < (88 * 5 = 440)
+
+but current code returns 88 (0x58).
+
+Fix the computation by removing the DIV_ROUND_UP().
+
+Fixes: ceb515ba29ba ("drm/bridge: ti-sn65dsi83: Add TI SN65DSI83 and SN65DSI84 driver")
+Cc: stable@vger.kernel.org
+Reviewed-by: Marek Vasut <marek.vasut@mailbox.org>
+Link: https://patch.msgid.link/20260226-ti-sn65dsi83-dual-lvds-fixes-and-test-pattern-v1-1-2e15f5a9a6a0@bootlin.com
+Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/bridge/ti-sn65dsi83.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c
++++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
+@@ -303,9 +303,9 @@ static u8 sn65dsi83_get_dsi_range(struct
+        *  DSI_CLK = mode clock * bpp / dsi_data_lanes / 2
+        * the 2 is there because the bus is DDR.
+        */
+-      return DIV_ROUND_UP(clamp((unsigned int)mode->clock *
+-                          mipi_dsi_pixel_format_to_bpp(ctx->dsi->format) /
+-                          ctx->dsi->lanes / 2, 40000U, 500000U), 5000U);
++      return clamp((unsigned int)mode->clock *
++                   mipi_dsi_pixel_format_to_bpp(ctx->dsi->format) /
++                   ctx->dsi->lanes / 2, 40000U, 500000U) / 5000U;
+ }
+ static u8 sn65dsi83_get_dsi_div(struct sn65dsi83 *ctx)
diff --git a/queue-6.1/iio-chemical-bme680-fix-measurement-wait-duration-calculation.patch b/queue-6.1/iio-chemical-bme680-fix-measurement-wait-duration-calculation.patch
new file mode 100644 (file)
index 0000000..5f25ed4
--- /dev/null
@@ -0,0 +1,41 @@
+From f55b9510cd9437da3a0efa08b089caeb47595ff1 Mon Sep 17 00:00:00 2001
+From: Chris Spencer <spencercw@gmail.com>
+Date: Thu, 5 Feb 2026 14:55:45 +0000
+Subject: iio: chemical: bme680: Fix measurement wait duration calculation
+
+From: Chris Spencer <spencercw@gmail.com>
+
+commit f55b9510cd9437da3a0efa08b089caeb47595ff1 upstream.
+
+This function refers to the Bosch BME680 API as the source of the
+calculation, but one of the constants does not match the Bosch
+implementation. This appears to be a simple transposition of two digits,
+resulting in a wait time that is too short. This can cause the following
+'device measurement cycle incomplete' check to occasionally fail, returning
+EBUSY to user space.
+
+Adjust the constant to match the Bosch implementation and resolve the EBUSY
+errors.
+
+Fixes: 4241665e6ea0 ("iio: chemical: bme680: Fix sensor data read operation")
+Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L521
+Signed-off-by: Chris Spencer <spencercw@gmail.com>
+Acked-by: Vasileios Amoiridis <vassilisamir@gmail.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/chemical/bme680_core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/iio/chemical/bme680_core.c
++++ b/drivers/iio/chemical/bme680_core.c
+@@ -550,7 +550,7 @@ static int bme680_wait_for_eoc(struct bm
+        * + heater duration
+        */
+       int wait_eoc_us = ((data->oversampling_temp + data->oversampling_press +
+-                         data->oversampling_humid) * 1936) + (477 * 4) +
++                         data->oversampling_humid) * 1963) + (477 * 4) +
+                          (477 * 5) + 1000 + (data->heater_dur * 1000);
+       usleep_range(wait_eoc_us, wait_eoc_us + 100);
diff --git a/queue-6.1/iio-chemical-sps30_i2c-fix-buffer-size-in-sps30_i2c_read_meas.patch b/queue-6.1/iio-chemical-sps30_i2c-fix-buffer-size-in-sps30_i2c_read_meas.patch
new file mode 100644 (file)
index 0000000..50b4206
--- /dev/null
@@ -0,0 +1,35 @@
+From 216345f98cae7fcc84f49728c67478ac00321c87 Mon Sep 17 00:00:00 2001
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Date: Thu, 12 Feb 2026 14:46:07 +0200
+Subject: iio: chemical: sps30_i2c: fix buffer size in sps30_i2c_read_meas()
+
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+
+commit 216345f98cae7fcc84f49728c67478ac00321c87 upstream.
+
+sizeof(num) evaluates to sizeof(size_t) (8 bytes on 64-bit) instead
+of the intended __be32 element size (4 bytes). Use sizeof(*meas) to
+correctly match the buffer element type.
+
+Fixes: 8f3f13085278 ("iio: sps30: separate core and interface specific code")
+Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Acked-by: Tomasz Duszynski <tduszyns@gmail.com>
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
+Cc: <Stable@vger.kernel.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/chemical/sps30_i2c.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/iio/chemical/sps30_i2c.c
++++ b/drivers/iio/chemical/sps30_i2c.c
+@@ -171,7 +171,7 @@ static int sps30_i2c_read_meas(struct sp
+       if (!sps30_i2c_meas_ready(state))
+               return -ETIMEDOUT;
+-      return sps30_i2c_command(state, SPS30_I2C_READ_MEAS, NULL, 0, meas, sizeof(num) * num);
++      return sps30_i2c_command(state, SPS30_I2C_READ_MEAS, NULL, 0, meas, sizeof(*meas) * num);
+ }
+ static int sps30_i2c_clean_fan(struct sps30_state *state)
diff --git a/queue-6.1/iio-chemical-sps30_serial-fix-buffer-size-in-sps30_serial_read_meas.patch b/queue-6.1/iio-chemical-sps30_serial-fix-buffer-size-in-sps30_serial_read_meas.patch
new file mode 100644 (file)
index 0000000..0612261
--- /dev/null
@@ -0,0 +1,36 @@
+From c3914ce1963c4db25e186112c90fa5d2361e9e0a Mon Sep 17 00:00:00 2001
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Date: Thu, 12 Feb 2026 14:46:08 +0200
+Subject: iio: chemical: sps30_serial: fix buffer size in sps30_serial_read_meas()
+
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+
+commit c3914ce1963c4db25e186112c90fa5d2361e9e0a upstream.
+
+sizeof(num) evaluates to sizeof(size_t) which is 8 bytes on 64-bit,
+but the buffer elements are only 4 bytes. The same function already
+uses sizeof(*meas) on line 312, making the mismatch evident. Use
+sizeof(*meas) consistently.
+
+Fixes: b2e171f5a5c6 ("iio: sps30: add support for serial interface")
+Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Acked-by: Tomasz Duszynski <tduszyns@gmail.com>
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
+Cc: <Stable@vger.kernel.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/chemical/sps30_serial.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/iio/chemical/sps30_serial.c
++++ b/drivers/iio/chemical/sps30_serial.c
+@@ -303,7 +303,7 @@ static int sps30_serial_read_meas(struct
+       if (msleep_interruptible(1000))
+               return -EINTR;
+-      ret = sps30_serial_command(state, SPS30_SERIAL_READ_MEAS, NULL, 0, meas, num * sizeof(num));
++      ret = sps30_serial_command(state, SPS30_SERIAL_READ_MEAS, NULL, 0, meas, num * sizeof(*meas));
+       if (ret < 0)
+               return ret;
+       /* if measurements aren't ready sensor returns empty frame */
diff --git a/queue-6.1/iio-dac-ds4424-reject-128-raw-value.patch b/queue-6.1/iio-dac-ds4424-reject-128-raw-value.patch
new file mode 100644 (file)
index 0000000..cc82abb
--- /dev/null
@@ -0,0 +1,39 @@
+From 5187e03b817c26c1c3bcb2645a612ea935c4be89 Mon Sep 17 00:00:00 2001
+From: Oleksij Rempel <o.rempel@pengutronix.de>
+Date: Wed, 4 Feb 2026 15:00:33 +0100
+Subject: iio: dac: ds4424: reject -128 RAW value
+
+From: Oleksij Rempel <o.rempel@pengutronix.de>
+
+commit 5187e03b817c26c1c3bcb2645a612ea935c4be89 upstream.
+
+The DS442x DAC uses sign-magnitude encoding, so -128 cannot be represented
+in hardware (7-bit magnitude).
+
+Previously, passing -128 resulted in a truncated value that programmed
+0mA (magnitude 0) instead of the expected maximum negative current,
+effectively failing silently.
+
+Reject -128 to avoid producing the wrong current.
+
+Fixes: d632a2bd8ffc ("iio: dac: ds4422/ds4424 dac driver")
+Cc: stable@vger.kernel.org
+Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
+Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/dac/ds4424.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/iio/dac/ds4424.c
++++ b/drivers/iio/dac/ds4424.c
+@@ -141,7 +141,7 @@ static int ds4424_write_raw(struct iio_d
+       switch (mask) {
+       case IIO_CHAN_INFO_RAW:
+-              if (val < S8_MIN || val > S8_MAX)
++              if (val <= S8_MIN || val > S8_MAX)
+                       return -EINVAL;
+               if (val > 0) {
diff --git a/queue-6.1/iio-gyro-mpu3050-core-fix-pm_runtime-error-handling.patch b/queue-6.1/iio-gyro-mpu3050-core-fix-pm_runtime-error-handling.patch
new file mode 100644 (file)
index 0000000..c2ca5e3
--- /dev/null
@@ -0,0 +1,66 @@
+From acc3949aab3e8094641a9c7c2768de1958c88378 Mon Sep 17 00:00:00 2001
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Date: Mon, 16 Feb 2026 11:57:56 +0200
+Subject: iio: gyro: mpu3050-core: fix pm_runtime error handling
+
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+
+commit acc3949aab3e8094641a9c7c2768de1958c88378 upstream.
+
+The return value of pm_runtime_get_sync() is not checked, allowing
+the driver to access hardware that may fail to resume. The device
+usage count is also unconditionally incremented. Use
+pm_runtime_resume_and_get() which propagates errors and avoids
+incrementing the usage count on failure.
+
+In preenable, add pm_runtime_put_autosuspend() on set_8khz_samplerate()
+failure since postdisable does not run when preenable fails.
+
+Fixes: 3904b28efb2c ("iio: gyro: Add driver for the MPU-3050 gyroscope")
+Reviewed-by: Linus Walleij <linusw@kernel.org>
+Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Cc: <Stable@vger.kernel.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/gyro/mpu3050-core.c |   18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+--- a/drivers/iio/gyro/mpu3050-core.c
++++ b/drivers/iio/gyro/mpu3050-core.c
+@@ -322,7 +322,9 @@ static int mpu3050_read_raw(struct iio_d
+               }
+       case IIO_CHAN_INFO_RAW:
+               /* Resume device */
+-              pm_runtime_get_sync(mpu3050->dev);
++              ret = pm_runtime_resume_and_get(mpu3050->dev);
++              if (ret)
++                      return ret;
+               mutex_lock(&mpu3050->lock);
+               ret = mpu3050_set_8khz_samplerate(mpu3050);
+@@ -651,14 +653,20 @@ out_trigger_unlock:
+ static int mpu3050_buffer_preenable(struct iio_dev *indio_dev)
+ {
+       struct mpu3050 *mpu3050 = iio_priv(indio_dev);
++      int ret;
+-      pm_runtime_get_sync(mpu3050->dev);
++      ret = pm_runtime_resume_and_get(mpu3050->dev);
++      if (ret)
++              return ret;
+       /* Unless we have OUR trigger active, run at full speed */
+-      if (!mpu3050->hw_irq_trigger)
+-              return mpu3050_set_8khz_samplerate(mpu3050);
++      if (!mpu3050->hw_irq_trigger) {
++              ret = mpu3050_set_8khz_samplerate(mpu3050);
++              if (ret)
++                      pm_runtime_put_autosuspend(mpu3050->dev);
++      }
+-      return 0;
++      return ret;
+ }
+ static int mpu3050_buffer_postdisable(struct iio_dev *indio_dev)
diff --git a/queue-6.1/iio-gyro-mpu3050-i2c-fix-pm_runtime-error-handling.patch b/queue-6.1/iio-gyro-mpu3050-i2c-fix-pm_runtime-error-handling.patch
new file mode 100644 (file)
index 0000000..c3a4dad
--- /dev/null
@@ -0,0 +1,37 @@
+From 91f950b4cbb1aa9ea4eb3999f1463e8044b717fb Mon Sep 17 00:00:00 2001
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Date: Mon, 16 Feb 2026 11:57:55 +0200
+Subject: iio: gyro: mpu3050-i2c: fix pm_runtime error handling
+
+From: Antoniu Miclaus <antoniu.miclaus@analog.com>
+
+commit 91f950b4cbb1aa9ea4eb3999f1463e8044b717fb upstream.
+
+The return value of pm_runtime_get_sync() is not checked, and the
+function always returns success. This allows I2C mux operations to
+proceed even when the device fails to resume.
+
+Use pm_runtime_resume_and_get() and propagate its return value to
+properly handle resume failures.
+
+Fixes: 3904b28efb2c ("iio: gyro: Add driver for the MPU-3050 gyroscope")
+Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
+Cc: <Stable@vger.kernel.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/gyro/mpu3050-i2c.c |    3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/iio/gyro/mpu3050-i2c.c
++++ b/drivers/iio/gyro/mpu3050-i2c.c
+@@ -19,8 +19,7 @@ static int mpu3050_i2c_bypass_select(str
+       struct mpu3050 *mpu3050 = i2c_mux_priv(mux);
+       /* Just power up the device, that is all that is needed */
+-      pm_runtime_get_sync(mpu3050->dev);
+-      return 0;
++      return pm_runtime_resume_and_get(mpu3050->dev);
+ }
+ static int mpu3050_i2c_bypass_deselect(struct i2c_mux_core *mux, u32 chan_id)
diff --git a/queue-6.1/iio-imu-inv_icm42600-fix-odr-switch-to-the-same-value.patch b/queue-6.1/iio-imu-inv_icm42600-fix-odr-switch-to-the-same-value.patch
new file mode 100644 (file)
index 0000000..62b11b2
--- /dev/null
@@ -0,0 +1,49 @@
+From c9f3a593137d862d424130343e77d4b5260a4f5a Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
+Date: Fri, 30 Jan 2026 16:38:47 +0100
+Subject: iio: imu: inv_icm42600: fix odr switch to the same value
+
+From: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
+
+commit c9f3a593137d862d424130343e77d4b5260a4f5a upstream.
+
+ODR switch is done in 2 steps when FIFO is on : change the ODR register
+value and acknowledge change when reading the FIFO ODR change flag.
+When we are switching to the same odr value, we end up waiting for a
+FIFO ODR flag that is never happening.
+
+Fix the issue by doing nothing and exiting properly when we are
+switching to the same ODR value.
+
+Fixes: ec74ae9fd37c ("iio: imu: inv_icm42600: add accurate timestamping")
+Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c |    2 ++
+ drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c  |    2 ++
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c
+@@ -322,6 +322,8 @@ static int inv_icm42600_accel_write_odr(
+               return -EINVAL;
+       conf.odr = inv_icm42600_accel_odr_conv[idx / 2];
++      if (conf.odr == st->conf.accel.odr)
++              return 0;
+       pm_runtime_get_sync(dev);
+       mutex_lock(&st->lock);
+--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c
+@@ -334,6 +334,8 @@ static int inv_icm42600_gyro_write_odr(s
+               return -EINVAL;
+       conf.odr = inv_icm42600_gyro_odr_conv[idx / 2];
++      if (conf.odr == st->conf.gyro.odr)
++              return 0;
+       pm_runtime_get_sync(dev);
+       mutex_lock(&st->lock);
diff --git a/queue-6.1/iio-potentiometer-mcp4131-fix-double-application-of-wiper-shift.patch b/queue-6.1/iio-potentiometer-mcp4131-fix-double-application-of-wiper-shift.patch
new file mode 100644 (file)
index 0000000..8fd5d29
--- /dev/null
@@ -0,0 +1,40 @@
+From 85e4614524dca6c0a43874f475a17de2b9725648 Mon Sep 17 00:00:00 2001
+From: Lukas Schmid <lukas.schmid@netcube.li>
+Date: Mon, 2 Feb 2026 21:15:35 +0100
+Subject: iio: potentiometer: mcp4131: fix double application of wiper shift
+
+From: Lukas Schmid <lukas.schmid@netcube.li>
+
+commit 85e4614524dca6c0a43874f475a17de2b9725648 upstream.
+
+The MCP4131 wiper address is shifted twice when preparing the SPI
+command in mcp4131_write_raw().
+
+The address is already shifted when assigned to the local variable
+"address", but is then shifted again when written to data->buf[0].
+This results in an incorrect command being sent to the device and
+breaks wiper writes to the second channel.
+
+Remove the second shift and use the pre-shifted address directly
+when composing the SPI transfer.
+
+Fixes: 22d199a53910 ("iio: potentiometer: add driver for Microchip MCP413X/414X/415X/416X/423X/424X/425X/426X")
+Signed-off-by: Lukas Schmid <lukas.schmid@netcube.li>#
+Cc: <Stable@vger.kernel.org>
+Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/iio/potentiometer/mcp4131.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/iio/potentiometer/mcp4131.c
++++ b/drivers/iio/potentiometer/mcp4131.c
+@@ -222,7 +222,7 @@ static int mcp4131_write_raw(struct iio_
+       mutex_lock(&data->lock);
+-      data->buf[0] = address << MCP4131_WIPER_SHIFT;
++      data->buf[0] = address;
+       data->buf[0] |= MCP4131_WRITE | (val >> 8);
+       data->buf[1] = val & 0xFF; /* 8 bits here */
diff --git a/queue-6.1/lib-bootconfig-check-bounds-before-writing-in-__xbc_open_brace.patch b/queue-6.1/lib-bootconfig-check-bounds-before-writing-in-__xbc_open_brace.patch
new file mode 100644 (file)
index 0000000..ee80784
--- /dev/null
@@ -0,0 +1,42 @@
+From 560f763baa0f2c9a44da4294c06af071405ac46f Mon Sep 17 00:00:00 2001
+From: Josh Law <objecting@objecting.org>
+Date: Thu, 12 Mar 2026 19:11:42 +0000
+Subject: lib/bootconfig: check bounds before writing in __xbc_open_brace()
+
+From: Josh Law <objecting@objecting.org>
+
+commit 560f763baa0f2c9a44da4294c06af071405ac46f upstream.
+
+The bounds check for brace_index happens after the array write.
+While the current call pattern prevents an actual out-of-bounds
+access (the previous call would have returned an error), the
+write-before-check pattern is fragile and would become a real
+out-of-bounds write if the error return were ever not propagated.
+
+Move the bounds check before the array write so the function is
+self-contained and safe regardless of caller behavior.
+
+Link: https://lore.kernel.org/all/20260312191143.28719-3-objecting@objecting.org/
+
+Fixes: ead1e19ad905 ("lib/bootconfig: Fix a bug of breaking existing tree nodes")
+Cc: stable@vger.kernel.org
+Signed-off-by: Josh Law <objecting@objecting.org>
+Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ lib/bootconfig.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/lib/bootconfig.c
++++ b/lib/bootconfig.c
+@@ -534,9 +534,9 @@ static char *skip_spaces_until_newline(c
+ static int __init __xbc_open_brace(char *p)
+ {
+       /* Push the last key as open brace */
+-      open_brace[brace_index++] = xbc_node_index(last_parent);
+       if (brace_index >= XBC_DEPTH_MAX)
+               return xbc_parse_error("Exceed max depth of braces", p);
++      open_brace[brace_index++] = xbc_node_index(last_parent);
+       return 0;
+ }
diff --git a/queue-6.1/lib-bootconfig-fix-off-by-one-in-xbc_verify_tree-unclosed-brace-error.patch b/queue-6.1/lib-bootconfig-fix-off-by-one-in-xbc_verify_tree-unclosed-brace-error.patch
new file mode 100644 (file)
index 0000000..5d60f65
--- /dev/null
@@ -0,0 +1,43 @@
+From 39ebc8d7f561e1b64eca87353ef9b18e2825e591 Mon Sep 17 00:00:00 2001
+From: Josh Law <objecting@objecting.org>
+Date: Thu, 12 Mar 2026 19:11:41 +0000
+Subject: lib/bootconfig: fix off-by-one in xbc_verify_tree() unclosed brace error
+
+From: Josh Law <objecting@objecting.org>
+
+commit 39ebc8d7f561e1b64eca87353ef9b18e2825e591 upstream.
+
+__xbc_open_brace() pushes entries with post-increment
+(open_brace[brace_index++]), so brace_index always points one past
+the last valid entry.  xbc_verify_tree() reads open_brace[brace_index]
+to report which brace is unclosed, but this is one past the last
+pushed entry and contains stale/zero data, causing the error message
+to reference the wrong node.
+
+Use open_brace[brace_index - 1] to correctly identify the unclosed
+brace.  brace_index is known to be > 0 here since we are inside the
+if (brace_index) guard.
+
+Link: https://lore.kernel.org/all/20260312191143.28719-2-objecting@objecting.org/
+
+Fixes: ead1e19ad905 ("lib/bootconfig: Fix a bug of breaking existing tree nodes")
+Cc: stable@vger.kernel.org
+Signed-off-by: Josh Law <objecting@objecting.org>
+Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ lib/bootconfig.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/lib/bootconfig.c
++++ b/lib/bootconfig.c
+@@ -793,7 +793,7 @@ static int __init xbc_verify_tree(void)
+       /* Brace closing */
+       if (brace_index) {
+-              n = &xbc_nodes[open_brace[brace_index]];
++              n = &xbc_nodes[open_brace[brace_index - 1]];
+               return xbc_parse_error("Brace is not closed",
+                                       xbc_node_get_data(n));
+       }
diff --git a/queue-6.1/lib-bootconfig-fix-snprintf-truncation-check-in-xbc_node_compose_key_after.patch b/queue-6.1/lib-bootconfig-fix-snprintf-truncation-check-in-xbc_node_compose_key_after.patch
new file mode 100644 (file)
index 0000000..c298538
--- /dev/null
@@ -0,0 +1,40 @@
+From 1120a36bb1e9b9e22de75ecb4ef0b998f73a97f1 Mon Sep 17 00:00:00 2001
+From: Josh Law <objecting@objecting.org>
+Date: Thu, 12 Mar 2026 19:11:43 +0000
+Subject: lib/bootconfig: fix snprintf truncation check in xbc_node_compose_key_after()
+
+From: Josh Law <objecting@objecting.org>
+
+commit 1120a36bb1e9b9e22de75ecb4ef0b998f73a97f1 upstream.
+
+snprintf() returns the number of characters that would have been
+written excluding the NUL terminator.  Output is truncated when the
+return value is >= the buffer size, not just > the buffer size.
+
+When ret == size, the current code takes the non-truncated path,
+advancing buf by ret and reducing size to 0.  This is wrong because
+the output was actually truncated (the last character was replaced by
+NUL).  Fix by using >= so the truncation path is taken correctly.
+
+Link: https://lore.kernel.org/all/20260312191143.28719-4-objecting@objecting.org/
+
+Fixes: 76db5a27a827 ("bootconfig: Add Extra Boot Config support")
+Cc: stable@vger.kernel.org
+Signed-off-by: Josh Law <objecting@objecting.org>
+Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ lib/bootconfig.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/lib/bootconfig.c
++++ b/lib/bootconfig.c
+@@ -318,7 +318,7 @@ int __init xbc_node_compose_key_after(st
+                              depth ? "." : "");
+               if (ret < 0)
+                       return ret;
+-              if (ret > size) {
++              if (ret >= size) {
+                       size = 0;
+               } else {
+                       size -= ret;
diff --git a/queue-6.1/s390-dasd-copy-detected-format-information-to-secondary-device.patch b/queue-6.1/s390-dasd-copy-detected-format-information-to-secondary-device.patch
new file mode 100644 (file)
index 0000000..1e5b3d2
--- /dev/null
@@ -0,0 +1,74 @@
+From 4c527c7e030672efd788d0806d7a68972a7ba3c1 Mon Sep 17 00:00:00 2001
+From: Stefan Haberland <sth@linux.ibm.com>
+Date: Tue, 10 Mar 2026 15:23:30 +0100
+Subject: s390/dasd: Copy detected format information to secondary device
+
+From: Stefan Haberland <sth@linux.ibm.com>
+
+commit 4c527c7e030672efd788d0806d7a68972a7ba3c1 upstream.
+
+During online processing for a DASD device an IO operation is started to
+determine the format of the device. CDL format contains specifically
+sized blocks at the beginning of the disk.
+
+For a PPRC secondary device no real IO operation is possible therefore
+this IO request can not be started and this step is skipped for online
+processing of secondary devices. This is generally fine since the
+secondary is a copy of the primary device.
+
+In case of an additional partition detection that is run after a swap
+operation the format information is needed to properly drive partition
+detection IO.
+
+Currently the information is not passed leading to IO errors during
+partition detection and a wrongly detected partition table which in turn
+might lead to data corruption on the disk with the wrong partition table.
+
+Fix by passing the format information from primary to secondary device.
+
+Fixes: 413862caad6f ("s390/dasd: add copy pair swap capability")
+Cc: stable@vger.kernel.org #6.1
+Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
+Acked-by: Eduard Shishkin <edward6@linux.ibm.com>
+Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
+Link: https://patch.msgid.link/20260310142330.4080106-3-sth@linux.ibm.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/block/dasd_eckd.c |   11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+--- a/drivers/s390/block/dasd_eckd.c
++++ b/drivers/s390/block/dasd_eckd.c
+@@ -6186,6 +6186,7 @@ static void copy_pair_set_active(struct
+ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid,
+                                   char *sec_busid)
+ {
++      struct dasd_eckd_private *prim_priv, *sec_priv;
+       struct dasd_device *primary, *secondary;
+       struct dasd_copy_relation *copy;
+       struct dasd_block *block;
+@@ -6206,6 +6207,9 @@ static int dasd_eckd_copy_pair_swap(stru
+       if (!secondary)
+               return DASD_COPYPAIRSWAP_SECONDARY;
++      prim_priv = primary->private;
++      sec_priv = secondary->private;
++
+       /*
+        * usually the device should be quiesced for swap
+        * for paranoia stop device and requeue requests again
+@@ -6238,6 +6242,13 @@ static int dasd_eckd_copy_pair_swap(stru
+               dasd_device_remove_stop_bits(primary, DASD_STOPPED_QUIESCE);
+       }
++      /*
++       * The secondary device never got through format detection, but since it
++       * is a copy of the primary device, the format is exactly the same;
++       * therefore, the detected layout can simply be copied.
++       */
++      sec_priv->uses_cdl = prim_priv->uses_cdl;
++
+       /* re-enable device */
+       dasd_device_remove_stop_bits(primary, DASD_STOPPED_PPRC);
+       dasd_device_remove_stop_bits(secondary, DASD_STOPPED_PPRC);
diff --git a/queue-6.1/s390-dasd-move-quiesce-state-with-pprc-swap.patch b/queue-6.1/s390-dasd-move-quiesce-state-with-pprc-swap.patch
new file mode 100644 (file)
index 0000000..b2e8848
--- /dev/null
@@ -0,0 +1,46 @@
+From 40e9cd4ae8ec43b107ed2bff422a8fa39dcf4e4b Mon Sep 17 00:00:00 2001
+From: Stefan Haberland <sth@linux.ibm.com>
+Date: Tue, 10 Mar 2026 15:23:29 +0100
+Subject: s390/dasd: Move quiesce state with pprc swap
+
+From: Stefan Haberland <sth@linux.ibm.com>
+
+commit 40e9cd4ae8ec43b107ed2bff422a8fa39dcf4e4b upstream.
+
+Quiesce and resume is a mechanism to suspend operations on DASD devices.
+In the context of a controlled copy pair swap operation, the quiesce
+operation is usually issued before the actual swap and a resume
+afterwards.
+
+During the swap operation, the underlying device is exchanged. Therefore,
+the quiesce flag must be moved to the secondary device to ensure a
+consistent quiesce state after the swap.
+
+The secondary device itself cannot be suspended separately because there
+is no separate block device representation for it.
+
+Fixes: 413862caad6f ("s390/dasd: add copy pair swap capability")
+Cc: stable@vger.kernel.org #6.1
+Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
+Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
+Link: https://patch.msgid.link/20260310142330.4080106-2-sth@linux.ibm.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/s390/block/dasd_eckd.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/s390/block/dasd_eckd.c
++++ b/drivers/s390/block/dasd_eckd.c
+@@ -6233,6 +6233,11 @@ static int dasd_eckd_copy_pair_swap(stru
+                       dev_name(&secondary->cdev->dev), rc);
+       }
++      if (primary->stopped & DASD_STOPPED_QUIESCE) {
++              dasd_device_set_stop_bits(secondary, DASD_STOPPED_QUIESCE);
++              dasd_device_remove_stop_bits(primary, DASD_STOPPED_QUIESCE);
++      }
++
+       /* re-enable device */
+       dasd_device_remove_stop_bits(primary, DASD_STOPPED_PPRC);
+       dasd_device_remove_stop_bits(secondary, DASD_STOPPED_PPRC);
diff --git a/queue-6.1/scsi-core-fix-error-handling-for-scsi_alloc_sdev.patch b/queue-6.1/scsi-core-fix-error-handling-for-scsi_alloc_sdev.patch
new file mode 100644 (file)
index 0000000..b2c04a3
--- /dev/null
@@ -0,0 +1,41 @@
+From 4ce7ada40c008fa21b7e52ab9d04e8746e2e9325 Mon Sep 17 00:00:00 2001
+From: Junxiao Bi <junxiao.bi@oracle.com>
+Date: Wed, 4 Mar 2026 08:46:03 -0800
+Subject: scsi: core: Fix error handling for scsi_alloc_sdev()
+
+From: Junxiao Bi <junxiao.bi@oracle.com>
+
+commit 4ce7ada40c008fa21b7e52ab9d04e8746e2e9325 upstream.
+
+After scsi_sysfs_device_initialize() was called, error paths must call
+__scsi_remove_device().
+
+Fixes: 1ac22c8eae81 ("scsi: core: Fix refcount leak for tagset_refcnt")
+Cc: stable@vger.kernel.org
+Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
+Reviewed-by: John Garry <john.g.garry@oracle.com>
+Reviewed-by: Bart Van Assche <bvanassche@acm.org>
+Link: https://patch.msgid.link/20260304164603.51528-1-junxiao.bi@oracle.com
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/scsi/scsi_scan.c |    8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+--- a/drivers/scsi/scsi_scan.c
++++ b/drivers/scsi/scsi_scan.c
+@@ -354,12 +354,8 @@ static struct scsi_device *scsi_alloc_sd
+        * default device queue depth to figure out sbitmap shift
+        * since we use this queue depth most of times.
+        */
+-      if (scsi_realloc_sdev_budget_map(sdev, depth)) {
+-              kref_put(&sdev->host->tagset_refcnt, scsi_mq_free_tags);
+-              put_device(&starget->dev);
+-              kfree(sdev);
+-              goto out;
+-      }
++      if (scsi_realloc_sdev_budget_map(sdev, depth))
++              goto out_device_destroy;
+       scsi_change_queue_depth(sdev, depth);
index 9620da09d6555c6c9dbe7ae237bcd26230c5e415..d74aa5630ec644455a2a5897400770934dd21fd7 100644 (file)
@@ -246,3 +246,27 @@ parisc-check-kernel-mapping-earlier-at-bootup.patch
 smb-server-fix-use-after-free-in-smb2_open.patch
 net-ncsi-fix-skb-leak-in-error-paths.patch
 net-ethernet-arc-emac-quiesce-interrupts-before-requesting-irq.patch
+drm-amdgpu-fix-use-after-free-race-in-vm-acquire.patch
+drm-amd-set-num-ip-blocks-to-0-if-discovery-fails.patch
+drm-bridge-ti-sn65dsi83-fix-cha_dsi_clk_range-rounding.patch
+tracing-fix-trace_buf_size-cmdline-parameter-with-sizes-2g.patch
+xfs-fix-undersized-l_iclog_roundoff-values.patch
+s390-dasd-move-quiesce-state-with-pprc-swap.patch
+s390-dasd-copy-detected-format-information-to-secondary-device.patch
+lib-bootconfig-fix-off-by-one-in-xbc_verify_tree-unclosed-brace-error.patch
+scsi-core-fix-error-handling-for-scsi_alloc_sdev.patch
+x86-apic-disable-x2apic-on-resume-if-the-kernel-expects-so.patch
+lib-bootconfig-fix-snprintf-truncation-check-in-xbc_node_compose_key_after.patch
+lib-bootconfig-check-bounds-before-writing-in-__xbc_open_brace.patch
+smb-client-fix-atomic-open-with-o_direct-o_sync.patch
+smb-client-fix-iface-port-assignment-in-parse_server_interfaces.patch
+btrfs-fix-transaction-abort-on-file-creation-due-to-name-hash-collision.patch
+btrfs-abort-transaction-on-failure-to-update-root-in-the-received-subvol-ioctl.patch
+iio-dac-ds4424-reject-128-raw-value.patch
+iio-chemical-sps30_serial-fix-buffer-size-in-sps30_serial_read_meas.patch
+iio-chemical-sps30_i2c-fix-buffer-size-in-sps30_i2c_read_meas.patch
+iio-potentiometer-mcp4131-fix-double-application-of-wiper-shift.patch
+iio-chemical-bme680-fix-measurement-wait-duration-calculation.patch
+iio-gyro-mpu3050-core-fix-pm_runtime-error-handling.patch
+iio-gyro-mpu3050-i2c-fix-pm_runtime-error-handling.patch
+iio-imu-inv_icm42600-fix-odr-switch-to-the-same-value.patch
diff --git a/queue-6.1/smb-client-fix-atomic-open-with-o_direct-o_sync.patch b/queue-6.1/smb-client-fix-atomic-open-with-o_direct-o_sync.patch
new file mode 100644 (file)
index 0000000..ee2471c
--- /dev/null
@@ -0,0 +1,102 @@
+From 4a7d2729dc99437dbb880a64c47828c0d191b308 Mon Sep 17 00:00:00 2001
+From: Paulo Alcantara <pc@manguebit.org>
+Date: Sat, 7 Mar 2026 18:20:16 -0300
+Subject: smb: client: fix atomic open with O_DIRECT & O_SYNC
+
+From: Paulo Alcantara <pc@manguebit.org>
+
+commit 4a7d2729dc99437dbb880a64c47828c0d191b308 upstream.
+
+When user application requests O_DIRECT|O_SYNC along with O_CREAT on
+open(2), CREATE_NO_BUFFER and CREATE_WRITE_THROUGH bits were missed in
+CREATE request when performing an atomic open, thus leading to
+potentially data integrity issues.
+
+Fix this by setting those missing bits in CREATE request when
+O_DIRECT|O_SYNC has been specified in cifs_do_create().
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
+Reviewed-by: David Howells <dhowells@redhat.com>
+Acked-by: Henrique Carvalho <henrique.carvalho@suse.com>
+Cc: Tom Talpey <tom@talpey.com>
+Cc: linux-cifs@vger.kernel.org
+Cc: stable@vger.kernel.org
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/smb/client/cifsglob.h |   11 +++++++++++
+ fs/smb/client/dir.c      |    1 +
+ fs/smb/client/file.c     |   18 +++---------------
+ 3 files changed, 15 insertions(+), 15 deletions(-)
+
+--- a/fs/smb/client/cifsglob.h
++++ b/fs/smb/client/cifsglob.h
+@@ -20,6 +20,7 @@
+ #include <linux/utsname.h>
+ #include <linux/sched/mm.h>
+ #include <linux/netfs.h>
++#include <linux/fcntl.h>
+ #include "cifs_fs_sb.h"
+ #include "cifsacl.h"
+ #include <crypto/internal/hash.h>
+@@ -2194,4 +2195,14 @@ static inline bool cifs_ses_exiting(stru
+       return ret;
+ }
++static inline int cifs_open_create_options(unsigned int oflags, int opts)
++{
++      /* O_SYNC also has bit for O_DSYNC so following check picks up either */
++      if (oflags & O_SYNC)
++              opts |= CREATE_WRITE_THROUGH;
++      if (oflags & O_DIRECT)
++              opts |= CREATE_NO_BUFFER;
++      return opts;
++}
++
+ #endif        /* _CIFS_GLOB_H */
+--- a/fs/smb/client/dir.c
++++ b/fs/smb/client/dir.c
+@@ -304,6 +304,7 @@ static int cifs_do_create(struct inode *
+               goto out;
+       }
++      create_options |= cifs_open_create_options(oflags, create_options);
+       /*
+        * if we're not using unix extensions, see if we need to set
+        * ATTR_READONLY on the create call
+--- a/fs/smb/client/file.c
++++ b/fs/smb/client/file.c
+@@ -255,15 +255,8 @@ static int cifs_nt_open(const char *full
+  *********************************************************************/
+       disposition = cifs_get_disposition(f_flags);
+-
+       /* BB pass O_SYNC flag through on file attributes .. BB */
+-
+-      /* O_SYNC also has bit for O_DSYNC so following check picks up either */
+-      if (f_flags & O_SYNC)
+-              create_options |= CREATE_WRITE_THROUGH;
+-
+-      if (f_flags & O_DIRECT)
+-              create_options |= CREATE_NO_BUFFER;
++      create_options |= cifs_open_create_options(f_flags, create_options);
+ retry_open:
+       oparms = (struct cifs_open_parms) {
+@@ -913,13 +906,8 @@ cifs_reopen_file(struct cifsFileInfo *cf
+               rdwr_for_fscache = 1;
+       desired_access = cifs_convert_flags(cfile->f_flags, rdwr_for_fscache);
+-
+-      /* O_SYNC also has bit for O_DSYNC so following check picks up either */
+-      if (cfile->f_flags & O_SYNC)
+-              create_options |= CREATE_WRITE_THROUGH;
+-
+-      if (cfile->f_flags & O_DIRECT)
+-              create_options |= CREATE_NO_BUFFER;
++      create_options |= cifs_open_create_options(cfile->f_flags,
++                                                 create_options);
+       if (server->ops->get_lease_key)
+               server->ops->get_lease_key(inode, &cfile->fid);
diff --git a/queue-6.1/smb-client-fix-iface-port-assignment-in-parse_server_interfaces.patch b/queue-6.1/smb-client-fix-iface-port-assignment-in-parse_server_interfaces.patch
new file mode 100644 (file)
index 0000000..b2e5240
--- /dev/null
@@ -0,0 +1,74 @@
+From d4c7210d2f3ea481a6481f03040a64d9077a6172 Mon Sep 17 00:00:00 2001
+From: Henrique Carvalho <henrique.carvalho@suse.com>
+Date: Wed, 11 Mar 2026 20:17:23 -0300
+Subject: smb: client: fix iface port assignment in parse_server_interfaces
+
+From: Henrique Carvalho <henrique.carvalho@suse.com>
+
+commit d4c7210d2f3ea481a6481f03040a64d9077a6172 upstream.
+
+parse_server_interfaces() initializes interface socket addresses with
+CIFS_PORT. When the mount uses a non-default port this overwrites the
+configured destination port.
+
+Later, cifs_chan_update_iface() copies this sockaddr into server->dstaddr,
+causing reconnect attempts to use the wrong port after server interface
+updates.
+
+Use the existing port from server->dstaddr instead.
+
+Cc: stable@vger.kernel.org
+Fixes: fe856be475f7 ("CIFS: parse and store info on iface queries")
+Tested-by: Dr. Thomas Orgis <thomas.orgis@uni-hamburg.de>
+Reviewed-by: Enzo Matsumiya <ematsumiya@suse.de>
+Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/smb/client/smb2ops.c |   14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+--- a/fs/smb/client/smb2ops.c
++++ b/fs/smb/client/smb2ops.c
+@@ -569,6 +569,7 @@ parse_server_interfaces(struct network_i
+       struct iface_info_ipv6 *p6;
+       struct cifs_server_iface *info = NULL, *iface = NULL, *niface = NULL;
+       struct cifs_server_iface tmp_iface;
++      __be16 port;
+       ssize_t bytes_left;
+       size_t next = 0;
+       int nb_iface = 0;
+@@ -610,6 +611,15 @@ parse_server_interfaces(struct network_i
+               goto out;
+       }
++      spin_lock(&ses->server->srv_lock);
++      if (ses->server->dstaddr.ss_family == AF_INET)
++              port = ((struct sockaddr_in *)&ses->server->dstaddr)->sin_port;
++      else if (ses->server->dstaddr.ss_family == AF_INET6)
++              port = ((struct sockaddr_in6 *)&ses->server->dstaddr)->sin6_port;
++      else
++              port = cpu_to_be16(CIFS_PORT);
++      spin_unlock(&ses->server->srv_lock);
++
+       while (bytes_left >= (ssize_t)sizeof(*p)) {
+               memset(&tmp_iface, 0, sizeof(tmp_iface));
+               /* default to 1Gbps when link speed is unset */
+@@ -630,7 +640,7 @@ parse_server_interfaces(struct network_i
+                       memcpy(&addr4->sin_addr, &p4->IPv4Address, 4);
+                       /* [MS-SMB2] 2.2.32.5.1.1 Clients MUST ignore these */
+-                      addr4->sin_port = cpu_to_be16(CIFS_PORT);
++                      addr4->sin_port = port;
+                       cifs_dbg(FYI, "%s: ipv4 %pI4\n", __func__,
+                                &addr4->sin_addr);
+@@ -644,7 +654,7 @@ parse_server_interfaces(struct network_i
+                       /* [MS-SMB2] 2.2.32.5.1.2 Clients MUST ignore these */
+                       addr6->sin6_flowinfo = 0;
+                       addr6->sin6_scope_id = 0;
+-                      addr6->sin6_port = cpu_to_be16(CIFS_PORT);
++                      addr6->sin6_port = port;
+                       cifs_dbg(FYI, "%s: ipv6 %pI6\n", __func__,
+                                &addr6->sin6_addr);
diff --git a/queue-6.1/tracing-fix-trace_buf_size-cmdline-parameter-with-sizes-2g.patch b/queue-6.1/tracing-fix-trace_buf_size-cmdline-parameter-with-sizes-2g.patch
new file mode 100644 (file)
index 0000000..ceb0837
--- /dev/null
@@ -0,0 +1,61 @@
+From d008ba8be8984760e36d7dcd4adbd5a41a645708 Mon Sep 17 00:00:00 2001
+From: Calvin Owens <calvin@wbinvd.org>
+Date: Fri, 6 Mar 2026 19:19:25 -0800
+Subject: tracing: Fix trace_buf_size= cmdline parameter with sizes >= 2G
+
+From: Calvin Owens <calvin@wbinvd.org>
+
+commit d008ba8be8984760e36d7dcd4adbd5a41a645708 upstream.
+
+Some of the sizing logic through tracer_alloc_buffers() uses int
+internally, causing unexpected behavior if the user passes a value that
+does not fit in an int (on my x86 machine, the result is uselessly tiny
+buffers).
+
+Fix by plumbing the parameter's real type (unsigned long) through to the
+ring buffer allocation functions, which already use unsigned long.
+
+It has always been possible to create larger ring buffers via the sysfs
+interface: this only affects the cmdline parameter.
+
+Cc: stable@vger.kernel.org
+Cc: Masami Hiramatsu <mhiramat@kernel.org>
+Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+Link: https://patch.msgid.link/bff42a4288aada08bdf74da3f5b67a2c28b761f8.1772852067.git.calvin@wbinvd.org
+Fixes: 73c5162aa362 ("tracing: keep ring buffer to minimum size till used")
+Signed-off-by: Calvin Owens <calvin@wbinvd.org>
+Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/trace/trace.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/kernel/trace/trace.c
++++ b/kernel/trace/trace.c
+@@ -9298,7 +9298,7 @@ static void
+ init_tracer_tracefs(struct trace_array *tr, struct dentry *d_tracer);
+ static int
+-allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, int size)
++allocate_trace_buffer(struct trace_array *tr, struct array_buffer *buf, unsigned long size)
+ {
+       enum ring_buffer_flags rb_flags;
+@@ -9334,7 +9334,7 @@ static void free_trace_buffer(struct arr
+       }
+ }
+-static int allocate_trace_buffers(struct trace_array *tr, int size)
++static int allocate_trace_buffers(struct trace_array *tr, unsigned long size)
+ {
+       int ret;
+@@ -10278,7 +10278,7 @@ out:
+ __init static int tracer_alloc_buffers(void)
+ {
+-      int ring_buf_size;
++      unsigned long ring_buf_size;
+       int ret = -ENOMEM;
diff --git a/queue-6.1/x86-apic-disable-x2apic-on-resume-if-the-kernel-expects-so.patch b/queue-6.1/x86-apic-disable-x2apic-on-resume-if-the-kernel-expects-so.patch
new file mode 100644 (file)
index 0000000..77e6bca
--- /dev/null
@@ -0,0 +1,86 @@
+From 8cc7dd77a1466f0ec58c03478b2e735a5b289b96 Mon Sep 17 00:00:00 2001
+From: Shashank Balaji <shashank.mahadasyam@sony.com>
+Date: Fri, 6 Mar 2026 14:46:28 +0900
+Subject: x86/apic: Disable x2apic on resume if the kernel expects so
+
+From: Shashank Balaji <shashank.mahadasyam@sony.com>
+
+commit 8cc7dd77a1466f0ec58c03478b2e735a5b289b96 upstream.
+
+When resuming from s2ram, firmware may re-enable x2apic mode, which may have
+been disabled by the kernel during boot either because it doesn't support IRQ
+remapping or for other reasons. This causes the kernel to continue using the
+xapic interface, while the hardware is in x2apic mode, which causes hangs.
+This happens on defconfig + bare metal + s2ram.
+
+Fix this in lapic_resume() by disabling x2apic if the kernel expects it to be
+disabled, i.e. when x2apic_mode = 0.
+
+The ACPI v6.6 spec, Section 16.3 [1] says firmware restores either the
+pre-sleep configuration or initial boot configuration for each CPU, including
+MSR state:
+
+  When executing from the power-on reset vector as a result of waking from an
+  S2 or S3 sleep state, the platform firmware performs only the hardware
+  initialization required to restore the system to either the state the
+  platform was in prior to the initial operating system boot, or to the
+  pre-sleep configuration state. In multiprocessor systems, non-boot
+  processors should be placed in the same state as prior to the initial
+  operating system boot.
+
+  (further ahead)
+
+  If this is an S2 or S3 wake, then the platform runtime firmware restores
+  minimum context of the system before jumping to the waking vector. This
+  includes:
+
+       CPU configuration. Platform runtime firmware restores the pre-sleep
+       configuration or initial boot configuration of each CPU (MSR, MTRR,
+       firmware update, SMBase, and so on). Interrupts must be disabled (for
+       IA-32 processors, disabled by CLI instruction).
+
+       (and other things)
+
+So at least as per the spec, re-enablement of x2apic by the firmware is
+allowed if "x2apic on" is a part of the initial boot configuration.
+
+  [1] https://uefi.org/specs/ACPI/6.6/16_Waking_and_Sleeping.html#initialization
+
+  [ bp: Massage. ]
+
+Fixes: 6e1cb38a2aef ("x64, x2apic/intr-remap: add x2apic support, including enabling interrupt-remapping")
+Co-developed-by: Rahul Bukte <rahul.bukte@sony.com>
+Signed-off-by: Rahul Bukte <rahul.bukte@sony.com>
+Signed-off-by: Shashank Balaji <shashank.mahadasyam@sony.com>
+Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
+Reviewed-by: Thomas Gleixner <tglx@kernel.org>
+Reviewed-by: Sohil Mehta <sohil.mehta@intel.com>
+Cc: stable@vger.kernel.org
+Link: https://patch.msgid.link/20260306-x2apic-fix-v2-1-bee99c12efa3@sony.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/kernel/apic/apic.c |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/arch/x86/kernel/apic/apic.c
++++ b/arch/x86/kernel/apic/apic.c
+@@ -1958,6 +1958,7 @@ void __init check_x2apic(void)
+ static inline void try_to_enable_x2apic(int remap_mode) { }
+ static inline void __x2apic_enable(void) { }
++static inline void __x2apic_disable(void) { }
+ #endif /* !CONFIG_X86_X2APIC */
+ void __init enable_IR_x2apic(void)
+@@ -2778,6 +2779,11 @@ static void lapic_resume(void)
+       if (x2apic_mode) {
+               __x2apic_enable();
+       } else {
++              if (x2apic_enabled()) {
++                      pr_warn_once("x2apic: re-enabled by firmware during resume. Disabling\n");
++                      __x2apic_disable();
++              }
++
+               /*
+                * Make sure the APICBASE points to the right address
+                *
diff --git a/queue-6.1/xfs-fix-undersized-l_iclog_roundoff-values.patch b/queue-6.1/xfs-fix-undersized-l_iclog_roundoff-values.patch
new file mode 100644 (file)
index 0000000..d98ea93
--- /dev/null
@@ -0,0 +1,66 @@
+From 52a8a1ba883defbfe3200baa22cf4cd21985d51a Mon Sep 17 00:00:00 2001
+From: "Darrick J. Wong" <djwong@kernel.org>
+Date: Wed, 4 Mar 2026 20:26:20 -0800
+Subject: xfs: fix undersized l_iclog_roundoff values
+
+From: Darrick J. Wong <djwong@kernel.org>
+
+commit 52a8a1ba883defbfe3200baa22cf4cd21985d51a upstream.
+
+If the superblock doesn't list a log stripe unit, we set the incore log
+roundoff value to 512.  This leads to corrupt logs and unmountable
+filesystems in generic/617 on a disk with 4k physical sectors...
+
+XFS (sda1): Mounting V5 Filesystem ff3121ca-26e6-4b77-b742-aaff9a449e1c
+XFS (sda1): Torn write (CRC failure) detected at log block 0x318e. Truncating head block from 0x3197.
+XFS (sda1): failed to locate log tail
+XFS (sda1): log mount/recovery failed: error -74
+XFS (sda1): log mount failed
+XFS (sda1): Mounting V5 Filesystem ff3121ca-26e6-4b77-b742-aaff9a449e1c
+XFS (sda1): Ending clean mount
+
+...on the current xfsprogs for-next which has a broken mkfs.  xfs_info
+shows this...
+
+meta-data=/dev/sda1              isize=512    agcount=4, agsize=644992 blks
+         =                       sectsz=4096  attr=2, projid32bit=1
+         =                       crc=1        finobt=1, sparse=1, rmapbt=1
+         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=1
+         =                       exchange=1   metadir=1
+data     =                       bsize=4096   blocks=2579968, imaxpct=25
+         =                       sunit=0      swidth=0 blks
+naming   =version 2              bsize=4096   ascii-ci=0, ftype=1, parent=1
+log      =internal log           bsize=4096   blocks=16384, version=2
+         =                       sectsz=4096  sunit=0 blks, lazy-count=1
+realtime =none                   extsz=4096   blocks=0, rtextents=0
+         =                       rgcount=0    rgsize=268435456 extents
+         =                       zoned=0      start=0 reserved=0
+
+...observe that the log section has sectsz=4096 sunit=0, which means
+that the roundoff factor is 512, not 4096 as you'd expect.  We should
+fix mkfs not to generate broken filesystems, but anyone can fuzz the
+ondisk superblock so we should be more cautious.  I think the inadequate
+logic predates commit a6a65fef5ef8d0, but that's clearly going to
+require a different backport.
+
+Cc: stable@vger.kernel.org # v5.14
+Fixes: a6a65fef5ef8d0 ("xfs: log stripe roundoff is a property of the log")
+Signed-off-by: Darrick J. Wong <djwong@kernel.org>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Carlos Maiolino <cem@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ fs/xfs/xfs_log.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/xfs/xfs_log.c
++++ b/fs/xfs/xfs_log.c
+@@ -1549,6 +1549,8 @@ xlog_alloc_log(
+       if (xfs_has_logv2(mp) && mp->m_sb.sb_logsunit > 1)
+               log->l_iclog_roundoff = mp->m_sb.sb_logsunit;
++      else if (mp->m_sb.sb_logsectsize > 0)
++              log->l_iclog_roundoff = mp->m_sb.sb_logsectsize;
+       else
+               log->l_iclog_roundoff = BBSIZE;