Skip to content

[rocky9_8] History Rebuild through kernel-5.14.0-687.41.1.el9_8 - #1547

Open
PlaidCat wants to merge 35 commits into
rocky9_8from
rocky9_8_rebuild
Open

[rocky9_8] History Rebuild through kernel-5.14.0-687.41.1.el9_8#1547
PlaidCat wants to merge 35 commits into
rocky9_8from
rocky9_8_rebuild

Conversation

@PlaidCat

@PlaidCat PlaidCat commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

This is an automated kernel history rebuild using cron and internal tooling. It follows the same process used for previous history rebuilds:

  • Download all unprocessed src.rpm packages
  • For each src.rpm:
    • Identify all commits in the changelog up to the last known tag (5.14.0-687)
    • Replay commits in chronological order (oldest to newest in the changelog) using git cherry-pick
    • Replace the code in the branch with the output of rpmbuild -bp for the corresponding src.rpm
    • Tag the rebuild branch

JIRA Tickets

Rebuild Splat Inspection

kernel-5.14.0-687.41.1.el9_8

$ cat ciq/ciq_backports/kernel-5.14.0-687.41.1.el9_8/rebuild.details.txt
Rebuild_History BUILDABLE
Rebuilding Kernel from rpm changelog with Fuzz Limit: 87.50%
Number of commits in upstream range v5.14~1..kernel-mainline: 394115
Number of commits in rpm: 51
Number of commits matched with upstream: 34 (66.67%)
Number of commits in upstream but not in rpm: 394081
Number of commits NOT found in upstream: 17 (33.33%)

Rebuilding Kernel on Branch rocky9_8_rebuild_kernel-5.14.0-687.41.1.el9_8 for kernel-5.14.0-687.41.1.el9_8
Clean Cherry Picks: 29 (85.29%)
Empty Cherry Picks: 5 (14.71%)
_______________________________

__EMPTY COMMITS__________________________
08841b06fa64d8edbd1a21ca6e613420c90cc4b8 udf: fix partition descriptor append bookkeeping
3b041514cb6eae45869b020f743c14d983363222 memfd: deny writeable mappings when implying SEAL_WRITE
c08972f555945cda57b0adb72272a37910153390 drm/amdgpu: fix amdgpu_hmm_range_get_pages
778c2ab142c625a8a8afa570e0f9b7873f445d99 scsi: target: iscsi: Fix CRC overread and double-free in iscsit_handle_text_cmd()
8d878059924f12c1bc24556a92ec56add74de3c8 mm/huge_memory: update file PMD counter before folio_put()

__CHANGES NOT IN UPSTREAM________________
Replace sbat with Rocky Linux sbat
Change bug tracker URL
Ensure appended release in sbat is removed'
smb: client: validate DFS referral PathConsumed
posix-cpu-timers: Prevent UAF caused by non-leader exec() race
smb/client: handle overlapping allocated ranges in fallocate
smb: client: mask server-provided mode to 07777 in modefromsid
sched/psi: Create the psimon kthread outside of cgroup_mutex
smb: client: fix query_info() replay double-free
smb: client: fix double-free in SMB2_open() replay
smb: client: fix SMB1 TRANS2 multi-response truncation in SendReceive()
wifi: iwlwifi: reduce encryption error message to debug level in FIPS mode
wifi: iwlwifi: restore FIPS-disabled features with fips exception
wifi: mac80211: allow keys to driver with fips exception
crypto: fips: add rh_fips_exception kernel boot parameter and fips_allows() helper
mm/memfd: fix spelling in memfd_add_seals()
vhost: reset the vring metadata cache on vring reconfiguration

BUILD

$ grep -E -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}: 5s
x86_64 architecture detected, copying config
'configs/kernel-x86_64-rhel.config' -> '.config'
Setting Local Version for build
CONFIG_LOCALVERSION="-rocky9_8_rebuild-c1e475b760c7"
Making olddefconfig
--
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
Starting Build
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
--
  BTF [M] sound/usb/snd-usb-audio.ko
  BTF [M] sound/usb/usx2y/snd-usb-usx2y.ko
  BTF [M] sound/virtio/virtio_snd.ko
  BTF [M] sound/x86/snd-hdmi-lpe-audio.ko
  BTF [M] sound/xen/snd_xen_front.ko
[TIMER]{BUILD}: 1618s
Making Modules
  INSTALL /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/arch/x86/crypto/blake2s-x86_64.ko
  INSTALL /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/arch/x86/crypto/blowfish-x86_64.ko
  INSTALL /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/arch/x86/crypto/camellia-aesni-avx-x86_64.ko
  INSTALL /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/arch/x86/crypto/camellia-aesni-avx2.ko
--
  SIGN    /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/sound/usb/usx2y/snd-usb-us144mkii.ko
  SIGN    /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/sound/xen/snd_xen_front.ko
  SIGN    /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/sound/x86/snd-hdmi-lpe-audio.ko
  SIGN    /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7/kernel/sound/usb/snd-usb-audio.ko
  DEPMOD  /lib/modules/5.14.0-rocky9_8_rebuild-c1e475b760c7
[TIMER]{MODULES}: 9s
Making Install
sh ./arch/x86/boot/install.sh 5.14.0-rocky9_8_rebuild-c1e475b760c7 \
	arch/x86/boot/bzImage System.map "/boot"
[TIMER]{INSTALL}: 26s
Checking kABI
kABI check passed
Setting Default Kernel to /boot/vmlinuz-5.14.0-rocky9_8_rebuild-c1e475b760c7 and Index to 0
Hopefully Grub2.0 took everything ... rebooting after time metrices
[TIMER]{MRPROPER}: 5s
[TIMER]{BUILD}: 1618s
[TIMER]{MODULES}: 9s
[TIMER]{INSTALL}: 26s
[TIMER]{TOTAL} 1663s
Rebooting in 10 seconds

KSelfTests

$ get_kselftest_diff.sh
kselftest.5.14.0-rocky9_8_rebuild-b77d4cd45c1b.log
311
kselftest.5.14.0-rocky9_8_rebuild-eb7eb89235d2.log
311
kselftest.5.14.0-rocky9_8_rebuild-ad60ad494aae.log
311
kselftest.5.14.0-rocky9_8_rebuild-c1e475b760c7.log
311
Before: kselftest.5.14.0-rocky9_8_rebuild-ad60ad494aae.log
After: kselftest.5.14.0-rocky9_8_rebuild-c1e475b760c7.log
Diff:
No differences found.

jira KERNEL-1502
cve CVE-2026-45991
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Seohyeon Maeng <bioloidgp@gmail.com>
commit 08841b0
Empty-Commit: Cherry-Pick Conflicts during history rebuild.
Will be included in final tarball splat. Ref for failed cherry-pick at:
ciq/ciq_backports/kernel-5.14.0-687.41.1.el9_8/08841b06.failed

