Skip to content

[RLC-10] Rebase Custom Changes to rlc-10/6.12.0-211.66.1.el10_2 - #1719

Merged
PlaidCat merged 98 commits into
rlc-10/6.12.0-211.66.1.el10_2from
jmaple_rlc-10/6.12.0-211.66.1.el10_2
Oct 21, 2026
Merged

PlaidCat merged 98 commits into
rlc-10/6.12.0-211.66.1.el10_2from
jmaple_rlc-10/6.12.0-211.66.1.el10_2

Conversation

@PlaidCat

Copy link
Copy Markdown
Collaborator

https://ciqinc.atlassian.net/browse/KERNEL-1767

Update process (This kernel CentOS base for 6.12.0-211.66.1.el10_2)

  • Rolling Release Rebase Process
  • Create rlc-10/6.12.0-211.66.1.el10_2 branch from rocky10_2
  • Cherry-pick all code from previous branch rlc-10/6.12.0-211.65.1.el10_2 into new branch (skipping unneeded code)
    • Fix conflicts as they arise
  • Build and Test

Rebase Log

Already on 'rlc-10/6.12.0-211.65.1.el10_2'
Already on 'jmaple_rlc-10/6.12.0-211.66.1.el10_2'
[rolling release update] Rolling Product:  rlc-10
[rolling release update] Checking out branch:  rlc-10/6.12.0-211.65.1.el10_2
[rolling release update] Gathering all the RESF kernel Tags
[rolling release update] Found 36 RESF kernel tags
[rolling release update] Checking out branch:  rocky10_2
[rolling release update] Gathering all the RESF kernel Tags
[rolling release update] Found 37 RESF kernel tags
[rolling release update] Common tag sha:  b'05fc8eea84df1'
"05fc8eea84df12a7a124d889dfb723df202b208a Rebuild rocky10_2 with kernel-6.12.0-211.65.1.el10_2"
[rolling release update] Checking for FIPS protected changes between the common tag and HEAD
[rolling release update] Checking for FIPS protected changes
[rolling release update] Getting SHAS 05fc8eea84df1..HEAD
[rolling release update] Number of commits to check:  37
[rolling release update] Checking modifications of shas
[rolling release update] Checked 3 of 37 commits
[rolling release update] Checked 6 of 37 commits
[rolling release update] Checked 9 of 37 commits
[rolling release update] Checked 12 of 37 commits
[rolling release update] Checked 15 of 37 commits
[rolling release update] Checked 18 of 37 commits
[rolling release update] Checked 21 of 37 commits
[rolling release update] Checked 24 of 37 commits
[rolling release update] Checked 27 of 37 commits
[rolling release update] Checked 30 of 37 commits
[rolling release update] Checked 33 of 37 commits
[rolling release update] Checked 36 of 37 commits
[rolling release update] 0 of 37 commits have FIPS protected changes
[rolling release update] Checking out old rolling branch:  rlc-10/6.12.0-211.65.1.el10_2
[rolling release update] Finding the CIQ Kernel and Associated Upstream commits between the last resf tag and HEAD
[rolling release update] Getting SHAS 05fc8eea84df1..HEAD
[rolling release update] Last RESF tag sha:  b'05fc8eea84df1'
[rolling release update] Total commits in old branch: 98
[rolling release update] Checking out new base branch:  rocky10_2
[rolling release update] Finding the kernel version for the new rolling release
[rolling release update] New Branch to create: rlc-10/6.12.0-211.66.1.el10_2
[rolling release update] Creating new branch: rlc-10/6.12.0-211.66.1.el10_2
[rolling release update] Creating new branch for PR:  jmaple_rlc-10/6.12.0-211.66.1.el10_2
[rolling release update] Creating Map of all new commits from last rolling release fork
[rolling release update] Total commits in new branch: 36
[rolling release update] Checking if any of the commits from the old rolling release are already present in the new base branch
[rolling release update] Found 0 duplicate commits to remove
[rolling release update] Applying 98 remaining commits to the new branch
  [1/98] 08e5908080172 github actions: Add kernelCI for rlc-10
  [2/98] f3e16dea34dce github actions: Use trigger for kernelCI
  [3/98] 3523c4165ff24 github actions: Pin Checkout action to v6.0.2
  [4/98] 91339ee40e65a github actions: set make to `nproc` rather than hardcoded
  [5/98] c027718fb276b tools: hv: Enable debug logs for hv_kvp_daemon
  [6/98] 9728452ff0719 dcache: export shrink_dentry_list() and add new helper d_dispose_if_unused()
  [7/98] 44f2cfd790979 fuse: don't truncate cached, mutated symlink
  [8/98] b643535f859ec fuse: add more control over cache invalidation behaviour
  [9/98] 591c263578b13 fuse: fix possibly missing fuse_copy_finish() call in fuse_notify()
  [10/98] 5f45f81727672 fs: fuse: add dev id to /dev/fuse fdinfo
  [11/98] 2a293f795aa56 fuse: respect FOPEN_KEEP_CACHE on opendir
  [12/98] 5336755a18b07 gve: fix zero-length skb frag with header-split
  [13/98] fe396020f31d5 gve: bound DQO-QPL TX buffer count to the s16 free-list range
  [14/98] 05cd9467c3514 xfrm: nat_keepalive: avoid double free on send error
  [15/98] b9ea4edabe519 af_unix: Set error only when needed in unix_dgram_sendmsg().
  [16/98] 0a4201713654c sctp: fix auth_hmacs array size in struct sctp_cookie
  [17/98] 225de6e1dd37a openvswitch: defer tunnel netdev_put to RCU release
  [18/98] e4d7941d65bd8 openvswitch: vport: fix self-deadlock on release of tunnel ports
  [19/98] 6cc1f7ab5bbd8 ip6_tunnel: clear skb2->cb[] in ip6ip6_err()
  [20/98] cac0c9ac1d946 fuse: rename to fuse_dev_end_requests and make non-static
  [21/98] 14822466bcca2 fuse: Move fuse_get_dev to header file
  [22/98] ef68f493267ed fuse: Move request bits
  [23/98] 1e94d78fd1bd5 fuse: make args->in_args[0] to be always the header
  [24/98] 5661756b5eb64 fuse: {io-uring} Handle SQEs - register commands
  [25/98] dc865742c953d fuse: Make fuse_copy non static
  [26/98] b0ec0056250b0 fuse: Add fuse-io-uring handling into fuse_copy
  [27/98] 12c87cca36827 fuse: {io-uring} Make hash-list req unique finding functions non-static
  [28/98] b22aec2d3b9ba fuse: Add io-uring sqe commit and fetch support
  [29/98] 867330254c547 fuse: {io-uring} Handle teardown of ring entries
  [30/98] e9b6a8125ab55 fuse: {io-uring} Make fuse_dev_queue_{interrupt,forget} non-static
  [31/98] 7411bd5abe7c2 fuse: Allow to queue fg requests through io-uring
  [32/98] e2bddd558cf39 fuse: Allow to queue bg requests through io-uring
  [33/98] 980f4857d979f fuse: {io-uring} Prevent mount point hang on fuse-server termination
  [34/98] 1c599036647ea fuse: block request allocation until io-uring init is complete
  [35/98] fbdffe87f9f1f fuse: enable fuse-over-io-uring
  [36/98] 8c2d63b140101 fuse: prevent disabling io-uring on active connections
  [37/98] 1be988d0cbd79 fuse: fix uring race condition for null dereference of fc
  [38/98] 63504c2e75f45 fuse: fix possible deadlock if rings are never initialized
  [39/98] cfb663fbce294 fuse: removed unused function fuse_uring_create() from header
  [40/98] 2fc8149173e20 fuse: {io-uring} Fix a possible req cancellation race
  [41/98] 40dd836fc0259 fuse: remove unneeded atomic set in uring creation
  [42/98] 0a68173972e38 fuse: missing copy_finish in fuse-over-io-uring argument copies
  [43/98] 27967ce47df90 fuse: fix io-uring list corruption for terminated non-committed requests
  [44/98] 5443c8a3a87f6 fuse-uring: fix EFAULT clobber in fuse_uring_commit
  [45/98] 27c8a76aeb9ca fuse-uring: fix data races on ring->ready
  [46/98] d157984cca503 fuse-uring: fix race between registration and connection abortion
  [47/98] cb9777a40914c fuse-uring: check connection abort during ring creation
  [48/98] d3fc943cf564a fuse-uring: fix moving cancelled entry to ent_in_userspace list
  [49/98] 9ea4dce9bff8d fuse-uring: end fuse_req on io-uring cancel task work
  [50/98] c665c28d2c052 fuse-uring: Avoid use-after-free in fuse_uring_async_stop_queues
  [51/98] 7d4b586c42af4 fuse-uring: Avoid queue->stopped races and set/read that value under lock
  [52/98] 6b3dfc12f47f8 fuse-uring: make a fuse_req on SQE commit only findable after memcpy
  [53/98] 094cc46ecf957 fuse-uring: remove request-less entries from ent_w_req_queue to fix NULL deref
  [54/98] d7a80f21e2784 fuse: fix io-uring background queue dispatch on request completion
  [55/98] b9ff912ab04a2 fuse-uring: clear ent->fuse_req in commit_fetch error path
  [56/98] c158b802a9d19 fuse: fix missing barrier when checking io-uring readiness
  [57/98] 9ce58432bdf53 fuse: publish io-uring queues with release semantics
  [58/98] 9814030d5fa63 fuse: copy request headers via a stack buffer for io-uring
  [59/98] f8a0f9632e867 fuse: Fix the condition to enable over-io-uring
  [60/98] 642ccd4023054 configs: enable CONFIG_FUSE_IO_URING=y on x86_64 and aarch64
  [61/98] 76213de500697 selftests: filesystems: Add functional test for the abort file in fusectl
  [62/98] f77aa3fae1558 selftests/fuse: adapt fuse_mnt to libfuse3 API
  [63/98] 292b6b078d372 selftests/fuse: add ACL_DONT_CACHE regression test
  [64/98] 60f76a2911a0a selftests/fuse: add FUSE io-uring integration test
  [65/98] 4848ab0525f2c sctp: stream: fully roll back denied add-stream state
  [66/98] 62a809a0269e3 mpls: add seqcount to protect the platform_label{,s} pair
  [67/98] ba0e3f8ba8f89 crypto: ecdh - implement FIPS PCT
  [68/98] c7983d9a45d6e crypto: essiv - Zeroize keys on exit in essiv_aead_setkey()
  [69/98] 66a68a5e62648 crypto: drbg - Align buffers to at least a cache line
  [70/98] 352efaba0629c mm/gup: introduce pin_user_pages_fast_only()
  [71/98] c9714a86d5705 crypto: rng - Convert crypto_default_rng_refcnt into an unsigned int
  [72/98] 5592cc35e63f9 crypto: rng - Fix priority inversions due to mutex locks
  [73/98] 81fbd93b6d66f crypto: sha1 - Add FIPS known answer test for lib/crypto path
  [74/98] 14188ed0430d0 crypto: sha256 - Add FIPS known answer test for lib/crypto path
  [75/98] 14cc2df44e9de When in fips mode, self-test errors must panic.
  [76/98] 44cd7ac91a87e When in fips mode, self-test errors must panic.
  [77/98] 5d58f301f72ef In crypto_kdf108_ctr_generate() there is no minimum length check for the digest to be generated - it must be at least 112 bits.
  [78/98] fb0343e178b46 crypto: Kconfig - Make CRYPTO_FIPS depend on the DRBG being built-in
  [79/98] 64e9d8914e2fb crypto: rng - Ensure set_ent is always present
  [80/98] ec9f4c3613f9f crypto: rng - Override drivers/char/random in FIPS mode
  [81/98] 8d9eb3e911ad6 crypto: rng - Implement fast per-CPU DRBG instances
  [82/98] 035bb7d661f24 random: Restrict extrng registration to init time
  [83/98] 3fe1486fa5d17 crypto: rng - Only allow the DRBG to register as "stdrng" in FIPS mode
  [84/98] 13135a4a96889 crypto: rng - Fix tabs vs spaces in the per-CPU DRBG code
  [85/98] 1b74f09b106c7 crypto: rng - Make the per-CPU DRBG instances permanent
  [86/98] d265929220536 crypto: rng - Skip leading zero-length iovec segments
  [87/98] 1898b530bdc51 crypto: rng - Fix spurious EFAULT when the destination PTE is zapped
  [88/98] ea1dc8e0e2a3b Revert "mm/gup: reintroduce pin_user_pages_fast_only()"
  [89/98] 16db2cd9138a6 local_lock: Move this_cpu_ptr() notation from internal to main header
  [90/98] 2cef76bd34895 crypto: rng - Fix double percpu offset in local_unlock() calls
  [91/98] 64fc241b89ecf configs: Set CRYPTO_FIPS_CUSTOM_VERSION
  [92/98] e0db3ac4d879d config: Alter JITTERENTROPY_MEMSIZE
  [93/98] 5c426bba248d9 dh_safe_prime_set_secret misses the check SP800-56Arev3, 5.6.2.1.2 that an externally provided private key is within the valid range 1 <= key <= q-1.
  [94/98] 25b80ba614c32 exec: Cleanup POSIX timers right after de_thread()
  [95/98] 09ae308e948c0 posix-timers: Target group sigqueue to current task only if not exiting
  [96/98] 142aaa3615bd2 signal: Prevent exec() race
  [97/98] cce4e7254254d github actions: Use reusable validate kernel commits workflow
  [98/98] 04fbaa37eeb02 ipv4: validate checksum_start before completing checksum
