Skip to content

[RLC-10] Rebase Custom Changes to rlc-10/6.12.0-211.65.1.el10_2 - #1701

Merged
PlaidCat merged 97 commits into
rlc-10/6.12.0-211.65.1.el10_2from
jmaple_rlc-10/6.12.0-211.65.1.el10_2
Oct 15, 2026
Merged

PlaidCat merged 97 commits into
rlc-10/6.12.0-211.65.1.el10_2from
jmaple_rlc-10/6.12.0-211.65.1.el10_2

Conversation

@PlaidCat

Copy link
Copy Markdown
Collaborator

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

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

  • Rolling Release Rebase Process
  • Create rlc-10/6.12.0-211.65.1.el10_2 branch from rocky10_2
  • Cherry-pick all code from previous branch rlc-10/6.12.0-211.60.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.60.1.el10_2'
Already on 'jmaple_rlc-10/6.12.0-211.65.1.el10_2'
[rolling release update] Rolling Product:  rlc-10
[rolling release update] Checking out branch:  rlc-10/6.12.0-211.60.1.el10_2
[rolling release update] Gathering all the RESF kernel Tags
[rolling release update] Found 32 RESF kernel tags
[rolling release update] Checking out branch:  rocky10_2
[rolling release update] Gathering all the RESF kernel Tags
[rolling release update] Found 36 RESF kernel tags
[rolling release update] Common tag sha:  b'58c29b94a3fd7'
"58c29b94a3fd74df681271bd26166f1503f51247 Rebuild rocky10_2 with kernel-6.12.0-211.60.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 58c29b94a3fd7..HEAD
[rolling release update] Number of commits to check:  221
[rolling release update] Checking modifications of shas
[rolling release update] Checked 22 of 221 commits
[rolling release update] Checked commit b'8b72c26d70aeefc6909ac74139f4600cf751eb9a' touched 1 FIPS protected files
  - b'crypto/'
[rolling release update] Checked 44 of 221 commits
[rolling release update] Checked 66 of 221 commits
[rolling release update] Checked commit b'2a80cb023dfd66b78d5d387b5c1cf26c3d80bc8f' touched 1 FIPS protected files
  - b'crypto/'
[rolling release update] Checked 88 of 221 commits
[rolling release update] Checked 110 of 221 commits
[rolling release update] Checked 132 of 221 commits
[rolling release update] Checked 154 of 221 commits
[rolling release update] Checked 176 of 221 commits
[rolling release update] Checked 198 of 221 commits
[rolling release update] Checked commit b'fab9392bfdd748d8a1c4ea5af812811664176c71' touched 1 FIPS protected files
  - b'crypto/'
[rolling release update] Checked commit b'f2297a2d1651598fd5031a6e29b71f89e991f143' touched 1 FIPS protected files
  - b'drivers/crypto/'