Mounting a crafted UDF image with repeated partition descriptors can
trigger a heap out-of-bounds write in part_descs_loc[].

handle_partition_descriptor() deduplicates entries by partition number,
but appended slots never record partnum. As a result duplicate
Partition Descriptors are appended repeatedly and num_part_descs keeps
growing.

Once the table is full, the growth path still sizes the allocation from
partnum even though inserts are indexed by num_part_descs. If partnum is
already aligned to PART_DESC_ALLOC_STEP, ALIGN(partnum, step) can keep
the old capacity and the next append writes past the end of the table.

Store partnum in the appended slot and size growth from the next append
count so deduplication and capacity tracking follow the same model.

Fixes: ee4af50 ("udf: Fix mounting of Win7 created UDF filesystems")
	Cc: stable@vger.kernel.org
	Signed-off-by: Seohyeon Maeng <bioloidgp@gmail.com>
Link: https://patch.msgid.link/20260310081652.21220-1-bioloidgp@gmail.com
	Signed-off-by: Jan Kara <jack@suse.cz>
(cherry picked from commit 08841b0)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>

# Conflicts:
#	fs/udf/super.c
jira KERNEL-1502
cve CVE-2026-63952
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Pratyush Yadav (Google) <pratyush@kernel.org>
commit 3b04151
Empty-Commit: Cherry-Pick Conflicts during history rebuild.
Will be included in final tarball splat. Ref for failed cherry-pick at:
ciq/ciq_backports/kernel-5.14.0-687.41.1.el9_8/3b041514.failed

When SEAL_EXEC is added, SEAL_WRITE is implied to make W^X.  But the
implied seal is set after the check that makes sure the memfd can not have
any writable mappings.  This means one can use SEAL_EXEC to apply
SEAL_WRITE while having writeable mappings.

This breaks the contract that SEAL_WRITE provides and can be used by an
attacker to pass a memfd that appears to be write sealed but can still be
modified arbitrarily.

Fix this by adding the implied seals before the call for
mapping_deny_writable() is done.

Link: https://lore.kernel.org/20260505133922.797635-1-pratyush@kernel.org
Fixes: c4f75bc ("mm/memfd: add write seals when apply SEAL_EXEC to executable memfd")
	Signed-off-by: Pratyush Yadav (Google) <pratyush@kernel.org>
	Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com>
	Acked-by: Jeff Xu <jeffxu@google.com>
	Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
	Cc: Brendan Jackman <jackmanb@google.com>
	Cc: Greg Thelen <gthelen@google.com>
	Cc: Hugh Dickins <hughd@google.com>
	Cc: Kees Cook <kees@kernel.org>
	Cc: "David Hildenbrand (Arm)" <david@kernel.org>
	Cc: <stable@vger.kernel.org>
	Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
(cherry picked from commit 3b04151)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>

# Conflicts:
#	mm/memfd.c
jira KERNEL-1502
cve CVE-2026-64007
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Chris Mason <clm@meta.com>
commit 92170e6

synproxy_tstamp_adjust() rewrites the TCP timestamp option in place
and then patches the TCP checksum via inet_proto_csum_replace4() on
the caller-supplied tcphdr pointer.  Both ipv4_synproxy_hook() and
ipv6_synproxy_hook() obtain that pointer with skb_header_pointer()
before calling in, so it may either alias skb->head directly or
point at the caller's on-stack _tcph buffer.

Between obtaining the pointer and using it, the function calls
skb_ensure_writable(skb, optend), which on a cloned or non-linear
skb invokes pskb_expand_head() and frees the old skb->head.  After
that point the cached th is stale:

    caller (ipv[46]_synproxy_hook)
      th = skb_header_pointer(skb, ..., &_tcph)
      synproxy_tstamp_adjust(skb, protoff, th, ...)
        skb_ensure_writable(skb, optend)
          pskb_expand_head()        /* kfree(old skb->head) */
        ...
        inet_proto_csum_replace4(&th->check, ...)
                                    /* writes into freed head, or
                                       into the caller's stack copy
                                       leaving the on-wire checksum
                                       stale */

The option bytes are written through skb->data and are fine; only
the checksum update goes through th and so lands in the wrong
place.  The result is either a write into freed slab memory or a
packet leaving with a checksum that does not match its payload.

Fix by re-deriving th from skb->data + protoff immediately after
skb_ensure_writable() succeeds, so the subsequent checksum update
targets the linear, writable header.

Fixes: 48b1de4 ("netfilter: add SYNPROXY core/target")
Assisted-by: kres (claude-opus-4-7)
	Signed-off-by: Chris Mason <clm@meta.com>
	Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
	Signed-off-by: Florian Westphal <fw@strlen.de>
(cherry picked from commit 92170e6)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-43233
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Vahagn Vardanian <vahagn@redrays.io>
commit baed0d9