[rolling release update] Successfully applied all 98 commits

BUILD

$ egrep -B 5 -A 5 "\[TIMER\]|^Starting Build" $(ls -t kbuild* | head -n1)
/mnt/code/kernel-src-tree-build
Running make mrproper...
  CLEAN   scripts/basic
  CLEAN   scripts/kconfig
  CLEAN   include/config include/generated
[TIMER]{MRPROPER}: 14s
x86_64 architecture detected, copying config
'configs/kernel-x86_64-rhel.config' -> '.config'
Setting Local Version for build
CONFIG_LOCALVERSION="-rocky10_2_rebuild-263c8bf7f337"
Making olddefconfig
--
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
Starting Build
  GEN     arch/x86/include/generated/asm/orc_hash.h
  UPD     include/generated/uapi/linux/version.h
  WRAP    arch/x86/include/generated/uapi/asm/errno.h
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
--
  LD [M]  net/qrtr/qrtr-mhi.ko
  BTF [M] net/qrtr/qrtr-mhi.ko
  LD [M]  virt/lib/irqbypass.ko
  BTF [M] virt/lib/irqbypass.ko
  BTF [M] net/qrtr/qrtr.ko
[TIMER]{BUILD}: 3773s
Making Modules
  SYMLINK /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/build
  INSTALL /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/modules.order
  INSTALL /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/modules.builtin
  INSTALL /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/modules.builtin.modinfo
--
  STRIP   /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/kernel/virt/lib/irqbypass.ko
  SIGN    /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/kernel/net/hsr/hsr.ko
  SIGN    /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/kernel/net/qrtr/qrtr-mhi.ko
  SIGN    /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+/kernel/virt/lib/irqbypass.ko
  DEPMOD  /lib/modules/6.12.0-rocky10_2_rebuild-263c8bf7f337+
[TIMER]{MODULES}: 21s
Making Install
  INSTALL /boot
[TIMER]{INSTALL}: 28s
Checking kABI
kABI check passed
Setting Default Kernel to /boot/vmlinuz-6.12.0-rocky10_2_rebuild-263c8bf7f337+ and Index to 2
Hopefully Grub2.0 took everything ... rebooting after time metrices
[TIMER]{MRPROPER}: 14s
[TIMER]{BUILD}: 3773s
[TIMER]{MODULES}: 21s
[TIMER]{INSTALL}: 28s
[TIMER]{TOTAL} 3845s
Rebooting in 10 seconds

KSelfTest

$ ./kernel-tools/kernel_auto_rebuild/get_kselftest_diff.sh
selftest-6.12.0-jmaple_rlc-10_6.12.0-211.56.1.el10_2-a9a6f307c983+-1.log: 492 passed
selftest-6.12.0-jmaple_rlc-10_6.12.0-211.60.1.el10_2-0a34ea7c8b1b+-1.log: 488 passed
selftest-6.12.0-jmaple_rlc-10_6.12.0-211.65.1.el10_2-2a62602844a81+-1.log: 489 passed
selftest-6.12.0-jmaple_rlc-10_6.12.0-211.66.1.el10_2-2ef1ef9374eac+-1.log: 488 passed

Before: selftest-6.12.0-jmaple_rlc-10_6.12.0-211.65.1.el10_2-2a62602844a81+-1.log
After: selftest-6.12.0-jmaple_rlc-10_6.12.0-211.66.1.el10_2-2ef1ef9374eac+-1.log
Diff:
-ok 1 selftests: timers: posix_timers
+ok 36 selftests: net: so_txtime.sh
-ok 4 selftests: cgroup: test_freezer

roxanan1996 and others added 30 commits October 20, 2026 12:44
Signed-off-by: Roxana Nicolescu <rnicolescu@ciq.com>
Signed-off-by: Roxana Nicolescu <rnicolescu@ciq.com>
jira LE-3207
feature tools_hv
commit-author Shradha Gupta <shradhagupta@linux.microsoft.com>
commit a9c0b33