[rolling release update] Checked 220 of 221 commits
[rolling release update] 4 of 221 commits have FIPS protected changes
[rolling release update] Checking out old rolling branch:  rlc-10/6.12.0-211.60.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 58c29b94a3fd7..HEAD
WARNING: - already in upstream_commits
[rolling release update] Last RESF tag sha:  b'58c29b94a3fd7'
[rolling release update] Total commits in old branch: 109
[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.65.1.el10_2
[rolling release update] Creating new branch: rlc-10/6.12.0-211.65.1.el10_2
[rolling release update] Creating new branch for PR:  jmaple_rlc-10/6.12.0-211.65.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: 220
[rolling release update] Checking if any of the commits from the old rolling release are already present in the new base branch
- Old commit a59eec6eebe8 backported upstream bde023808364
  Already in new base as 6df745c2e9ec: futex: Fix race on the initial mm->futex.phash.ref allocation
- Old commit dc9b7132d564 backported upstream c9c9b37f8c55
  Already in new base as 070e031df816: netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst
- Old commit 319e67d6815b backported upstream a2f19184014f
  Already in new base as c0c98fd17c85: gve: Enable reading max ring size from the device in DQO-QPL mode
- Old commit 344dc070df30 backported upstream 07993df56091
  Already in new base as 7cf8599a75d7: gve: Update QPL page registration logic
- Old commit 70e86a0d2353 backported upstream fb868db5f4bc
  Already in new base as 4a0bd827e9db: gve: fix incorrect buffer cleanup in gve_tx_clean_pending_packets for QPL
- Old commit 7051cc79db69 backported upstream 3d970eda0034
  Already in new base as ced34ac27cac: gve: defer interrupt enabling until NAPI registration
- Old commit 1ad486c46606 backported upstream 75a9a46d67f4
  Already in new base as 61f78fddbb65: gve: prevent ethtool ops after shutdown
- Old commit c06fca3ddaa0 backported upstream de63ac44a527
  Already in new base as 3e99dd45ce74: gve: fix XDP allocation path in edge cases
- Old commit 8c615bd628c2 backported upstream 6321f5fb70d5
  Already in new base as 014162f40e84: gve: clean XDP queues in gve_tx_stop_ring_gqi
- Old commit 0466bb5102c4 backported upstream 93c68f1275f9
  Already in new base as d888981ff36d: gve: move DQO rx buffer management related code to a new file
- Old commit 2b5a9d475309 backported upstream 70543358fa08
  Already in new base as 7ece612f43a4: KVM: arm64: Reassign nested_mmus array behind mmu_lock
[rolling release update] Found 11 duplicate commits to remove
[rolling release update] Removing duplicate commits:
  - a59eec6eebe8c960aa599e026ff534c0f6a00ff4 futex: Fix race on the initial mm->futex.phash.ref allocation
  - dc9b7132d5640ed252245e3faf46e0f9c50613c6 netfilter: nf_queue: pin bridge device while NFQUEUE holds fake dst
  - 319e67d6815b9afd61b47551e5fe1c5ffe7dda6e gve: Enable reading max ring size from the device in DQO-QPL mode
  - 344dc070df30a9ebb98bd27df3e66a34a64a8467 gve: Update QPL page registration logic
  - 70e86a0d23539207870103ce1facd0fe03ffa27b gve: fix incorrect buffer cleanup in gve_tx_clean_pending_packets for QPL
  - 7051cc79db6978e655354bbee9b4cca333aa59b9 gve: defer interrupt enabling until NAPI registration
  - 1ad486c466060d3f2888544227cbec10d0f4b7ac gve: prevent ethtool ops after shutdown
  - c06fca3ddaa0d883b6beb25afa78d414a0da7539 gve: fix XDP allocation path in edge cases
  - 8c615bd628c288b40b8b9ac75b48bd91c97115a4 gve: clean XDP queues in gve_tx_stop_ring_gqi
  - 0466bb5102c4d04fc705b7a32e668ecc5b890d56 gve: move DQO rx buffer management related code to a new file
  - 2b5a9d4753096aef599601720176860bb7839658 KVM: arm64: Reassign nested_mmus array behind mmu_lock
[rolling release update] Applying 98 remaining commits to the new branch
  [1/98] bdb860437851f github actions: Add kernelCI for rlc-10
  [2/98] 6464ff9070353 github actions: Use trigger for kernelCI
  [3/98] c888799b0a8eb github actions: Pin Checkout action to v6.0.2
  [4/98] 788f080d6fafd github actions: set make to `nproc` rather than hardcoded
  [5/98] c44c39cccc3a4 tools: hv: Enable debug logs for hv_kvp_daemon
  [6/98] 7a7c633b4f64a dcache: export shrink_dentry_list() and add new helper d_dispose_if_unused()
  [7/98] f1c1b8fb24448 fuse: don't truncate cached, mutated symlink
  [8/98] 4da64ef1df64a fuse: add more control over cache invalidation behaviour
  [9/98] e3806bd2023d4 fuse: fix possibly missing fuse_copy_finish() call in fuse_notify()
  [10/98] 959d5b74b2c11 fs: fuse: add dev id to /dev/fuse fdinfo
  [11/98] ffb2eb7f7efe2 fuse: respect FOPEN_KEEP_CACHE on opendir
  [12/98] c7b9b06f960c5 gve: fix zero-length skb frag with header-split
  [13/98] 4c5054fa617f0 gve: bound DQO-QPL TX buffer count to the s16 free-list range
  [14/98] f56603008a990 xfrm: nat_keepalive: avoid double free on send error
  [15/98] f0bb223eaef6d af_unix: Set error only when needed in unix_dgram_sendmsg().
  [16/98] 7572a3bee5e99 sctp: fix auth_hmacs array size in struct sctp_cookie
  [17/98] 98d14eb1fd284 openvswitch: defer tunnel netdev_put to RCU release
  [18/98] ec891a31a03aa openvswitch: vport: fix self-deadlock on release of tunnel ports
  [19/98] 4f24e65e20f62 ip6_tunnel: clear skb2->cb[] in ip6ip6_err()
  [20/98] 84423ec885900 fuse: rename to fuse_dev_end_requests and make non-static
  [21/98] d19f8aa4d4420 fuse: Move fuse_get_dev to header file
  [22/98] 04586d0ea24cd fuse: Move request bits
  [23/98] de1050feb8a22 fuse: make args->in_args[0] to be always the header
  [24/98] 1b2a2ceb661aa fuse: {io-uring} Handle SQEs - register commands
  [25/98] 6b9d9d09b1ad1 fuse: Make fuse_copy non static
  [26/98] 18f68ae2dd5e3 fuse: Add fuse-io-uring handling into fuse_copy
  [27/98] 4e15c0e1822a7 fuse: {io-uring} Make hash-list req unique finding functions non-static
  [28/98] c1e3d19dd12bf fuse: Add io-uring sqe commit and fetch support
  [29/98] c759136d7f238 fuse: {io-uring} Handle teardown of ring entries
  [30/98] cf2dd20050d0a fuse: {io-uring} Make fuse_dev_queue_{interrupt,forget} non-static
  [31/98] 81f52fc024663 fuse: Allow to queue fg requests through io-uring
  [32/98] d9eae35c7ffcf fuse: Allow to queue bg requests through io-uring
  [33/98] 2a25e9d8b7068 fuse: {io-uring} Prevent mount point hang on fuse-server termination
  [34/98] 85fb71e8edb8b fuse: block request allocation until io-uring init is complete
  [35/98] af4ac4b17a49f fuse: enable fuse-over-io-uring
  [36/98] 227203d4b7265 fuse: prevent disabling io-uring on active connections
  [37/98] c1a47ca78c5dd fuse: fix uring race condition for null dereference of fc
  [38/98] a694ab6e8f793 fuse: fix possible deadlock if rings are never initialized
  [39/98] 598e40de7cada fuse: removed unused function fuse_uring_create() from header
  [40/98] 30816748942f9 fuse: {io-uring} Fix a possible req cancellation race
  [41/98] 9b408823c305c fuse: remove unneeded atomic set in uring creation
  [42/98] 201a893cf6984 fuse: missing copy_finish in fuse-over-io-uring argument copies
  [43/98] 62ba8f3ac2c9c fuse: fix io-uring list corruption for terminated non-committed requests
  [44/98] 55c68f6aea3f0 fuse-uring: fix EFAULT clobber in fuse_uring_commit
  [45/98] ede455f3cf46d fuse-uring: fix data races on ring->ready
  [46/98] e217bea6390d7 fuse-uring: fix race between registration and connection abortion
  [47/98] 9e96b7a48cef2 fuse-uring: check connection abort during ring creation
  [48/98] e4414201be499 fuse-uring: fix moving cancelled entry to ent_in_userspace list
  [49/98] 3db2b34586cd2 fuse-uring: end fuse_req on io-uring cancel task work
  [50/98] 5a17c6fc1dc42 fuse-uring: Avoid use-after-free in fuse_uring_async_stop_queues
  [51/98] b8dcf9ea04c3b fuse-uring: Avoid queue->stopped races and set/read that value under lock
  [52/98] 951ea2737acd0 fuse-uring: make a fuse_req on SQE commit only findable after memcpy
  [53/98] fd918c926b0cf fuse-uring: remove request-less entries from ent_w_req_queue to fix NULL deref
  [54/98] 6869f4cb1c84a fuse: fix io-uring background queue dispatch on request completion
  [55/98] f0cfcd56f77a1 fuse-uring: clear ent->fuse_req in commit_fetch error path
  [56/98] 09a80955c9bdf fuse: fix missing barrier when checking io-uring readiness
  [57/98] 35016c170c359 fuse: publish io-uring queues with release semantics
  [58/98] 19e2efa54774a fuse: copy request headers via a stack buffer for io-uring
  [59/98] 5184a06a76bf3 fuse: Fix the condition to enable over-io-uring
  [60/98] fe7654f05b546 configs: enable CONFIG_FUSE_IO_URING=y on x86_64 and aarch64
  [61/98] 938971d477213 selftests: filesystems: Add functional test for the abort file in fusectl
  [62/98] 1134961adc7e8 selftests/fuse: adapt fuse_mnt to libfuse3 API
  [63/98] a964b836ffe6e selftests/fuse: add ACL_DONT_CACHE regression test
  [64/98] 1cc25ae4aeebd selftests/fuse: add FUSE io-uring integration test
  [65/98] 8dbd9ee473b6d sctp: stream: fully roll back denied add-stream state
  [66/98] 71b3f81d7e435 mpls: add seqcount to protect the platform_label{,s} pair
  [67/98] 9a60c2dbfe1d9 crypto: ecdh - implement FIPS PCT
  [68/98] fda784ab5679d crypto: essiv - Zeroize keys on exit in essiv_aead_setkey()
  [69/98] adb3374955a21 crypto: drbg - Align buffers to at least a cache line
  [70/98] 7da58ba443806 mm/gup: introduce pin_user_pages_fast_only()
  [71/98] 1e284aaffb731 crypto: rng - Convert crypto_default_rng_refcnt into an unsigned int
  [72/98] dd10669a97fcc crypto: rng - Fix priority inversions due to mutex locks
  [73/98] 55daf43f4a4aa crypto: sha1 - Add FIPS known answer test for lib/crypto path
  [74/98] 5cbf39d5e7314 crypto: sha256 - Add FIPS known answer test for lib/crypto path
  [75/98] e863359a56cf3 crypto: testmgr - block Crypto API xxhash64 in FIPS mode
[rolling release update] ERROR: Failed to cherry-pick commit e863359a56cf3f4a050b44f31ae4eeff0aa859d2
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git cherry-pick --skip'

[rolling release update] ========================================
[rolling release update] INTERACTIVE MODE: Merge conflict detected
[rolling release update] ========================================
[rolling release update] Please resolve or skip the merge conflict manually.
[rolling release update] To resolve:
[rolling release update]   1. Fix merge conflicts in the working directory
[rolling release update]   2. Stage resolved files: git add <files>
[rolling release update]   3. Complete cherry-pick: git cherry-pick --continue
[rolling release update]      (or commit manually if needed)
[rolling release update] To skip:
[rolling release update]   1. To skip this commit: git cherry-pick --skip
[rolling release update] When done:
[rolling release update]   Return here and press Enter to continue
[rolling release update] ========================================
[rolling release update] Press Enter when resolved (or type "stop"/"abort" to exit): [rolling release update] Cherry-pick resolved successfully, continuing...
  [76/98] 69dd7e60f845c When in fips mode, self-test errors must panic.
  [77/98] 7ba591edb39c7 When in fips mode, self-test errors must panic.
  [78/98] adfde3c2a5b90 In crypto_kdf108_ctr_generate() there is no minimum length check for the digest to be generated - it must be at least 112 bits.
  [79/98] 6269260399ca7 crypto: Kconfig - Make CRYPTO_FIPS depend on the DRBG being built-in
  [80/98] c4621e0f4a156 crypto: rng - Ensure set_ent is always present
  [81/98] 0a736dc5f77cf crypto: rng - Override drivers/char/random in FIPS mode
  [82/98] d31b76cfcf7d0 crypto: rng - Implement fast per-CPU DRBG instances
  [83/98] e95cdc2537873 random: Restrict extrng registration to init time
  [84/98] e46acaa9ece8c crypto: rng - Only allow the DRBG to register as "stdrng" in FIPS mode
  [85/98] 94c3b1fd68112 crypto: rng - Fix tabs vs spaces in the per-CPU DRBG code
  [86/98] 91464afaebd61 crypto: rng - Make the per-CPU DRBG instances permanent
  [87/98] 8bf9046497bb8 crypto: rng - Skip leading zero-length iovec segments
  [88/98] 85787978ace21 crypto: rng - Fix spurious EFAULT when the destination PTE is zapped
  [89/98] e1dadca573071 Revert "mm/gup: reintroduce pin_user_pages_fast_only()"
  [90/98] 9f1ae43f3552e local_lock: Move this_cpu_ptr() notation from internal to main header
  [91/98] 2c0fcb4ff9c37 crypto: rng - Fix double percpu offset in local_unlock() calls
  [92/98] da94da94c2b62 Add CONFIG_CRYPTO_FIPS_CUSTOM_VERSION=y,
  [93/98] 2e322a940b2f5 Unset CRYPTO_JITTERENTROPY_MEMSIZE_2, set CRYPTO_JITTERENTROPY_MEMSIZE_128.
  [94/98] b952d8ef5bd51 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.
  [95/98] 8243bfb8e41f1 exec: Cleanup POSIX timers right after de_thread()
  [96/98] dc58721664564 posix-timers: Target group sigqueue to current task only if not exiting
  [97/98] 7420771207459 signal: Prevent exec() race
  [98/98] 508a39d553f11 github actions: Use reusable validate kernel commits workflow
[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}: 6s
x86_64 architecture detected, copying config
'configs/kernel-x86_64-rhel.config' -> '.config'
Setting Local Version for build
CONFIG_LOCALVERSION="-rocky10_2_rebuild-05fc8eea84df"
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
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  WRAP    arch/x86/include/generated/uapi/asm/errno.h
  WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
--
  LD [M]  net/qrtr/qrtr-mhi.ko
  LD [M]  virt/lib/irqbypass.ko
  BTF [M] net/qrtr/qrtr.ko
  BTF [M] net/qrtr/qrtr-mhi.ko
  BTF [M] virt/lib/irqbypass.ko
[TIMER]{BUILD}: 2313s
Making Modules
  SYMLINK /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/build
  INSTALL /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/modules.order
  INSTALL /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/modules.builtin
  INSTALL /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/modules.builtin.modinfo
--
  STRIP   /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/kernel/net/qrtr/qrtr-mhi.ko
  SIGN    /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/kernel/virt/lib/irqbypass.ko
  SIGN    /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/kernel/net/qrtr/qrtr-mhi.ko
  SIGN    /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+/kernel/net/qrtr/qrtr.ko
  DEPMOD  /lib/modules/6.12.0-rocky10_2_rebuild-05fc8eea84df+
[TIMER]{MODULES}: 17s
Making Install
  INSTALL /boot
[TIMER]{INSTALL}: 19s
Checking kABI
kABI check passed
Setting Default Kernel to /boot/vmlinuz-6.12.0-rocky10_2_rebuild-05fc8eea84df+ and Index to 2
Hopefully Grub2.0 took everything ... rebooting after time metrices
[TIMER]{MRPROPER}: 6s
[TIMER]{BUILD}: 2313s
[TIMER]{MODULES}: 17s
[TIMER]{INSTALL}: 19s
[TIMER]{TOTAL} 2360s
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.54.1.el10_2-60f4ccb9409d+-1.log: 487 passed
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

Before: selftest-6.12.0-jmaple_rlc-10_6.12.0-211.60.1.el10_2-0a34ea7c8b1b+-1.log
After: selftest-6.12.0-jmaple_rlc-10_6.12.0-211.65.1.el10_2-2a62602844a81+-1.log
Diff:
-ok 2 selftests: seccomp: seccomp_benchmark
+ok 4 selftests: cgroup: test_freezer
+ok 52 selftests: net: txtimestamp.sh
-ok 7 selftests: timers: raw_skew # SKIP
+ok 7 selftests: timers: raw_skew

roxanan1996 and others added 30 commits October 14, 2026 17:17
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>
herbertx and others added 19 commits October 14, 2026 17:18
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>
CONFIG_CRYPTO_FIPS_VERSION="ciq.6.12.20260826"

Requested by lab.

Signed-off-by: Jeremy Allison <jallison@ciq.com>
…E_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>
@github-actions

Copy link
Copy Markdown

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

@github-actions

Copy link
Copy Markdown

❌ Diffofdiffs: 29 of 64 backports differ from upstream, 1 couldn't be compared

View the diffofdiffs report.

Open to anyone signed in to GitHub. Report expires 2027-01-13 00:12 UTC.

# Subject Backport Upstream
1 fuse: add more control over cache invalidation behaviour 348cfa8b1f5a 2396356a945b
2 fs: fuse: add dev id to /dev/fuse fdinfo 18169fe022eb f09222980d77
3 gve: fix zero-length skb frag with header-split f310e345ed16 6bf14575c655
4 xfrm: nat_keepalive: avoid double free on send error 9d799c193821 226f4a490d1a
5 af_unix: Set error only when needed in unix_dgram_sendmsg(). c0c446ab5e62 001a25088c35
6 fuse: rename to fuse_dev_end_requests and make non-static f77d13a8cd1a 92270d076115
7 fuse: make args->in_args[0] to be always the header 119879b50d2d 7ccd86ba3a48
8 fuse: {io-uring} Handle SQEs - register commands f10054d027f7 24fe962c86f5
9 fuse: {io-uring} Make fuse_dev_queue_{interrupt,forget} non-static 72c795e6a41b ba74ba571189
10 fuse: block request allocation until io-uring init is complete cc579d4d3226 3393ff964e0f
11 fuse: enable fuse-over-io-uring 331d3b32101b 786412a73e7e
12 fuse: missing copy_finish in fuse-over-io-uring argument copies cb1b7980ff5c 6e0d7f7f4a43
13 fuse-uring: fix race between registration and connection abortion 75015a6dba13 952b5d36f6a2
14 fuse-uring: check connection abort during ring creation 5aaa60eba145 c146284c4355
15 fuse-uring: fix moving cancelled entry to ent_in_userspace list 8fa0957f4a66 198f45eeb9f7
16 fuse-uring: end fuse_req on io-uring cancel task work 2594135d1281 bea4fe98204b
17 fuse-uring: Avoid use-after-free in fuse_uring_async_stop_queues bfb1b5d2eaaa d351da750669
18 fuse-uring: Avoid queue->stopped races and set/read that value under lock e8c5cd296058 b70a3aca1693
19 fuse-uring: make a fuse_req on SQE commit only findable after memcpy 81dc2c8b5d58 1efd3d474fc0
20 fuse: fix io-uring background queue dispatch on request completion cc463094f14b 31da059891bd
21 fuse: fix missing barrier when checking io-uring readiness e0f0d0dd9036 edb310bc27f0
22 fuse: publish io-uring queues with release semantics 2aeb06d77fc0 42df916e5a5f
23 fuse: copy request headers via a stack buffer for io-uring 121e454dd3a5 fd10f40af314
24 fuse: Fix the condition to enable over-io-uring d571939cebbb 1f59015e9581
25 selftests: filesystems: Add functional test for the abort file in fusectl c8aef984b436 1a7b13781b0d
26 selftests/fuse: add ACL_DONT_CACHE regression test 498a1c19103a 9acb102522b9
27 mpls: add seqcount to protect the platform_label{,s} pair 42b73e028a25 629ec78ef860
28 exec: Cleanup POSIX timers right after de_thread() df80a9c61c9d acb03d388181
29 signal: Prevent exec() race b436673c3819 d2710c8d938a

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: 12993a7516ab · 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 2a62602844a8 against base 05fc8eea84df.

@github-actions

Copy link
Copy Markdown

🔍 Upstream Linux Kernel Commit Check

  • ⚠️ PR commit 348cfa8b1f5 (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 f10054d027f (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 e0f0d0dd903 (fuse: fix missing barrier when checking io-uring readiness) does not reference a CVE but
    upstream commit edb310bc27f0 is associated with CVE-2026-80859

  • ⚠️ PR commit 2aeb06d77fc (fuse: publish io-uring queues with release semantics) does not reference a CVE but
    upstream commit 42df916e5a5f is associated with CVE-2026-80858

  • ⚠️ PR commit 121e454dd3a (fuse: copy request headers via a stack buffer for io-uring) does not reference a CVE but
    upstream commit fd10f40af314 is associated with CVE-2026-80946

  • ⚠️ PR commit d571939cebb (fuse: Fix the condition to enable over-io-uring) does not reference a CVE but
    upstream commit 1f59015e9581 is associated with CVE-2026-90095

  • ⚠️ PR commit 74e4c716a0b (crypto: rng - Ensure set_ent is always present) does not reference a CVE but
    upstream commit c0d36727bf39 is associated with CVE-2025-40109

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

  • ❗ PR commit 12993a7516a (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/38659683957

@PlaidCat PlaidCat self-assigned this Oct 15, 2026
@PlaidCat
PlaidCat requested a review from a team October 15, 2026 13:25

@bmastbergen bmastbergen 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.

🥌

@PlaidCat
PlaidCat requested a review from a team October 15, 2026 16:22

@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.

🥌

@PlaidCat
PlaidCat merged commit cefc61b into rlc-10/6.12.0-211.65.1.el10_2 Oct 15, 2026
6 of 7 checks passed
@PlaidCat
PlaidCat deleted the jmaple_rlc-10/6.12.0-211.65.1.el10_2 branch October 15, 2026 18:03
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