In decode_choice(), the boundary check before get_len() uses the
variable `len`, which is still 0 from its initialization at the top of
the function:

    unsigned int type, ext, len = 0;
    ...
    if (ext || (son->attr & OPEN)) {
        BYTE_ALIGN(bs);
        if (nf_h323_error_boundary(bs, len, 0))  /* len is 0 here */
            return H323_ERROR_BOUND;
        len = get_len(bs);                        /* OOB read */

When the bitstream is exactly consumed (bs->cur == bs->end), the check
nf_h323_error_boundary(bs, 0, 0) evaluates to (bs->cur + 0 > bs->end),
which is false.  The subsequent get_len() call then dereferences
*bs->cur++, reading 1 byte past the end of the buffer.  If that byte
has bit 7 set, get_len() reads a second byte as well.

This can be triggered remotely by sending a crafted Q.931 SETUP message
with a User-User Information Element containing exactly 2 bytes of
PER-encoded data ({0x08, 0x00}) to port 1720 through a firewall with
the nf_conntrack_h323 helper active.  The decoder fully consumes the
PER buffer before reaching this code path, resulting in a 1-2 byte
heap-buffer-overflow read confirmed by AddressSanitizer.

Fix this by checking for 2 bytes (the maximum that get_len() may read)
instead of the uninitialized `len`.  This matches the pattern used at
every other get_len() call site in the same file, where the caller
checks for 2 bytes of available data before calling get_len().

Fixes: ec8a8f3 ("netfilter: nf_ct_h323: Extend nf_h323_error_boundary to work on bits as well")
	Signed-off-by: Vahagn Vardanian <vahagn@redrays.io>
	Signed-off-by: Florian Westphal <fw@strlen.de>
Link: https://patch.msgid.link/20260225130619.1248-2-fw@strlen.de
	Signed-off-by: Paolo Abeni <pabeni@redhat.com>
(cherry picked from commit baed0d9)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
…te and Timeline Management v4

jira KERNEL-1502
cve CVE-2026-43237
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
commit bd8150a

This commit simplifies the amdgpu_gem_va_ioctl function, key updates
include:
 - Moved the logic for managing the last update fence directly into
   amdgpu_gem_va_update_vm.
 - Introduced checks for the timeline point to enable conditional
   replacement or addition of fences.

v2: Addressed review comments from Christian.
v3: Updated comments (Christian).
v4: The previous version selected the fence too early and did not manage its
    reference correctly, which could lead to stale or freed fences being used.
    This resulted in refcount underflows and could crash when updating GPU
    timelines.
    The fence is now chosen only after the VA mapping work is completed, and its
    reference is taken safely. After exporting it to the VM timeline syncobj, the
    driver always drops its local fence reference, ensuring balanced refcounting
    and avoiding use-after-free on dma_fence.

	Crash signature:
	[  205.828135] refcount_t: underflow; use-after-free.
	[  205.832963] WARNING: CPU: 30 PID: 7274 at lib/refcount.c:28 refcount_warn_saturate+0xbe/0x110
	...
	[  206.074014] Call Trace:
	[  206.076488]  <TASK>
	[  206.078608]  amdgpu_gem_va_ioctl+0x6ea/0x740 [amdgpu]
	[  206.084040]  ? __pfx_amdgpu_gem_va_ioctl+0x10/0x10 [amdgpu]
	[  206.089994]  drm_ioctl_kernel+0x86/0xe0 [drm]
	[  206.094415]  drm_ioctl+0x26e/0x520 [drm]
	[  206.098424]  ? __pfx_amdgpu_gem_va_ioctl+0x10/0x10 [amdgpu]
	[  206.104402]  amdgpu_drm_ioctl+0x4b/0x80 [amdgpu]
	[  206.109387]  __x64_sys_ioctl+0x96/0xe0
	[  206.113156]  do_syscall_64+0x66/0x2d0
	...
	[  206.553351] BUG: unable to handle page fault for address: ffffffffc0dfde90
	...
	[  206.553378] RIP: 0010:dma_fence_signal_timestamp_locked+0x39/0xe0
	...
	[  206.553405] Call Trace:
	[  206.553409]  <IRQ>
	[  206.553415]  ? __pfx_drm_sched_fence_free_rcu+0x10/0x10 [gpu_sched]
	[  206.553424]  dma_fence_signal+0x30/0x60
	[  206.553427]  drm_sched_job_done.isra.0+0x123/0x150 [gpu_sched]
	[  206.553434]  dma_fence_signal_timestamp_locked+0x6e/0xe0
	[  206.553437]  dma_fence_signal+0x30/0x60
	[  206.553441]  amdgpu_fence_process+0xd8/0x150 [amdgpu]
	[  206.553854]  sdma_v4_0_process_trap_irq+0x97/0xb0 [amdgpu]
	[  206.554353]  edac_mce_amd(E) ee1004(E)
	[  206.554270]  amdgpu_irq_dispatch+0x150/0x230 [amdgpu]
	[  206.554702]  amdgpu_ih_process+0x6a/0x180 [amdgpu]
	[  206.555101]  amdgpu_irq_handler+0x23/0x60 [amdgpu]
	[  206.555500]  __handle_irq_event_percpu+0x4a/0x1c0
	[  206.555506]  handle_irq_event+0x38/0x80
	[  206.555509]  handle_edge_irq+0x92/0x1e0
	[  206.555513]  __common_interrupt+0x3e/0xb0
	[  206.555519]  common_interrupt+0x80/0xa0
	[  206.555525]  </IRQ>
	[  206.555527]  <TASK>
	...
	[  206.555650] RIP: 0010:dma_fence_signal_timestamp_locked+0x39/0xe0
	...
	[  206.555667] Kernel panic - not syncing: Fatal exception in interrupt

Link: https://patchwork.freedesktop.org/patch/654669/
	Cc: Alex Deucher <alexander.deucher@amd.com>
	Cc: Christian König <christian.koenig@amd.com>
	Suggested-by: Christian König <christian.koenig@amd.com>
	Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
	Reviewed-by: Christian König <christian.koenig@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit bd8150a)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
…te and Timeline Management v7

jira KERNEL-1502
cve CVE-2026-43237
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
commit efdc66f

When GPU memory mappings are updated, the driver returns a fence so
userspace knows when the update is finished.

The previous refactor could pick the wrong fence or rely on checks that
are not safe for GPU mappings that stay valid even when memory is
missing. In some cases this could return an invalid fence or cause fence
reference counting problems.

Fix this by (v5,v6, per Christian):
- Starting from the VM’s existing last update fence, so a valid and
  meaningful fence is always returned even when no new work is required.
- Selecting the VM-level fence only for always-valid / PRT mappings using
  the required combined bo_va + bo guard.
- Using the per-BO page table update fence for normal MAP and REPLACE
  operations.
- For UNMAP and CLEAR, returning the fence provided by
  amdgpu_vm_clear_freed(), which may remain unchanged when nothing needs
  clearing.
- Keeping fence reference counting balanced.

v7: Drop the extra bo_va/bo NULL guard since
    amdgpu_vm_is_bo_always_valid() handles NULL BOs correctly (including
    PRT). (Christian)

This makes VM timeline fences correct and prevents crashes caused by
incorrect fence handling.

Fixes: bd8150a ("drm/amdgpu: Refactor amdgpu_gem_va_ioctl for Handling Last Fence Update and Timeline Management v4")
	Suggested-by: Christian König <christian.koenig@amd.com>
	Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
	Reviewed-by: Christian König <christian.koenig@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit efdc66f)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-43206
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Sunday Clement <Sunday.Clement@amd.com>
commit 8a70a26

The kfd_event_page_set() function writes KFD_SIGNAL_EVENT_LIMIT * 8
bytes via memset without checking the buffer size parameter. This allows
unprivileged userspace to trigger an out-of bounds kernel memory write
by passing a small buffer, leading to  potential privilege
escalation.

	Signed-off-by: Sunday Clement <Sunday.Clement@amd.com>
	Reviewed-by: Alexander Deucher <Alexander.Deucher@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
	Cc: stable@vger.kernel.org
(cherry picked from commit 8a70a26)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-53374
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Philip Yang <Philip.Yang@amd.com>
commit d9af826

GART TLB is flushed after unmapping but not after mapping. Since
amdgpu_bo_create_kernel() does not zero-initialize the buffer, when a
single PTE is written the TLB may speculatively load other uninitialized
entries from the same cacheline. Those garbage entries can appear valid,
and a subsequent write to another PTE in the same cacheline may cause the
GPU to use a stale garbage PTE from the TLB.

Fix this by calling memset_io() to zero-initialize the GART table with
gart_pte_flags immediately after allocation.

Using AMDGPU_GEM_CREATE_VRAM_CLEARED, SDMA-based clear will not work
since SDMA needs GART to be initialized to work.

	Suggested-by: Felix Kuehling <felix.kuehling@amd.com>
	Signed-off-by: Philip Yang <Philip.Yang@amd.com>
	Reviewed-by: Christian König <christian.koenig@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit d9af826)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