Allow the KVP daemon to log the KVP updates triggered in the VM
with a new debug flag(-d).
When the daemon is started with this flag, it logs updates and debug
information in syslog with loglevel LOG_DEBUG. This information comes
in handy for debugging issues where the key-value pairs for certain
pools show mismatch/incorrect values.
The distro-vendors can further consume these changes and modify the
respective service files to redirect the logs to specific files as
needed.

	Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
	Reviewed-by: Naman Jain <namjain@linux.microsoft.com>
	Reviewed-by: Dexuan Cui <decui@microsoft.com>
Link: https://lore.kernel.org/r/1744715978-8185-1-git-send-email-shradhagupta@linux.microsoft.com
	Signed-off-by: Wei Liu <wei.liu@kernel.org>
Message-ID: <1744715978-8185-1-git-send-email-shradhagupta@linux.microsoft.com>
(cherry picked from commit a9c0b33)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
…nused()

jira SECO-468
commit-author Luis Henriques <luis@igalia.com>
commit 395b955

Add and export a new helper d_dispose_if_unused() which is simply a wrapper
around to_shrink_list(), to add an entry to a dispose list if it's not used
anymore.

Also export shrink_dentry_list() to kill all dentries in a dispose list.

	Suggested-by: Miklos Szeredi <miklos@szeredi.hu>
	Signed-off-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 395b955)
	Signed-off-by: Roxana Nicolescu <rnicolescu@ciq.com>
jira SECO-478
RFBugFix: FUSE
commit-author Miklos Szeredi <mszeredi@redhat.com>
commit b4c173d

Fuse allows the value of a symlink to change and this property is exploited
by some filesystems (e.g. CVMFS).

It has been observed, that sometimes after changing the symlink contents,
the value is truncated to the old size.

This is caused by fuse_getattr() racing with fuse_reverse_inval_inode().
fuse_reverse_inval_inode() updates the fuse_inode's attr_version, which
results in fuse_change_attributes() exiting before updating the cached
attributes

This is okay, as the cached attributes remain invalid and the next call to
fuse_change_attributes() will likely update the inode with the correct
values.

The reason this causes problems is that cached symlinks will be
returned through page_get_link(), which truncates the symlink to
inode->i_size.  This is correct for filesystems that don't mutate
symlinks, but in this case it causes bad behavior.

The solution is to just remove this truncation.  This can cause a
regression in a filesystem that relies on supplying a symlink larger than
the file size, but this is unlikely.  If that happens we'd need to make
this behavior conditional.

	Reported-by: Laura Promberger <laura.promberger@cern.ch>
	Tested-by: Sam Lewis <samclewis@google.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Link: https://lore.kernel.org/r/20250220100258.793363-1-mszeredi@redhat.com
	Reviewed-by: Bernd Schubert <bschubert@ddn.com>
	Signed-off-by: Christian Brauner <brauner@kernel.org>
(cherry picked from commit b4c173d)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFBugFix: FUSE
commit-author Luis Henriques <luis@igalia.com>
commit 2396356
upstream-diff | conflict in fs/fuse/dir.c due to missing this piece:
       d701902 - fuse: return correct dentry for ->mkdir
       Which is a part of a larger changeset here that we're not going to
       take: https://lore.kernel.org/all/20250227013949.536172-1-neilb@suse.de/
       | Additionally this bumps the Kernel FUSE API minor version from 41
       to 44.  The interface into via fuse3 currently in Rocky 10.1 is
       limited to API 38 anyways at 3.16.2.
       | There is a build conflict due to a major rewrite of the d_revalidate
       calls which now includes the parent directory being passed.
       5be1fa8 Pass parent directory inode and expected name to ->d_revalidate()
       In this case we can use the dentry->i_sb because we only need the
       superblock for get_fuse_conn_super().

Currently userspace is able to notify the kernel to invalidate the cache
for an inode.  This means that, if all the inodes in a filesystem need to
be invalidated, then userspace needs to iterate through all of them and do
this kernel notification separately.

This patch adds the concept of 'epoch': each fuse connection will have the
current epoch initialized and every new dentry will have it's d_time set to
the current epoch value.  A new operation will then allow userspace to
increment the epoch value.  Every time a dentry is d_revalidate()'ed, it's
epoch is compared with the current connection epoch and invalidated if it's
value is different.

	Signed-off-by: Luis Henriques <luis@igalia.com>
	Tested-by: Laura Promberger <laura.promberger@cern.ch>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 2396356)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>

build fix: fuse: add more control over cache invalidation behaviour
jira SECO-478
BUGFIX: FUSE
commit-author Miklos Szeredi <mszeredi@redhat.com>
commit 0b563aa

In case of FUSE_NOTIFY_RESEND and FUSE_NOTIFY_INC_EPOCH fuse_copy_finish()
isn't called.

Fix by always calling fuse_copy_finish() after fuse_notify().  It's a no-op
if called a second time.

Fixes: 760eac7 ("fuse: Introduce a new notification type for resend pending requests")
Fixes: 2396356 ("fuse: add more control over cache invalidation behaviour")
	Cc: <stable@vger.kernel.org> # v6.9
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 0b563aa)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-511
commit-author Chen Linxuan <chenlinxuan@uniontech.com>
commit f092229
upstream-diff | There were conflicts seen while applying
this patch due to the following missing commit :-
786412a ("fuse: enable fuse-over-io-uring")

This commit add fuse connection device id to
fdinfo of opened /dev/fuse files.

Related discussions can be found at links below.

Link: https://lore.kernel.org/all/CAJfpegvEYUgEbpATpQx8NqVR33Mv-VK96C+gbTag1CEUeBqvnA@mail.gmail.com/
	Signed-off-by: Chen Linxuan <chenlinxuan@uniontech.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit f092229)
	Signed-off-by: Shreeya Patel <spatel@ciq.com>
jira SECO-518
commit-author Amir Goldstein <amir73il@gmail.com>
commit 03f275a

The re-factoring of fuse_dir_open() missed the need to invalidate
directory inode page cache with open flag FOPEN_KEEP_CACHE.

Fixes: 7de64d5 ("fuse: break up fuse_open_common()")
	Reported-by: Prince Kumar <princer@google.com>
Closes: https://lore.kernel.org/linux-fsdevel/CAEW=TRr7CYb4LtsvQPLj-zx5Y+EYBmGfM24SuzwyDoGVNoKm7w@mail.gmail.com/
	Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Link: https://lore.kernel.org/r/20250101130037.96680-1-amir73il@gmail.com
	Reviewed-by: Bernd Schubert <bernd.schubert@fastmail.fm>
	Signed-off-by: Christian Brauner <brauner@kernel.org>
(cherry picked from commit 03f275a)
	Signed-off-by: Shreeya Patel <spatel@ciq.com>
jira KERNEL-1217
commit-author Jordan Rhee <jordanrhee@google.com>
commit 6bf1457
upstream-diff RLC 10 predates the page-pool conversion and has no
  gve_free_buffer(); the freed buffer goes through
  gve_enqueue_buf_state(rx, &rx->dqo.recycled_buf_states, buf_state),
  the same form this tree's rx error path uses, which is what
  upstream's helper reduces to on non-page-pool queues.

When header split is enabled and a header-only packet is
received such as a pure TCP ACK, GVE will indicate an
RX SKB with a zero-length fragment. If this SKB is then
hairpinned and sent back out, the GVE TX path will emit
a zero-length descriptor. Hardware considers this
an illegal descriptor and stops the queue, causing a
TX timeout and interface reset.

Fix it by not adding the zero-length skb frag.

	Cc: stable@vger.kernel.org
Fixes: 5e37d82 ("gve: Add header split data path")
	Suggested-by: Praveen Kaligineedi <pkaligineedi@google.com>
Co-developed-by: Ziwei Xiao <ziweixiao@google.com>
	Signed-off-by: Ziwei Xiao <ziweixiao@google.com>
	Signed-off-by: Jordan Rhee <jordanrhee@google.com>
	Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
Link: https://patch.msgid.link/20260807224315.234152-2-hramamurthy@google.com
	Signed-off-by: Jakub Kicinski <kuba@kernel.org>

(cherry picked from commit 6bf1457)
	Signed-off-by: Shreeya Patel <spatel@ciq.com>
jira KERNEL-1217

gve_tx_qpl_buf_init() sizes the TX buffer free list as
GVE_TX_BUFS_PER_PAGE_DQO * num_entries, but the free-list links
(tx_qpl_buf_next) are s16.  GVE_TX_BUFS_PER_PAGE_DQO is PAGE_SIZE >> 11,
so on 64K-page builds (the aarch64-64k config ships CONFIG_GVE=m) a
4096-entry TX ring yields 2048 pages and 65536 buffers: entry 32767 is
seeded with a link of 32768, which reads back as -32768, and once 32768
buffers have been allocated gve_alloc_tx_qpl_buf() dereferences
tx_qpl_buf_next[-32768] and returns ids that index outside the QPL.

Clamp the count to S16_MAX, leaving an oversized QPL's tail unused
rather than mislinked.

This is not unique to this backport: upstream has the same unclamped
math at its tip. Kept as a separate commit so it can be dropped in
favor of the upstream fix once one lands;

Fixes: 07993df ("gve: Update QPL page registration logic")
Signed-off-by: Shreeya Patel <spatel@ciq.com>
cve CVE-2026-72137
commit-author Qianyu Luo <qianyuluo3@gmail.com>
commit 226f4a4

nat_keepalive_send() frees the keepalive skb whenever the IPv4 or IPv6
send helper reports an error.

That cleanup is only correct before the skb is handed to the output
path. Once ip_build_and_send_pkt() or ip6_xmit() takes ownership, the
networking stack may already have consumed the skb before returning an
error, so freeing it again is unsafe.

Handle the pre-handoff failure cases inside nat_keepalive_send_ipv4()
and nat_keepalive_send_ipv6(), where the caller still owns the skb, and
keep nat_keepalive_send() responsible only for family dispatch and the
unsupported-family cleanup path.

Fixes: f531d13 ("xfrm: support sending NAT keepalives in ESP in UDP states")
	Cc: stable@vger.kernel.org
	Reported-by: Yuan Tan <yuantan098@gmail.com>
	Reported-by: Xin Liu <bird@lzu.edu.cn>
	Signed-off-by: Qianyu Luo <qianyuluo3@gmail.com>
	Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
	Reviewed-by: Eyal Birger <eyal.birger@gmail.com>
	Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
(cherry picked from commit 226f4a4)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
cve-pre CVE-2026-53361
commit-author Kuniyuki Iwashima <kuniyu@amazon.com>
commit 001a250
upstream-diff |
    Context difference due to backported commit by redhat that
    technically comes after this change.
    3849005
    [af_unix: Don't call wait_for_unix_gc() on every sendmsg().]

We will introduce skb drop reason for AF_UNIX, then we need to
set an errno and a drop reason for each path.

Let's set an error only when it's needed in unix_dgram_sendmsg().

Then, we need not (re)set 0 to err.

	Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
	Signed-off-by: Paolo Abeni <pabeni@redhat.com>

(cherry picked from commit 001a250)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
cve CVE-2026-68376
commit-author Xin Long <lucien.xin@gmail.com>
commit e0b5252

The auth_hmacs array in struct sctp_cookie is supposed to store a complete
SCTP_AUTH_HMAC_ALGO parameter, which consists of a struct sctp_paramhdr
followed by N HMAC identifiers.

However, the array size was calculated using an extra 2 bytes instead of
sizeof(struct sctp_paramhdr), which is 4 bytes. When four HMAC identifiers
are configured, the HMAC-ALGO parameter stored in the endpoint is larger
than the auth_hmacs buffer in the cookie.

As a result, sctp_association_init() copies beyond the end of auth_hmacs
when initializing the association, corrupting the adjacent auth_chunks
field. This can lead to an invalid HMAC identifier being accepted and later
cause an out-of-bounds read in sctp_auth_get_hmac().

Fix the array size calculation by including the full SCTP parameter header
size.

Fixes: 1f48564 ("[SCTP]: Implement SCTP-AUTH internals")
	Reported-by: Yuan Tan <yuantan098@gmail.com>
	Reported-by: Xin Liu <dstsmallbird@foxmail.com>
	Reported-by: Zihan Xi <xizh2024@lzu.edu.cn>
	Reported-by: Ren Wei <enjou1224z@gmail.com>
	Signed-off-by: Xin Long <lucien.xin@gmail.com>
Link: https://patch.msgid.link/634a0de0d5de29532915e6d47c92a0cbc206e03f.1783707155.git.lucien.xin@gmail.com
	Signed-off-by: Paolo Abeni <pabeni@redhat.com>
(cherry picked from commit e0b5252)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
cve CVE-2026-31678
commit-author Yang Yang <n05ec@lzu.edu.cn>
commit 6931d21

ovs_netdev_tunnel_destroy() may run after NETDEV_UNREGISTER already
detached the device. Dropping the netdev reference in destroy can race
with concurrent readers that still observe vport->dev.

Do not release vport->dev in ovs_netdev_tunnel_destroy(). Instead, let
vport_netdev_free() drop the reference from the RCU callback, matching
the non-tunnel destroy path and avoiding additional synchronization
under RTNL.

Fixes: a9020fd ("openvswitch: Move tunnel destroy function to oppenvswitch module.")
	Reported-by: Yifan Wu <yifanwucs@gmail.com>
	Reported-by: Juefei Pu <tomapufckgml@gmail.com>
	Tested-by: Ao Zhou <n05ec@lzu.edu.cn>
Co-developed-by: Yuan Tan <tanyuan98@outlook.com>
	Signed-off-by: Yuan Tan <tanyuan98@outlook.com>
	Suggested-by: Xin Liu <bird@lzu.edu.cn>
	Signed-off-by: Yang Yang <n05ec@lzu.edu.cn>
	Reviewed-by: Ilya Maximets <i.maximets@ovn.org>
Link: https://patch.msgid.link/20260319074241.3405262-1-n05ec@lzu.edu.cn
	Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit 6931d21)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
cve CVE-2026-46165
commit-author Ilya Maximets <i.maximets@ovn.org>
commit aa69918

vports are used concurrently and protected by RCU, so netdev_put()
must happen after the RCU grace period.  So, either in an RCU call or
after the synchronize_net().  The rtnl_delete_link() must happen under
RTNL and so can't be executed in RCU context.  Calling synchronize_net()
while holding RTNL is not a good idea for performance and system
stability under load in general, so calling netdev_put() in RCU call
is the right solution here.

However,
when the device is deleted, rtnl_unlock() will call netdev_run_todo()
and block until all the references are gone.  In the current code this
means that we never reach the call_rcu() and the vport is never freed
and the reference is never released, causing a self-deadlock on device
removal.

Fix that by moving the rcu_call() before the rtnl_unlock(), so the
scheduled RCU callback will be executed when synchronize_net() is
called from the rtnl_unlock()->netdev_run_todo() while the RTNL itself
is already released.

Fixes: 6931d21 ("openvswitch: defer tunnel netdev_put to RCU release")
	Cc: stable@vger.kernel.org
	Acked-by: Eelco Chaudron <echaudro@redhat.com>
	Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
	Acked-by: Aaron Conole <aconole@redhat.com>
Link: https://patch.msgid.link/20260430233848.440994-2-i.maximets@ovn.org
	Signed-off-by: Paolo Abeni <pabeni@redhat.com>
(cherry picked from commit aa69918)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
cve CVE-2026-74597
commit-author Zhiling Zou <zhilinz@nebusec.ai>
commit f803c08

ip6ip6_err() clones an outer IPv6 ICMP error skb, pulls it to the
quoted inner IPv6 packet, and then passes the clone to icmpv6_send().
The clone still carries the outer packet's inet6_skb_parm in skb->cb.

If the outer packet had a Home Address Option, IP6CB(skb2)->dsthao
remains non-zero after skb_pull(). icmpv6_send() later calls
mip6_addr_swap(), which uses that stale dsthao offset against the quoted
inner packet. A malformed inner destination-options header can then make
the HAO lookup and address swap run past the end of the quoted packet
and corrupt skb_shared_info.

Clear skb2->cb[] before pulling the quoted inner IPv6 packet so the
reply path does not reuse metadata left by the outer IPv6 stack.

Fixes: e490d1d ("[IPV6] IP6TUNNEL: Split out generic routine in ip6ip6_err().")
	Cc: stable@vger.kernel.org
	Reported-by: Vega <vega@nebusec.ai>
	Signed-off-by: Zhiling Zou <zhilinz@nebusec.ai>
	Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/fe1a5e765fbca88d69391887f0ed26a19e3e4d39.1785736562.git.zhilinz@nebusec.ai
	Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit f803c08)
	Signed-off-by: Shreeya Patel <spatel@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit 92270d0

This function is needed by fuse_uring.c to clean ring queues,
so make it non static. Especially in non-static mode the function
name 'end_requests' should be prefixed with fuse_

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Josef Bacik <josef@toxicpanda.com>
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 92270d0)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit 867d93d

Another preparation patch, as this function will be needed by
fuse/dev.c and fuse/dev_uring.c.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Josef Bacik <josef@toxicpanda.com>
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 867d93d)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit 88be7aa

These are needed by fuse-over-io-uring.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Josef Bacik <josef@toxicpanda.com>
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 88be7aa)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit 7ccd86b
upstream-diff | Context conflict on missing fs/fuse/fuse_i.h commit
	4174867 -virtiofs: use pages instead of pointer for kernel direct IO

This change sets up FUSE operations to always have headers in
args.in_args[0], even for opcodes without an actual header.
This step prepares for a clean separation of payload from headers,
initially it is used by fuse-over-io-uring.

For opcodes without a header, we use a zero-sized struct as a
placeholder. This approach:
- Keeps things consistent across all FUSE operations
- Will help with payload alignment later
- Avoids future issues when header sizes change