…_dmub_aux_transfer_async

jira KERNEL-1502
cve CVE-2026-64219
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Harry Wentland <harry.wentland@amd.com>
commit ba4caa9

[Why&How]
dc_process_dmub_aux_transfer_async() copies payload->length bytes into a
16-byte stack buffer (dpaux.data[16]) guarded only by an ASSERT(), which
is a no-op in release builds. If a caller ever passes length > 16 this
results in a stack buffer overflow via memcpy.

Additionally, link_index is used to dereference dc->links[] without
bounds checking against dc->link_count, risking an out-of-bounds access.

Replace the ASSERT with a hard runtime check that returns false when
payload->length exceeds the destination buffer size, and add a bounds
check for link_index before it is used.

Assisted-by: GitHub Copilot:Claude claude-4-opus
	Reviewed-by: Alex Hung <alex.hung@amd.com>
	Signed-off-by: Harry Wentland <harry.wentland@amd.com>
	Signed-off-by: Ivan Lipski <ivan.lipski@amd.com>
	Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit ba4caa9)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-53356
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
commit d21ad93

sg_page() returns struct page pointer not (void *) so the scaling
of pread/pwrite is wrong for phys BO and wrong parts of BO would be
accessed if non-zero offset is used.

Last impacted platform with overlay or cursor planes using phys
mapping was Gen3/945G/Lakeport.

	Reported-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Fixes: c6790dc ("drm/i915: Wean off drm_pci_alloc/drm_pci_free")
	Cc: <stable@vger.kernel.org> # v4.5+
	Cc: Tvrtko Ursulin <tursulin@ursulin.net>
	Cc: Simona Vetter <simona@ffwll.ch>
	Cc: Jani Nikula <jani.nikula@linux.intel.com>
	Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
	Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
	Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Link: https://patch.msgid.link/20260610060314.26111-1-joonas.lahtinen@linux.intel.com
(cherry picked from commit 3e49a2f)
	Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
(cherry picked from commit d21ad93)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-63884
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
commit 4462966

TLDR: The bo->ttm object might be changed by calling ttm_bo_validate(),
      move casting it to an i915_tt object later to actually get the right
      pointer.

A user reported hitting the following bug under heavy use on DG2:

[26620.095550] Oops: general protection fault, probably for non-canonical address 0xa56b6b6b6b6b6b8b: 0000 1 SMP NOPTI
[26620.095556] CPU: 2 UID: 0 PID: 631 Comm: Xorg Not tainted 6.18.8 #1 PREEMPT(lazy)
[26620.095558] Hardware name: ASRock B850M Steel Legend WiFi/B850M Steel Legend WiFi, BIOS 3.50 09/18/2025
[26620.095559] RIP: 0010:i915_ttm_purge+0x84/0x100 [i915]
[26620.095604] Code: 00 00 00 48 8d 54 24 10 48 89 e6 48 89 fb e8 83 aa ae ff 85 c0 75 6f 48 83 bb a8 01 00 00 00 74 2c 48 8b 45 78 48 85 c0 74 23 <48> 8b 78 20 48 c7 c2 ff ff ff ff 31 f6 e8 7a 73 e3 e0 48 8b 7d 78
[26620.095605] RSP: 0018:ffffc90005fd7430 EFLAGS: 00010282
[26620.095607] RAX: a56b6b6b6b6b6b6b RBX: ffff8881f46c3dc0 RCX: 0000000000000000
[26620.095608] RDX: 0000000000000000 RSI: 0000000000000246 RDI: 00000000ffffffff
[26620.095609] RBP: ffff888289610f00 R08: 0000000000000001 R09: ffff88823b022000
[26620.095609] R10: ffff888103029b28 R11: ffff8881fc7f3800 R12: ffff88810b6150d0
[26620.095609] R13: ffff888289610f00 R14: 0000000000000000 R15: ffff8881f46c3dc0
[26620.095610] FS: 00007f1004d86900(0000) GS:ffff88901c858000(0000) knlGS:0000000000000000
[26620.095611] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[26620.095611] CR2: 00007f0fdf489000 CR3: 000000035b0c1000 CR4: 0000000000750ef0
[26620.095612] PKRU: 55555554
[26620.095612] Call Trace:
[26620.095615] <TASK>
[26620.095615] i915_ttm_move+0x2b9/0x420 [i915]
[26620.095642] ? ttm_tt_init+0x65/0x80 [ttm]
[26620.095644] ? i915_ttm_tt_create+0xc6/0x150 [i915]
[26620.095667] ttm_bo_handle_move_mem+0xb6/0x160 [ttm]
[26620.095669] ttm_bo_evict+0x100/0x150 [ttm]
[26620.095671] ? preempt_count_add+0x64/0xa0
[26620.095673] ? _raw_spin_lock+0xe/0x30
[26620.095675] ? _raw_spin_unlock+0xd/0x30
[26620.095675] ? i915_gem_object_evictable+0xb7/0xd0 [i915]
[26620.095704] ttm_bo_evict_cb+0x6e/0xd0 [ttm]
[26620.095705] ttm_lru_walk_for_evict+0xa6/0x200 [ttm]
[26620.095708] ttm_bo_alloc_resource+0x185/0x4f0 [ttm]
[26620.095709] ? init_object+0x62/0xd0
[26620.095712] ttm_bo_validate+0x7a/0x180 [ttm]
[26620.095713] ? _raw_spin_unlock_irqrestore+0x16/0x30
[26620.095714] __i915_ttm_get_pages+0xb0/0x170 [i915]
[26620.095737] i915_ttm_get_pages+0x9f/0x150 [i915]
[26620.095759] ? i915_gem_do_execbuffer+0xedc/0x2b40 [i915]
[26620.095786] ? alloc_debug_processing+0xd0/0x100
[26620.095787] ? _raw_spin_unlock_irqrestore+0x16/0x30
[26620.095788] ? i915_vma_instance+0xa0/0x4e0 [i915]
[26620.095822] __i915_gem_object_get_pages+0x2f/0x40 [i915]
[26620.095848] i915_vma_pin_ww+0x706/0x980 [i915]
[26620.095875] ? i915_gem_do_execbuffer+0xedc/0x2b40 [i915]
[26620.095904] eb_validate_vmas+0x170/0xa00 [i915]
[26620.095930] i915_gem_do_execbuffer+0x1201/0x2b40 [i915]
[26620.095953] ? alloc_debug_processing+0xd0/0x100
[26620.095954] ? _raw_spin_unlock_irqrestore+0x16/0x30
[26620.095955] ? i915_gem_execbuffer2_ioctl+0xc9/0x240 [i915]
[26620.095977] ? __wake_up_sync_key+0x32/0x50
[26620.095979] ? i915_gem_execbuffer2_ioctl+0xc9/0x240 [i915]
[26620.096001] ? __slab_alloc.isra.0+0x67/0xc0
[26620.096003] i915_gem_execbuffer2_ioctl+0x11a/0x240 [i915]