Op codes that already have an op code specific header do not
need modification.
Op codes that have neither payload nor op code headers
are not modified either (FUSE_READLINK and FUSE_DESTROY).
FUSE_BATCH_FORGET already has the header in the right place,
but is not using fuse_copy_args - as -over-uring is currently
not handling forgets it does not matter for now, but header
separation will later need special attention for that op code.

Correct the struct fuse_args->in_args array max size.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 7ccd86b)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit 24fe962
upstream-diff | Context diff due to missing commit on fs/fuse/Makefile
	2b3933b - fuse: enable dynamic configuration of fuse max pages
			limit (FUSE_MAX_MAX_PAGES)
	Context difference due to future feature enabled earlier in git
	log order as well.

This adds basic support for ring SQEs (with opcode=IORING_OP_URING_CMD).
For now only FUSE_IO_URING_CMD_REGISTER is handled to register queue
entries.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Pavel Begunkov <asml.silence@gmail.com> # io_uring
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 24fe962)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit d0f9c62

Move 'struct fuse_copy_state' and fuse_copy_* functions
to fuse_dev_i.h to make it available for fuse-io-uring.
'copy_out_args()' is renamed to 'fuse_copy_out_args'.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit d0f9c62)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit f773a7c

Add special fuse-io-uring into the fuse argument
copy handler.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit f773a7c)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit 3821336

fuse-over-io-uring uses existing functions to find requests based
on their unique id - make these functions non-static.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 3821336)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit c090c8a

This adds support for fuse request completion through ring SQEs
(FUSE_URING_CMD_COMMIT_AND_FETCH handling). After committing
the ring entry it becomes available for new fuse requests.
Handling of requests through the ring (SQE/CQE handling)
is complete now.

Fuse request data are copied through the mmaped ring buffer,
there is no support for any zero copy yet.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Pavel Begunkov <asml.silence@gmail.com> # io_uring
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit c090c8a)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit 4a9bfb9

On teardown struct file_operations::uring_cmd requests
need to be completed by calling io_uring_cmd_done().
Not completing all ring entries would result in busy io-uring
tasks giving warning messages in intervals and unreleased
struct file.

Additionally the fuse connection and with that the ring can
only get released when all io-uring commands are completed.

Completion is done with ring entries that are
a) in waiting state for new fuse requests - io_uring_cmd_done
is needed

b) already in userspace - io_uring_cmd_done through teardown
is not needed, the request can just get released. If fuse server
is still active and commits such a ring entry, fuse_uring_cmd()
already checks if the connection is active and then complete the
io-uring itself with -ENOTCONN. I.e. special handling is not
needed.

This scheme is basically represented by the ring entry state
FRRS_WAIT and FRRS_USERSPACE.

Entries in state:
- FRRS_INIT: No action needed, do not contribute to
  ring->queue_refs yet
- All other states: Are currently processed by other tasks,
  async teardown is needed and it has to wait for the two
  states above. It could be also solved without an async
  teardown task, but would require additional if conditions
  in hot code paths. Also in my personal opinion the code
  looks cleaner with async teardown.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Pavel Begunkov <asml.silence@gmail.com> # io_uring
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit 4a9bfb9)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira SECO-478
RFE: FUSE_IO_URING
commit-author Bernd Schubert <bschubert@ddn.com>
commit ba74ba5

These functions are also needed by fuse-over-io-uring.

	Signed-off-by: Bernd Schubert <bschubert@ddn.com>
	Reviewed-by: Luis Henriques <luis@igalia.com>
	Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
(cherry picked from commit ba74ba5)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
@github-actions

Copy link
Copy Markdown

🔍 Upstream Linux Kernel Commit Check

  • ⚠️ PR commit 3458d0a6a89 (fuse: add more control over cache invalidation behaviour) references upstream commit
    2396356a945b which has been referenced by a Fixes: tag in the upstream
    Linux kernel:
    6648f54f345 fuse: move "epoch" from dentry.d_time to fuse_dentry.epoch (Miklos Szeredi)
    0fa8346099b fuse: invalidate readdir cache on epoch bump (Jun Wu)
    5a6baf20461 fuse: fix uninit-value in fuse_dentry_revalidate() (Luis Henriques) (CVE-2026-53311)
  • ⚠️ PR commit 86b1edba6fa (fuse: {io-uring} Handle SQEs - register commands) references upstream commit
    24fe962c86f5 which has been referenced by a Fixes: tag in the upstream
    Linux kernel:
    1dfe2a220e9 fuse: fix uring race condition for null dereference of fc (Joanne Koong)
  • ❌ PR commit 46d0d30fd38 (crypto: rng - Ensure set_ent is always present) references CVE-2026-90095 but
    upstream commit c0d36727bf39 is associated with CVE-2025-40109

  • ❗ PR commit 85914bdfae0 (crypto: rng - Override drivers/char/random in FIPS mode) references upstream commit
    8b0beca705b3 which does not exist in the upstream Linux kernel.

  • ❗ PR commit 85914bdfae0 (crypto: rng - Override drivers/char/random in FIPS mode) references upstream commit
    9de3a7339793 which does not exist in the upstream Linux kernel.

This is an automated message from the kernel commit checker workflow.

@github-actions

Copy link
Copy Markdown

✅ Validation checks completed successfully View full results: https://github.com/ctrliq/kernel-src-tree/actions/runs/39496430636

herbertx and others added 20 commits October 20, 2026 17:05
cve CVE-2025-40109
commit c0d3672 upstream.

Ensure that set_ent is always set since only drbg provides it.

Fixes: 77ebdab ("crypto: af_alg - add extra parameters for DRBG interface")
Reported-by: Yiqi Sun <sunyiqixm@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
commit-author Herbert Xu <herbert.xu@redhat.com>
commit 8b0beca705b3877e24cccdd672422c66bbd75635
commit-source https://gitlab.com/cki-project/kernel-ark

Upstream Status: RHEL only

Restore the changes to use the crypto RNG in drivers/char/random
which were reverted after 5.18.

This reverts commit 297bcb88233101e8d5062729ff3a5f989bad1c3b.

This also brings the code up-to-date with respect to centos-stream
commit 9de3a73 so that changes that
were made after the kernel-ark revert have been brought in.

Signed-off-by: Herbert Xu <herbert.xu@redhat.com>
Signed-off-by: Jeremy Allison <jallison@ciq.com>
When the kernel is booted with fips=1, the RNG exposed to userspace is
hijacked away from the CRNG and redirects to crypto_devrandom_read_iter(),
which utilizes the DRBG.

Notably, crypto_devrandom_read_iter() maintains just two global DRBG
instances _for the entire system_, and the two instances serve separate
request types: one instance for GRND_RANDOM requests (crypto_reseed_rng),
and one instance for non-GRND_RANDOM requests (crypto_default_rng). So in
essence, for requests of a single type, there is just one global RNG for
all CPUs in the entire system, which scales _very_ poorly.

To make matters worse, the temporary buffer used to ferry data between the
DRBG and userspace is woefully small at only 256 bytes, which doesn't do a
good job of maximizing throughput from the DRBG. This results in lost
performance when userspace requests >256 bytes; it is observed that DRBG
throughput improves by 70% on an i9-13900H when the buffer size is
increased to 4096 bytes (one page). Going beyond the size of one page up to
the DRBG maximum request limit of 65536 bytes produces diminishing returns
of only 3% improved throughput in comparison. And going below the size of
one page produces progressively less throughput at each power of 2: there's
a 5% loss going from 4096 bytes to 2048 bytes and a 9% loss going from 2048
bytes to 1024 bytes.

Thus, this implements per-CPU DRBG instances utilizing a page-sized buffer
for each CPU to utilize the DRBG itself more effectively. On top of that,
for non-GRND_RANDOM requests, the DRBG's operations now occur under a local
lock that disables preemption on non-PREEMPT_RT kernels, which not only
keeps each CPU's DRBG instance isolated from another, but also improves
temporal cache locality while the DRBG actively generates a new string of
random bytes.

Prefaulting one user destination page at a time is also employed to prevent
a DRBG instance from getting blocked on page faults, thereby maximizing the
use of the DRBG so that the only bottleneck is the DRBG itself.

Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
It is technically a risk to permit extrng registration by modules after
kernel init completes. Since there is only one user of the extrng interface
and it is imperative that it is the _only_ registered extrng for FIPS
compliance, restrict the extrng registration interface to only permit
registration during kernel init and only from built-in drivers.

This also eliminates the risks associated with the extrng interface itself
being designed to solely accommodate a single registration, which would
therefore permit the registered extrng to be overridden or even removed by
an unrelated module.

Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
Signed-off-by: Jonathan Maple <jmaple@ciq.com>
In FIPS mode, the DRBG must take precedence over all stdrng algorithms.
The only problem standing in the way of this is that a different stdrng
algorithm could get registered and utilized before the DRBG is registered,
and since crypto_alloc_rng() only allocates an stdrng algorithm when
there's no existing allocation, this means that it's possible for the wrong
stdrng algorithm to remain in use indefinitely.

This issue is also often impossible to observe from userspace; an RNG other
than the DRBG could be used somewhere in the kernel and userspace would be
none the wiser.

To ensure this can never happen, only allow stdrng instances from the DRBG
to be registered when running in FIPS mode. This works since the previous
commit forces the DRBG to be built into the kernel when CONFIG_CRYPTO_FIPS
is enabled, so the DRBG's presence is guaranteed when fips_enabled is true.

Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
Signed-off-by: Jonathan Maple <jmaple@ciq.com>
The 6.18.y version of "crypto: rng - Implement fast per-CPU DRBG instances"
picked up a few spots that use spaces where the ciqlts9_6 tree's version
[1] uses tabs: the lock_default_rng() comment's numbered list, the line
continuations in the unlock_local_rng() macro, and a brace in
crypto_devrandom_read_iter(). A nearby block comment was also missing the
space before its '*'. Fix them up.

[1] b0c560a

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
The per-CPU DRBG instances used to be torn down by crypto_del_default_rng()
under del_pcpu_rwsem, and the read path took that rwsem as a reader to keep
an instance from being freed out from under it. That machinery only made
sense back when the extrng override could be unregistered and the DRBG
could be built as a module.

That's no longer the case. extrng registration is now restricted to init
time from built-in drivers, and FIPS mode requires the DRBG to be built-in,
so the registered DRBG can't be unregistered or swapped out. As such, the
per-CPU instances are never torn down, and the deletion rwsem just adds a
lock to the hot read path for no reason.

Drop the deletion rwsem and crypto_del_pcpu_rng(), and stop freeing the
per-CPU instances in crypto_del_default_rng(). Since the instances are
permanent now, allocate their pages once at init time with __GFP_NOFAIL and
ditch free_pcpu_inst() along with the failure paths in crypto_rng_init();
failing to install the RNG override in FIPS mode would be catastrophic, so
the setup isn't allowed to fail anyway.

This brings the per-CPU DRBG implementation in line with the ciqlts9_6
tree's version of "crypto: rng - Implement fast per-CPU DRBG instances"
[1].

[1] b0c560a

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
The fast per-CPU DRBG path computes its initial user destination address
straight from the iov_iter. For an ITER_IOVEC iter it reads iter_iov_addr()
and iter_iov_len() of the current segment, but when the iovec leads with
one or more zero-length segments, the current segment is one of those empty
entries. iter_iov_addr() then hands back the base of an empty segment,
which is whatever userspace put there: its base can be NULL or some other
unwritable address, since a zero-length segment is never actually touched.

Right after the setup, that address is prefaulted, and on a bogus base it
fails. A failed prefault on the very first address is treated as fatal, so
the whole read bails out to -EFAULT even though there are perfectly good
non-empty segments later in the iovec. This is reachable with something as
simple as readv() on /dev/urandom where the first iovec entry is {NULL, 0}.

Fix it by advancing the iterator by zero before reading the first address.
The iovec advance loop walks past every leading empty segment and stops at
the first non-empty one, and there's guaranteed to be such a segment
because iov_iter_count() is nonzero at this point. Empty segments that crop
up mid-stream are already skipped by the per-copy advance, so this only
needs to run once during setup.

Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
While GUP pinning makes it possible to pin the page _backing_ a user
address, it *doesn't* pin the page table entry (PTE) for that mapping. This
means the pinned physical page can be separated from the user address it
was backing, and even back a _different_ user address within the same
process. PTE zapping naturally happens during memory reclaim when memory
pressure is elevated, and can even be done directly by userspace via
madvise(MADV_DONTNEED).

Since the optimized per-CPU DRBG loop assumes copy_to_user_nofault() will
always succeed on a GUP-pinned page, it immediately bails out when the
nofault copy actually *does* fail for the reasons described above. This
results in either fewer than requested random bytes copied or, more
seriously, a spurious EFAULT returned to userspace when no random bytes
were copied.

As it turns out, there's no way to pin a PTE. That means it's not possible
to guarantee a 100% success rate for the copy_to_user_nofault() attempt.

Fix this by handling copy_to_user_nofault() errors correctly with a fall
back to a faultable copy attempt outside of the RNG lock. In order to
guarantee forward progress for the caller, an on-stack bounce buffer is
used to copy up to 256 bytes of the generated random bytes whenever this
happens rather than discarding the whole thing.

There's no need to use GUP pinning anymore since there's no use for having
a page pinned without pinning a PTE to go along with that page, hence the
page pinning is eliminated which saves a software page table walk that was
performed for _at least_ every destination page.

Reported-by: Kun Yi <kunyi@google.com>
Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
This reverts commit ef467f3.

This helper is no longer used by the FIPS-mode RNG, which was the
motivation for reintroducing it. Remove it.

Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
commit-author Sebastian Andrzej Siewior <bigeasy@linutronix.de>
commit 7ff495e

local_lock.h is the main header for the local_lock_t type and provides
wrappers around internal functions prefixed with __ in
local_lock_internal.h.

Move the this_cpu_ptr() dereference of the variable from the internal to
the main header. Since it is all macro implemented, this_cpu_ptr() will
still happen within the preempt/ IRQ disabled section.

This frees the internal implementation (__) to be used on local_lock_t
types which are local variables and must not be accessed via
this_cpu_ptr().

	Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Acked-by: Waiman Long <longman@redhat.com>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/all/20250630075138.3448715-2-bigeasy@linutronix.de

(cherry picked from commit 7ff495e)
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
local_unlock() is supposed to take a percpu pointer, which it then offsets
for the current CPU. The problem is that the per-CPU DRBG code passes
local_unlock() a pointer that has *already been offset for the current
CPU*, so the percpu offset gets added twice. `pcri` is the percpu pointer
and `cri` is the offset `pcri` pointer for the current CPU; passing `cri`
to local_unlock() results in the current CPU's offset getting added again
and thus the resulting pointer is garbage.

This went unnoticed at runtime because local_unlock() only dereferences
that pointer on PREEMPT_RT or CONFIG_DEBUG_LOCK_ALLOC=y kernels. The
pointer is never actually used otherwise.

This also went unnoticed at compile time because, for x86_64, __percpu only
expands to something on GCC 14+; __percpu is otherwise an empty macro. So
there's no pointer type mismatch detected at compile time on older GCC
versions. On GCC 14+, the following compile error occurs:

  ../crypto/rng.c: In function 'lock_default_rng':
  ../include/linux/percpu-defs.h:221:45: error: initialization from pointer to non-enclosed address space

Fix it by using __local_unlock() instead, which eliminates the duplicate
per-CPU offset addition. While using local_unlock() with `pcri` also works,
using `cri` with __local_unlock() is leaner because it doesn't need to redo
the offset addition, saving an instruction on kernels that actually use the
pointer.

Signed-off-by: Sultan Alsawaf <sultan@ciq.com>
Add CONFIG_CRYPTO_FIPS_CUSTOM_VERSION=y,

CONFIG_CRYPTO_FIPS_VERSION="ciq.6.12.20260826"

Requested by lab.

Signed-off-by: Jeremy Allison <jallison@ciq.com>
Unset CRYPTO_JITTERENTROPY_MEMSIZE_2, set CRYPTO_JITTERENTROPY_MEMSIZE_128.

CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=512
CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=256

Requested by lab.

Signed-off-by: Jeremy Allison <jallison@ciq.com>
…at an externally provided private key is within the valid range 1 <= key <= q-1.

Requested by lab.

Signed-off-by: Jeremy Allison <jallison@ciq.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cve CVE-2026-98260
commit-author Hyunwoo Kim <imv4bel@gmail.com>
commit acb03d3
commit-source-sha 75aa08b
commit-source linux-6.18.y
upstream-diff |
    Context due to missing unrelated change:
    af7bb0d ("exec: fix the racy usage of fs_struct->in_exec")

commit acb03d3 upstream.

A per-thread CPU timer holds a reference to the PID of the thread it is
attached to and, while it is armed, its node is queued in that thread's
posix_cputimers. The task is looked up by that PID.

When a non-leader thread exec()s, de_thread() changes which task owns
that PID. pid_task(timer->it.cpu.pid, PIDTYPE_PID) then returns NULL,
but the node is still queued on tsk, which is alive. timer_lock_sighand()
takes a failed lookup to mean that the node is already dequeued, so it
has nothing to undo.

begin_new_exec() calls posix_cpu_timers_exit(me) right after
exec_task_namespaces() and that removes the leftover node, so the state
normally stays invisible. But bprm->point_of_no_return is set before
de_thread(), so if unshare_files(), set_mm_exe_file(), exec_mmap() or
exec_task_namespaces() fails, the task dies before it gets there.
exit_itimers() then frees the k_itimer while its node is still queued,
and reaping tsk later erases that freed node from the rbtree.