Results from decode_stacktrace.sh pointed to dereference of a file pointer
field of a i915 TTM page vector container associated with an object being
purged on eviction.  That path is taken when the object is marked as no
longer needed.

Code analysis revealed a possibility of the i915 TTM page vector container
being replaced with a new instance inside a function that purges content
of the object, should it be still busy.  That function is called,
indirectly via a more general function that changes the object's placement
and caching policy, before the problematic dereference, but still after
a pointer to the container is captured, rendering the pointer no longer
valid.

Fix the issue by capturing the pointer to the container only after its
potential replacement.

v2: Move the container_of() inside the if block (Sebastian),
  - a simplified version of the commit description that explains briefly
    why the change is necessary (Christian).

Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/14882
Fixes: 7ae0345 ("drm/i915/ttm: add tt shmem backend")
	Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
	Cc: stable@vger.kernel.org # v5.17+
	Cc: Matthew Auld <matthew.auld@intel.com>
	Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
	Cc: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
	Cc: Christian König <christian.koenig@amd.com>
	Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
	Reviewed-by: Christian König <christian.koenig@amd.com>
	Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://lore.kernel.org/r/20260508122612.469227-2-janusz.krzysztofik@linux.intel.com
(cherry picked from commit 4462966)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-45878
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
commit 5a19302

The address watch clear code receives watch_id as an unsigned value
(u32), but some helper functions were using a signed int and checked
bits by shifting with watch_id.

If a very large watch_id is passed from userspace, it can be converted
to a negative value.  This can cause invalid shifts and may access
memory outside the watch_points array.

drm/amdkfd: Fix watch_id bounds checking in debug address watch v2

Fix this by checking that watch_id is within MAX_WATCH_ADDRESSES before
using it.  Also use BIT(watch_id) to test and clear bits safely.

This keeps the behavior unchanged for valid watch IDs and avoids
undefined behavior for invalid ones.

Fixes the below:
drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.c:448
kfd_dbg_trap_clear_dev_address_watch() error: buffer overflow
'pdd->watch_points' 4 <= u32max user_rl='0-3,2147483648-u32max' uncapped

drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.c
    433 int kfd_dbg_trap_clear_dev_address_watch(struct kfd_process_device *pdd,
    434                                         uint32_t watch_id)
    435 {
    436         int r;
    437
    438         if (!kfd_dbg_owns_dev_watch_id(pdd, watch_id))

kfd_dbg_owns_dev_watch_id() doesn't check for negative values so if
watch_id is larger than INT_MAX it leads to a buffer overflow.
(Negative shifts are undefined).

    439                 return -EINVAL;
    440
    441         if (!pdd->dev->kfd->shared_resources.enable_mes) {
    442                 r = debug_lock_and_unmap(pdd->dev->dqm);
    443                 if (r)
    444                         return r;
    445         }
    446
    447         amdgpu_gfx_off_ctrl(pdd->dev->adev, false);
--> 448         pdd->watch_points[watch_id] = pdd->dev->kfd2kgd->clear_address_watch(
    449                                                         pdd->dev->adev,
    450                                                         watch_id);

v2: (as per, Jonathan Kim)
 - Add early watch_id >= MAX_WATCH_ADDRESSES validation in the set path to
   match the clear path.
 - Drop the redundant bounds check in kfd_dbg_owns_dev_watch_id().

Fixes: e0f85f4 ("drm/amdkfd: add debug set and clear address watch points operation")
	Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
	Cc: Jonathan Kim <jonathan.kim@amd.com>
	Cc: Felix Kuehling <felix.kuehling@amd.com>
	Cc: Alex Deucher <alexander.deucher@amd.com>
	Cc: Christian König <christian.koenig@amd.com>
	Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
	Reviewed-by: Jonathan Kim <jonathan.kim@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 5a19302)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
…FX11

jira KERNEL-1502
cve CVE-2026-53143
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Andrew Martin <andrew.martin@amd.com>
commit 6fa41db

The v11 MQD manager incorrectly assigned the CP-compute variants of
checkpoint_mqd/restore_mqd for KFD_MQD_TYPE_SDMA queues. These functions
use sizeof(struct v11_compute_mqd) (2048 bytes) instead of sizeof(struct
v11_sdma_mqd) (512 bytes), causing a 1536-byte overflow.

During CRIU checkpoint of an SDMA queue on Navi3x:
- checkpoint_mqd() reads 2048 bytes from a 512-byte SDMA MQD buffer,
  leaking 1536 bytes of adjacent GTT memory to userspace

During CRIU restore:
- restore_mqd() writes 2048 bytes into a 512-byte SDMA MQD buffer,
  corrupting 1536 bytes of adjacent GTT memory (often the ring buffer
  or neighboring MQDs)

This is a copy-paste regression unique to v11. All other ASIC backends
(cik, vi, v9, v10, v12) correctly use the SDMA-specific variants.

Add checkpoint_mqd_sdma() and restore_mqd_sdma() functions that properly
handle the smaller v11_sdma_mqd structure, matching the pattern used in
other MQD managers.

Fixes: cc009e6 ("drm/amdkfd: Add KFD support for soc21 v3")
Assisted-by: Claude:Sonnet 4-5
	Signed-off-by: Andrew Martin <andrew.martin@amd.com>
	Acked-by: Alex Deucher <alexander.deucher@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 6fa41db)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-53136
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Harry Wentland <harry.wentland@amd.com>
commit 5a7f0ef

[Why & How]
The VBIOS integrated info tables (v1_11 and v2_1) contain HdmiRegNum and
Hdmi6GRegNum fields that are used as loop bounds when copying retimer I2C
register settings into fixed-size arrays (dp*_ext_hdmi_reg_settings[9]
and dp*_ext_hdmi_6g_reg_settings[3]). These u8 fields are not validated
before use, so a malformed VBIOS can specify values up to 255, causing an
out-of-bounds heap write during driver probe.

Clamp each register count to the destination array size using min_t()
before the copy loops, in both get_integrated_info_v11() and
get_integrated_info_v2_1().

Assisted-by: GitHub Copilot:claude-opus-4.6
	Reviewed-by: Alex Hung <alex.hung@amd.com>
	Signed-off-by: Harry Wentland <harry.wentland@amd.com>
	Signed-off-by: Ray Wu <ray.wu@amd.com>
	Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 5a7f0ef)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-53329
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Harry Wentland <harry.wentland@amd.com>
commit 3766856

[Why & How]
dal_vector_reserve() computes the allocation size as
"capacity * vector->struct_size" using uint32_t arithmetic, which can
silently wrap to a small value on overflow. This would cause krealloc to
return a smaller buffer than expected, leading to heap overflows on
subsequent vector appends.

Replace krealloc() with krealloc_array() which performs an internal
overflow check and returns NULL on wrap, preventing the issue.