In short:

      the non-leader thread B           the parent

  timer_create(CLOCK_THREAD_CPUTIME_ID)
  timer_settime()
    arm_timer()            // the node is queued on B
  execve()
    de_thread(B)
      exchange_tids(B, leader)  // B's PID now belongs to the leader
      release_task(leader)
        __exit_signal(leader)
          posix_cpu_timers_exit(leader)  // cleans leader's queue, not B's
          __unhash_process(leader)  // that PID has no task anymore
    exec_mmap()
      mmap_read_lock_killable(old_mm)
                                kill(B, SIGKILL)
      // -EINTR
  get_signal()
    do_exit()
      exit_itimers()
        posix_timer_delete()
          posix_cpu_timer_del()
        posix_timer_unhash_and_free()  // freed while still queued
                                wait4()
                                  release_task(B)
                                    posix_cpu_timers_exit(B)
                                      cleanup_timerqueue()
                                        timerqueue_del()  // use-after-free

Move the POSIX timer cleanup right after de_thread() before any of the
later failure conditions brings the task into do_exit().

[ tglx: Move the cleanup right after de_thread() ]

Fixes: 55e8c8e ("posix-cpu-timers: Store a reference to a pid not a task")
	Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
	Signed-off-by: Thomas Gleixner <tglx@kernel.org>
	Tested-by: Kijo Park <red993688@gmail.com>
	Reviewed-by: Oleg Nesterov <oleg@redhat.com>
	Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
	Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/ao7Q8miiuLAPVnWv@v4bel
Link: https://patch.msgid.link/20260911090541.627712075@kernel.org
	Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 75aa08b)
Signed-off-by: Jonathan Maple <jmaple@ciq.com>
cve-pre CVE-2026-98256
commit-author Frederic Weisbecker <frederic@kernel.org>
commit 63dffec

A sigqueue belonging to a posix timer, which target is not a specific
thread but a whole thread group, is preferrably targeted to the current
task if it is part of that thread group.

However nothing prevents a posix timer event from queueing such a
sigqueue from a reaped yet running task. The interruptible code space
between exit_notify() and the final call to schedule() is enough for
posix_timer_fn() hrtimer to fire.

If that happens while the current task is part of the thread group
target, it is proposed to handle it but since its sighand pointer may
have been cleared already, the sigqueue is dropped even if there are
other tasks running within the group that could handle it.

As a result posix timers with thread group wide target may miss signals
when some of their threads are exiting.

Fix this with verifying that the current task hasn't been through
exit_notify() before proposing it as a preferred target so as to ensure
that its sighand is still here and stable.

complete_signal() might still reconsider the choice and find a better
target within the group if current has passed retarget_shared_pending()
already.

Fixes: bcb7ee7 ("posix-timers: Prefer delivery of signals to the current thread")
	Reported-by: Anthony Mallet <anthony.mallet@laas.fr>
	Suggested-by: Oleg Nesterov <oleg@redhat.com>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Acked-by: Oleg Nesterov <oleg@redhat.com>
	Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/all/20241122234811.60455-1-frederic@kernel.org
Closes: https://lore.kernel.org/all/26411.57288.238690.681680@gargle.gargle.HOWL
(cherry picked from commit 63dffec)
Signed-off-by: Jonathan Maple <jmaple@ciq.com>
cve CVE-2026-98256
commit-author Thomas Gleixner <tglx@kernel.org>
commit d2710c8
commit-source-sha 621c365
commit-source linux-6.18.y
upstream-diff |
    Conflict in exit_signals() due to missing commit:
    2b1642b ("signal: Move MMCID exit out of sighand lock")
    however this is part of a much larger rewrite of sched/mmcid
    https://lore.kernel.org/all/20251119172549.706439391@linutronix.de/
    Too invasive to backport.  Keeping sched_mm_cid_exit_signals(tsk)
    at the top of the new scoped_guard() prior to
    tsk->flags |= PF_EXITING keep the original ordering of both the now
    defunct early-exit path and the locked path.

[ Upstream commit d2710c8 ]

Hyunwoo debugged the following KASAN UAF splat:

  BUG: KASAN: slab-use-after-free in __send_signal_locked+0xb27/0xba0
  Write of size 8 at addr ffff888007ed80c8 by task poc/79
  ...
  Call Trace:
   __send_signal_locked+0xb27/0xba0
   do_send_sig_info+0xa7/0x160
   do_send_specific+0x76/0xa0
   __x64_sys_tgkill+0x193/0x270
  ...
  Allocated by task 80:
   do_timer_create+0x1a4/0x1030
   __x64_sys_timer_create+0x145/0x190
  ...
  Freed by task 12:
   kmem_cache_free_bulk+0x1f8/0x4a0
   kvfree_rcu_bulk+0x14f/0x1c0
   kfree_rcu_work+0x128/0x1a0
  ...
  Last potentially related work creation:
   kvfree_call_rcu+0x39/0x390
   __flush_itimer_signals+0x211/0x320
   flush_itimer_signals+0x47/0x90
   begin_new_exec+0xa6b/0x28c0

It turned out that this happens with a non-leader exec() as Hyunwoo
explained:

de_thread() calls exchange_tids() before release_task(leader), so the
struct pid held by a SIGEV_THREAD_ID timer created against the leader's tid
now points to the thread which called execve(). pid_task() returns that
thread and lock_task_sighand() on it succeeds.

If the timer signal is blocked, its sigqueue stays queued on the leader's
task::pending. The next expiry of that timer can then run while
release_task() flushes the queue.

posixtimer_send_sigqueue() checks whether the sigqueue is already queued
with a plain list_empty(), which only reads list_head::next.
list_del_init() is not atomic and INIT_LIST_HEAD() stores list_head::next
before list_head::prev, so the check can pass in between. list_add_tail()
queues the entry on the task::pending of the live thread, and the
list_head::prev store from the flush then overwrites the list_head::prev
link that list_add_tail() has just set.

__flush_itimer_signals() does not undo that either. With list_head::prev
pointing at the entry itself, its list_del_init() only stores the same
values again, so the entry is not removed from the list. It is still there
after the last reference is dropped and the timer is freed by RCU, and the
list_add_tail() of a later tgkill() follows that list_head::prev into the
freed timer.

This problem surfaced with the recent commit which moved the sigqueue flush
out of the sighand lock held region.

Hyonwoo proposed to fix this by using list_del_init_careful(), but that
just papers over the problem. After some disucssions and various attempts
to solve it, Eric pointed out that there is no reason to flush
task::pending late in release_task() and it should be done in
exit_signals() already.

As nothing can collect and deliver signals which are queued in a dying
task's pending queue, there is no reason to delay it further.

But it has to be ensured that no signals can be queued into it after that
point. exit_signals() sets PF_EXITING in task::flags, which can be used as
an indicator for this.

Cure it by:

  - Preventing signal queueing for task private signals (PIDTYPE_PID) when
    the task has PF_EXITING set in __send_signal_locked() and in
    posixtimer_send_sigqueue().

  - Protecting the unlocked setting of PF_EXITING in exit_signals() for the
    task group empty and the group exit case with sighand lock

  - Flushing task::pending signals right there.

    Optimize that by moving the whole pending list to an on-stack list head
    under sighand lock and free the signals without the lock held.

There has been quite some discussion about the lockless flush and the
non-leader exec case on weakly ordered systems. The problem is that a third
party which tries to send a posix timer signal relies on the PID lookup to
find the target task and that lookup might result in the new leader when
the signal was originaly directed to the old leader. In case that the
signal was queued on the old leader then the lockless flush raised a
concern over the following situation:

   old_leader		new_leader              third party

A: flush_list()	// list_del_init() stores to sigqueue

   LOCK (tasklist)
   old_leader->exit_state = EXIT_ZOMBIE;
B: UNLOCK (tasklist)

C:			LOCK (tasklist)
			if (old_leader->exit_state)
			   transfer_tids()
D:			     store PID
						posix_timer_send_sigqueue()
						// Observes #D so t = new_leader
E:						t = get_target()

F:						LOCK (sighand)

G:						   if (list_empty(sigqueue))
							list_add(sigqueue)

The concern was that the third party might observe #D but not observe #A
and therefore would proceed to #G while the list_del() stores (#A) in
flush_list() are not visible yet, which could result in list corruption.

That would be possible if looking at it solely from a RELEASE+ACQUIRE
ordering point of view, but B-C is a UNLOCK+LOCK hand-over, which is not
the same as RELEASE+ACQUIRE:

  RELEASE+ACQUIRE: RCpc,  only the CPUs involved agree on the ordering
  UNLOCK+LOCK:     RCtso, the hand-over is store-ordering

As B-C is UNLOCK+LOCK, which is RCtso and that does impose store order,
A stores must happen before the D store.