Fixes: 2004f45 ("drm/amd/display: Use kernel alloc/free")
Assisted-by: Copilot:claude-opus-4.6
	Reviewed-by: Alex Hung <alex.hung@amd.com>
	Signed-off-by: Harry Wentland <harry.wentland@amd.com>
	Signed-off-by: Ray Wu <ray.wu@amd.com>
	Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 3766856)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-63879
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Christian König <christian.koenig@amd.com>
commit c08972f
Empty-Commit: Cherry-Pick Conflicts during history rebuild.
Will be included in final tarball splat. Ref for failed cherry-pick at:
ciq/ciq_backports/kernel-5.14.0-687.41.1.el9_8/c08972f5.failed

The notifier sequence must only be read once or otherwise we could work
with invalid pages.

While at it also fix the coding style, e.g. drop the pre-initialized
return value and use the common define for 2G range.

	Signed-off-by: Christian König <christian.koenig@amd.com>
	Reviewed-by: Vitaly Prosyak <vitaly.prosyak@amd.com>
	Tested-by: Vitaly Prosyak <vitaly.prosyak@amd.com>
	Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit c08972f)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>

# Conflicts:
#	drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.c
…e_text_cmd()

jira KERNEL-1502
cve CVE-2026-63888
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Michael Bommarito <michael.bommarito@gmail.com>
commit 778c2ab
Empty-Commit: Cherry-Pick Conflicts during history rebuild.
Will be included in final tarball splat. Ref for failed cherry-pick at:
ciq/ciq_backports/kernel-5.14.0-687.41.1.el9_8/778c2ab1.failed

Two latent bugs in the Text-phase handler, both present since the
original LIO integration in commit e48354c ("iscsi-target: Add
iSCSI fabric support for target v4.1"):

1) DataDigest CRC buffer overread (4 bytes past text_in).

   text_in is kzalloc()'d at ALIGN(payload_length, 4).  rx_size is then
   incremented by ISCSI_CRC_LEN to make room for the received DataDigest
   in the iovec, but the same (now-bumped) rx_size is passed as the
   buffer length to iscsit_crc_buf():

       if (conn->conn_ops->DataDigest) {
               ...
               rx_size += ISCSI_CRC_LEN;
       }
       ...
       if (conn->conn_ops->DataDigest) {
               data_crc = iscsit_crc_buf(text_in, rx_size, 0, NULL);

   iscsit_crc_buf() walks rx_size bytes of text_in with crc32c(), so
   when DataDigest is negotiated it reads 4 bytes past the end of the
   text_in allocation.  KASAN reproduces this directly on the unpatched
   mainline tree as slab-out-of-bounds in crc32c() called from the Text
   PDU path.  The OOB bytes feed crc32c() and are then compared against
   the initiator-supplied checksum, so the value does not flow back to
   the attacker, but the kernel does read past the buffer on every Text
   PDU with DataDigest=CRC32C.

   Fix by passing the actual padded payload length
   (ALIGN(payload_length, 4)) that was used for the kzalloc().

2) Stale cmd->text_in_ptr re-free (double-free) on ERL>0 bad DataDigest
   drop.

   On DataDigest mismatch with ErrorRecoveryLevel > 0 the handler
   silently drops the PDU and lets the initiator plug the CmdSN gap:

               kfree(text_in);
               return 0;

   cmd->text_in_ptr still points at the freed buffer.  The next Text
   Request on the same ITT re-enters iscsit_setup_text_cmd(), which
   unconditionally does

       kfree(cmd->text_in_ptr);
       cmd->text_in_ptr = NULL;

   freeing the same pointer a second time.  Session teardown via
   iscsit_release_cmd() has the same shape and hits the same double-free
   if the connection is dropped before a second Text Request arrives.

   On an unmodified mainline tree the bug-1 CRC overread fires first on
   the initial valid Text Request and perturbs the subsequent state, so
   #4 was isolated by building a kernel with only the bug-1 hunk of this
   patch applied plus temporary printk() observability around the three
   relevant kfree() sites.  The observability prints are not part of
   this patch.  On that build, a three-PDU Text Request sequence after
   login produces two back-to-back splats:

       BUG: KASAN: double-free in iscsit_setup_text_cmd+0x??
       BUG: KASAN: double-free in iscsit_release_cmd+0x??

   showing the same pointer freed in the ERL>0 drop path and again in
   iscsit_setup_text_cmd() (next Text Request on the same ITT) and once
   more in iscsit_release_cmd() (session teardown).  On distro kernels
   with CONFIG_SLAB_FREELIST_HARDENED=y (default) the double-free
   becomes a remote kernel BUG(); on non-hardened kernels it corrupts
   the slab freelist.

   Fix by clearing cmd->text_in_ptr after the kfree() in the ERL>0 drop
   path.  With both hunks applied #4 is directly observable on the stock
   tree without observability printks; fixing bug-1 alone would mask #4
   less, not more, so the hunks are submitted together.

Both fixes are one-liners.  The Text PDU state machine is unchanged and
the wire protocol is unaffected.

Fixes: e48354c ("iscsi-target: Add iSCSI fabric support for target v4.1")
	Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-4-7
	Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
	Tested-by: John Garry <john.g.garry@oracle.com>
	Reviewed-by: John Garry <john.g.garry@oracle.com>
	Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit 778c2ab)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>

# Conflicts:
#	drivers/target/iscsi/iscsi_target.c
jira KERNEL-1502
cve CVE-2026-46120
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Maoyi Xie <maoyixie.tju@gmail.com>
commit 1d324c2

After commit 5e72ce3 ("net: ipv6: Use link netns in newlink() of
rtnl_link_ops"), ip6erspan_newlink() correctly resolves the per-netns
ip6gre hash via link_net. ip6erspan_changelink() was not converted in
that series and still uses dev_net(dev), which diverges from the
device's creation netns after IFLA_NET_NS_FD migration.

This re-inserts the tunnel into the wrong per-netns hash. The
original netns keeps a stale entry. When that netns is later
destroyed, ip6gre_exit_rtnl_net() walks the stale entry, producing a
slab-use-after-free reported by KASAN, followed by a kernel BUG at
net/core/dev.c (LIST_POISON1) in unregister_netdevice_many_notify().

Reachable from an unprivileged user namespace (unshare --user
--map-root-user --net).

ip6gre_changelink() earlier in the same file already uses the cached
t->net; only ip6erspan_changelink() has the wrong shape.

Fixes: 2d66503 ("net: ip6_gre: Fix ip6erspan hlen calculation")
	Cc: stable@vger.kernel.org # v5.15+
	Signed-off-by: Maoyi Xie <maoyi.xie@ntu.edu.sg>
	Reviewed-by: Eric Dumazet <edumazet@google.com>
	Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260430103318.3206018-1-maoyi.xie@ntu.edu.sg
	Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit 1d324c2)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-64048
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Xiang Mei <xmei5@asu.edu>
commit 2777400

On the SMC-D client, slot 0 of ini->ism_dev[]/ini->ism_chid[] is
reserved for an SMC-Dv1 device. smc_find_ism_v2_device_clnt()
populates V2 entries starting at index 1, so when no V1 device is
selected slot 0 is left in its kzalloc()'ed state with ism_dev[0] ==
NULL and ism_chid[0] == 0.

smc_v2_determine_accepted_chid() then matches the peer's CHID against
the array starting from index 0 using the CHID alone. A malicious
peer replying to a SMC-Dv2-only proposal with d1.chid == 0 matches
the empty slot, ini->ism_selected becomes 0, and the subsequent
ism_dev[0]->lgr_lock dereference in smc_conn_create() faults at
offsetof(struct smcd_dev, lgr_lock) == 0x68:

  BUG: KASAN: null-ptr-deref in _raw_spin_lock_bh+0x79/0xe0
  Write of size 4 at addr 0000000000000068 by task exploit/144
  Call Trace:
   _raw_spin_lock_bh
   smc_conn_create (net/smc/smc_core.c:1997)
   __smc_connect (net/smc/af_smc.c:1447)
   smc_connect (net/smc/af_smc.c:1720)
   __sys_connect
   __x64_sys_connect
   do_syscall_64

Require ism_dev[i] to be non-NULL before accepting a CHID match.

Fixes: a7c9c5f ("net/smc: CLC accept / confirm V2")
	Reported-by: Weiming Shi <bestswngs@gmail.com>
Assisted-by: Claude:claude-opus-4-7
	Signed-off-by: Xiang Mei <xmei5@asu.edu>
Link: https://patch.msgid.link/20260511062138.2839584-1-xmei5@asu.edu
	Signed-off-by: Paolo Abeni <pabeni@redhat.com>
(cherry picked from commit 2777400)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-53189
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Yin Tirui <yintirui@huawei.com>
commit 8d87805
Empty-Commit: Cherry-Pick Conflicts during history rebuild.
Will be included in final tarball splat. Ref for failed cherry-pick at:
ciq/ciq_backports/kernel-5.14.0-687.41.1.el9_8/8d878059.failed

__split_huge_pmd_locked() updates the file/shmem RSS counter after
dropping the PMD mapping's folio reference.  If folio_put() drops the last
reference, mm_counter_file() can later read freed folio state via
folio_test_swapbacked().

Move the counter update before folio_put().

Link: https://lore.kernel.org/20260526101337.1984081-1-yintirui@huawei.com
Fixes: fadae29 ("thp: use mm_file_counter to determine update which rss counter")
	Signed-off-by: Yin Tirui <yintirui@huawei.com>
	Reviewed-by: Lorenzo Stoakes <ljs@kernel.org>
	Acked-by: David Hildenbrand (arm) <david@kernel.org>
	Reviewed-by: Lance Yang <lance.yang@linux.dev>
	Reviewed-by: Dev Jain <dev.jain@arm.com>
	Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
	Cc: Barry Song <baohua@kernel.org>
	Cc: Chen Jun <chenjun102@huawei.com>
	Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
	Cc: Liam R. Howlett <liam@infradead.org>
	Cc: Nico Pache <npache@redhat.com>
	Cc: Ryan Roberts <ryan.roberts@arm.com>
	Cc: Vlastimil Babka <vbabka@kernel.org>
	Cc: Yang Shi <yang.shi@linux.alibaba.com>
	Cc: Zi Yan <ziy@nvidia.com>
	Cc: <stable@vger.kernel.org>
	Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
(cherry picked from commit 8d87805)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>

# Conflicts:
#	mm/huge_memory.c
jira KERNEL-1502
cve CVE-2026-52991
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Edward Adam Davis <eadavis@qq.com>
commit a5b9800

A potential race condition exists between pressure write and cgroup file
release regarding the priv member of struct kernfs_open_file, which
triggers the uaf reported in [1].

Consider the following scenario involving execution on two separate CPUs:

   CPU0					CPU1
   ====					====
					vfs_rmdir()
					kernfs_iop_rmdir()
					cgroup_rmdir()
					cgroup_kn_lock_live()
					cgroup_destroy_locked()
					cgroup_addrm_files()
					cgroup_rm_file()
					kernfs_remove_by_name()
					kernfs_remove_by_name_ns()
 vfs_write()				__kernfs_remove()
 new_sync_write()			kernfs_drain()
 kernfs_fop_write_iter()		kernfs_drain_open_files()
 cgroup_file_write()			kernfs_release_file()
 pressure_write()			cgroup_file_release()
 ctx = of->priv;
					kfree(ctx);
 					of->priv = NULL;
					cgroup_kn_unlock()
 cgroup_kn_lock_live()
 cgroup_get(cgrp)
 cgroup_kn_unlock()
 if (ctx->psi.trigger)  // here, trigger uaf for ctx, that is of->priv

The cgroup_rmdir() is protected by the cgroup_mutex, it also safeguards
the memory deallocation of of->priv performed within cgroup_file_release().
However, the operations involving of->priv executed within pressure_write()
are not entirely covered by the protection of cgroup_mutex. Consequently,
if the code in pressure_write(), specifically the section handling the
ctx variable executes after cgroup_file_release() has completed, a uaf
vulnerability involving of->priv is triggered.

Therefore, the issue can be resolved by extending the scope of the
cgroup_mutex lock within pressure_write() to encompass all code paths
involving of->priv, thereby properly synchronizing the race condition
occurring between cgroup_file_release() and pressure_write().

And, if an live kn lock can be successfully acquired while executing
the pressure write operation, it indicates that the cgroup deletion
process has not yet reached its final stage; consequently, the priv
pointer within open_file cannot be NULL. Therefore, the operation to
retrieve the ctx value must be moved to a point *after* the live kn
lock has been successfully acquired.

In another situation, specifically after entering cgroup_kn_lock_live()
but before acquiring cgroup_mutex, there exists a different class of
race condition:

CPU0: write memory.pressure               CPU1: write cgroup.pressure=0
===========================		  =============================

kernfs_fop_write_iter()
 kernfs_get_active_of(of)
 pressure_write()
   cgroup_kn_lock_live(memory.pressure)
     cgroup_tryget(cgrp)
     kernfs_break_active_protection(kn)
     ... blocks on cgroup_mutex

                                     	  cgroup_pressure_write()
                                     	  cgroup_kn_lock_live(cgroup.pressure)
                                     	  cgroup_file_show(memory.pressure, false)
                                     	    kernfs_show(false)
                                     	      kernfs_drain_open_files()
                                     	        cgroup_file_release(of)
                                     	          kfree(ctx)
                                     	            of->priv = NULL
                                     	  cgroup_kn_unlock()

   ... acquires cgroup_mutex
   ctx = of->priv;        // may now be NULL
   if (ctx->psi.trigger)  // NULL dereference

Consequently, there is a possibility that of->priv is NULL, the pressure
write needs to check for this.