Combine with E-F, which has a data dependency from the LOAD to the LOCK and
thereby constraints later LOADs, those sigqueue loads in G that come after
F must in fact observe the A stores.

Fixes: fb3bbcf ("exit: change the release_task() paths to call flush_sigqueue() lockless")
	Reported-by: Hyunwoo Kim <imv4bel@gmail.com>
	Debugged-by: Hyunwoo Kim <imv4bel@gmail.com>
	Suggested-by: "Eric W. Biederman" <ebiederm@xmission.com>
	Signed-off-by: Thomas Gleixner <tglx@kernel.org>
	Tested-by: Kijo Park <red993688@gmail.com>
	Reviewed-by: Oleg Nesterov <oleg@redhat.com>
	Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
	Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260911090541.572536604@kernel.org
Closes: https://patch.msgid.link/aok1rdkBgZsynHZB@v4bel
	Signed-off-by: Sasha Levin <sashal@kernel.org>
	Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 621c365)
Signed-off-by: Jonathan Maple <jmaple@ciq.com>
Simplifies the workflow to use the reusable workflow defined in main
branch. This reduces duplication and makes the workflow easier to
maintain across multiple branches.

The workflow was renamed because it now includes validation over
and above just checking for upstream fixes

Signed-off-by: Jonathan Maple <jmaple@ciq.com>
cve CVE-2026-99999
commit-author Michael S. Tsirkin <mst@redhat.com>
commit 6785011

If a packet with bad checksum metadata gets into the ipv4 stack,
skb_checksum_help can corrupt the network header and cause a bunch of
mischief.

This was discovered and reported by Paulos, and has been reporoduced
by others independently since.

We really shouldn't allow such packets in, but as a defence
in depth measure, let's also check before we complete the checksum.

A more complete validation at input is forthcoming, but needs more work.

	Cc: stable@vger.kernel.org
Fixes: f43798c ("tun: Allow GSO using virtio_net_hdr")
Fixes: bfd5f4a ("packet: Add GSO/csum offload support.")
	Reported-by: Paulos Yibelo <habte.yibelo@gmail.com>
Closes: https://lore.kernel.org/netdev/20260922030310.8684-2-habte.yibelo@gmail.com/
	Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
	Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/0a012b4923e189c4c593ef4f471e5ff0edbe9030.1791412497.git.mst@redhat.com
	Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit 6785011)
	Signed-off-by: Brett Mastbergen <bmastbergen@ciq.com>
@PlaidCat
PlaidCat force-pushed the jmaple_rlc-10/6.12.0-211.66.1.el10_2 branch from 703286a to f5d1991 Compare October 20, 2026 21:06
@github-actions

Copy link
Copy Markdown

🤖 Validation Checks In Progress Workflow run: https://github.com/ctrliq/kernel-src-tree/actions/runs/39499254551

@github-actions

Copy link
Copy Markdown

🔍 Upstream Linux Kernel Commit Check

  • ⚠️ PR commit 3458d0a6a89 (fuse: add more control over cache invalidation behaviour) references upstream commit
    2396356a945b which has been referenced by a Fixes: tag in the upstream
    Linux kernel:
    6648f54f345 fuse: move "epoch" from dentry.d_time to fuse_dentry.epoch (Miklos Szeredi)
    0fa8346099b fuse: invalidate readdir cache on epoch bump (Jun Wu)
    5a6baf20461 fuse: fix uninit-value in fuse_dentry_revalidate() (Luis Henriques) (CVE-2026-53311)
  • ⚠️ PR commit 86b1edba6fa (fuse: {io-uring} Handle SQEs - register commands) references upstream commit
    24fe962c86f5 which has been referenced by a Fixes: tag in the upstream
    Linux kernel:
    1dfe2a220e9 fuse: fix uring race condition for null dereference of fc (Joanne Koong)
  • ❗ PR commit 79c8e8063d5 (crypto: rng - Override drivers/char/random in FIPS mode) references upstream commit
    8b0beca705b3 which does not exist in the upstream Linux kernel.

  • ❗ PR commit 79c8e8063d5 (crypto: rng - Override drivers/char/random in FIPS mode) references upstream commit
    9de3a7339793 which does not exist in the upstream Linux kernel.

This is an automated message from the kernel commit checker workflow.

@github-actions

Copy link
Copy Markdown

❌ Diffofdiffs: 30 of 65 backports differ from upstream, 1 couldn't be compared

View the diffofdiffs report.

Open to anyone signed in to GitHub. Report expires 2027-01-18 21:06 UTC.

# Subject Backport Upstream
1 fuse: add more control over cache invalidation behaviour 3458d0a6a89e 2396356a945b
2 fs: fuse: add dev id to /dev/fuse fdinfo 2c5df5aa2073 f09222980d77
3 gve: fix zero-length skb frag with header-split ce325706e290 6bf14575c655
4 xfrm: nat_keepalive: avoid double free on send error 4c6ec58cb89c 226f4a490d1a
5 af_unix: Set error only when needed in unix_dgram_sendmsg(). 2a21b5638171 001a25088c35
6 fuse: rename to fuse_dev_end_requests and make non-static fc8bf3e52014 92270d076115
7 fuse: make args->in_args[0] to be always the header 61204e895912 7ccd86ba3a48
8 fuse: {io-uring} Handle SQEs - register commands 86b1edba6fab 24fe962c86f5
9 fuse: {io-uring} Make fuse_dev_queue_{interrupt,forget} non-static 75269c0ec243 ba74ba571189
10 fuse: block request allocation until io-uring init is complete 3e6422c3af4e 3393ff964e0f
11 fuse: enable fuse-over-io-uring 943184255e04 786412a73e7e
12 fuse: missing copy_finish in fuse-over-io-uring argument copies d91d97d24dd8 6e0d7f7f4a43
13 fuse-uring: fix race between registration and connection abortion fa659e2d0257 952b5d36f6a2
14 fuse-uring: check connection abort during ring creation e478b47157ec c146284c4355
15 fuse-uring: fix moving cancelled entry to ent_in_userspace list 360e9d210071 198f45eeb9f7
16 fuse-uring: end fuse_req on io-uring cancel task work 66f3c8bc7872 bea4fe98204b
17 fuse-uring: Avoid use-after-free in fuse_uring_async_stop_queues b944db99997a d351da750669
18 fuse-uring: Avoid queue->stopped races and set/read that value under lock f9fee86070bc b70a3aca1693
19 fuse-uring: make a fuse_req on SQE commit only findable after memcpy 24ebc840b3c5 1efd3d474fc0
20 fuse: fix io-uring background queue dispatch on request completion af1c671f6700 31da059891bd
21 fuse: fix missing barrier when checking io-uring readiness 212eb5c7c74b edb310bc27f0
22 fuse: publish io-uring queues with release semantics 4b6ef9b53e50 42df916e5a5f
23 fuse: copy request headers via a stack buffer for io-uring 8f11d66c60b6 fd10f40af314
24 fuse: Fix the condition to enable over-io-uring 4129d33daf1d 1f59015e9581
25 selftests: filesystems: Add functional test for the abort file in fusectl e015641ecdf2 1a7b13781b0d
26 selftests/fuse: add ACL_DONT_CACHE regression test 98830cc0771f 9acb102522b9
27 mpls: add seqcount to protect the platform_label{,s} pair 1a9bfa76ca12 629ec78ef860
28 exec: Cleanup POSIX timers right after de_thread() eb7227dd1ca4 acb03d388181
29 signal: Prevent exec() race b13bcdab92f3 d2710c8d938a
30 ipv4: validate checksum_start before completing checksum f5d19914a94c 6785011f8b16

Warning

1 backport couldn't be compared. Details are in the workflow run log.

1. crypto: rng - Override drivers/char/random in FIPS mode

Backport: 79c8e8063d51 · Upstream: 8b0beca705b3

Show error
Cannot find upstream commit 8b0beca705b3877e24cccdd672422c66bbd75635 in ctrliq/kernel-src-tree: gh failed (exit 1):
gh: No commit found for SHA: 8b0beca705b3877e24cccdd672422c66bbd75635 (HTTP 422)

33 additional commits have no upstream reference and were not compared.

Checked PR revision f5d19914a94c against base 263c8bf7f337.

@github-actions

Copy link
Copy Markdown

✅ Validation checks completed successfully View full results: https://github.com/ctrliq/kernel-src-tree/actions/runs/39499254551

@kerneltoast kerneltoast left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The validate failure is just because an upstream commit SHA is from kernel-ark instead of upstream, for a commit that is custom and has no upstream counterpart.

🥌

@PlaidCat
PlaidCat merged commit f5d1991 into rlc-10/6.12.0-211.66.1.el10_2 Oct 21, 2026
6 of 7 checks passed
@PlaidCat
PlaidCat deleted the jmaple_rlc-10/6.12.0-211.66.1.el10_2 branch October 21, 2026 14:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

8 participants