Now that the scope of the cgroup_mutex has been expanded, the original
explicit cgroup_get/put operations are no longer necessary, this is
because acquiring/releasing the live kn lock inherently executes a
cgroup get/put operation.

[1]
BUG: KASAN: slab-use-after-free in pressure_write+0xa4/0x210 kernel/cgroup/cgroup.c:4011
Call Trace:
 pressure_write+0xa4/0x210 kernel/cgroup/cgroup.c:4011
 cgroup_file_write+0x36f/0x790 kernel/cgroup/cgroup.c:4311
 kernfs_fop_write_iter+0x3b0/0x540 fs/kernfs/file.c:352

Allocated by task 9352:
 cgroup_file_open+0x90/0x3a0 kernel/cgroup/cgroup.c:4256
 kernfs_fop_open+0x9eb/0xcb0 fs/kernfs/file.c:724
 do_dentry_open+0x83d/0x13e0 fs/open.c:949

Freed by task 9353:
 cgroup_file_release+0xd6/0x100 kernel/cgroup/cgroup.c:4283
 kernfs_release_file fs/kernfs/file.c:764 [inline]
 kernfs_drain_open_files+0x392/0x720 fs/kernfs/file.c:834
 kernfs_drain+0x470/0x600 fs/kernfs/dir.c:525

Fixes: 0e94682 ("psi: introduce psi monitor")
	Reported-by: syzbot+33e571025d88efd1312c@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=33e571025d88efd1312c
	Tested-by: syzbot+33e571025d88efd1312c@syzkaller.appspotmail.com
	Signed-off-by: Edward Adam Davis <eadavis@qq.com>
	Reviewed-by: Chen Ridong <chenridong@huaweicloud.com>
	Signed-off-by: Tejun Heo <tj@kernel.org>
(cherry picked from commit a5b9800)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Chen Ridong <chenridong@huawei.com>
commit 94a4acf

Setting of->priv to NULL when the file is released enables earlier bug
detection. This allows potential bugs to manifest as NULL pointer
dereferences rather than use-after-free errors[1], which are generally more
difficult to diagnose.

[1] https://lore.kernel.org/cgroups/38ef3ff9-b380-44f0-9315-8b3714b0948d@huaweicloud.com/T/#m8a3b3f88f0ff3da5925d342e90043394f8b2091b
	Signed-off-by: Chen Ridong <chenridong@huawei.com>
	Signed-off-by: Tejun Heo <tj@kernel.org>
(cherry picked from commit 94a4acf)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit d859704

In preparation for addressing issues in the timer_get() and timer_set()
functions of posix CPU timers.

No functional change.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit d859704)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit b3e866b

There is no point to return the interval for timers which have been
disarmed.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit b3e866b)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit 1c50284

timer_gettime() must return the remaining time to the next expiry of a
timer or 0 if the timer is not armed and no signal pending, but posix CPU
timers fail to forward a timer which is already expired.

Add the required logic to address that.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit 1c50284)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit d786b8b

Expired SIGEV_NONE oneshot timers must return 0 nsec for the expiry time in
timer_get(), but the posix CPU timer implementation returns 1 nsec.

Add the missing conditional.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit d786b8b)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit 5f9d4a1

Expired SIGEV_NONE oneshot timers must return 0 nsec for the expiry time in
timer_get(), but the posix CPU timer implementation returns 1 nsec.

Add the missing conditional.

This will be cleaned up in a follow up patch.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit 5f9d4a1)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit d471ff3

Reuse the split out __posix_cpu_timer_get() function which does already the
right thing.

No functional change.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit d471ff3)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit bd29d77

There is no point in arming SIGEV_NONE timers as they never deliver a
signal. timer_gettime() is handling the expiry time correctly and that's
all SIGEV_NONE timers care about.

Prevent arming them and remove the expiry handler code which just disarms
them.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit bd29d77)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit c444626

posix_cpu_timer_set() uses @Val as variable for the current time. That's
confusing at best.

Use @now as anywhere else and rewrite the confusing comment about clock
sampling.

No functional change.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit c444626)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit 286bfac

A leftover from historical code which describes fiction.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit 286bfac)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit c20b99e

Avoid the late sighand lock/unlock dance when a timer is not armed to
enforce reevaluation of the timer base so that the process wide CPU timer
sampling can be disabled.

Do it right at the point where the arming decision is made which already
has sighand locked.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit c20b99e)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author Thomas Gleixner <tglx@linutronix.de>
commit bfa408f

No point in doing this all over the place.

	Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
	Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
	Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
	Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
(cherry picked from commit bfa408f)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
jira KERNEL-1502
cve CVE-2026-64370
Rebuild_History Non-Buildable kernel-5.14.0-687.41.1.el9_8
commit-author WenTao Liang <vulab@iscas.ac.cn>
commit 87bd2ad

In do_cpu_nanosleep(), posix_cpu_timer_create() takes a pid reference
via get_pid() and stores it in timer.it.cpu.pid. If the subsequent
posix_cpu_timer_set() call fails, the function returns immediately
without calling posix_cpu_timer_del() to release the pid reference,
causing a leak.

Fix it by calling posix_cpu_timer_del() before the unlock-and-return
on the error path, consistent with the other exit paths in the same
function.

Fixes: 1da177e ("Linux-2.6.12-rc2")
	Signed-off-by: WenTao Liang <vulab@iscas.ac.cn>
	Signed-off-by: Thomas Gleixner <tglx@kernel.org>
	Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
	Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260611161738.97043-1-vulab@iscas.ac.cn
(cherry picked from commit 87bd2ad)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
Rebuild_History BUILDABLE
Rebuilding Kernel from rpm changelog with Fuzz Limit: 87.50%
Number of commits in upstream range v5.14~1..kernel-mainline: 394115
Number of commits in rpm: 51
Number of commits matched with upstream: 34 (66.67%)
Number of commits in upstream but not in rpm: 394081
Number of commits NOT found in upstream: 17 (33.33%)

Rebuilding Kernel on Branch rocky9_8_rebuild_kernel-5.14.0-687.41.1.el9_8 for kernel-5.14.0-687.41.1.el9_8
Clean Cherry Picks: 29 (85.29%)
Empty Cherry Picks: 5 (14.71%)
_______________________________

Full Details Located here:
ciq/ciq_backports/kernel-5.14.0-687.41.1.el9_8/rebuild.details.txt

Includes:
* git commit header above
* Empty Commits with upstream SHA
* RPM ChangeLog Entries that could not be matched

Individual Empty Commit failures contained in the same containing directory.
The git message for empty commits will have the path for the failed commit.
File names are the first 8 characters of the upstream SHA
@PlaidCat PlaidCat self-assigned this Aug 21, 2026
@PlaidCat
PlaidCat requested review from a team August 21, 2026 04:50

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

🥌

Approved since I think you've got the correct content. It does look like a bunch of the smb commits that are marked as not in upstream do appear to be in upstream. That is a bit puzzling.

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.

3 participants