Skip to content

[LTS 8.6] CVE-2025-39697, CVE-2025-38250, CVE-2025-39971#949

Open
pvts-mat wants to merge 4 commits intoctrliq:ciqlts8_6from
pvts-mat:ciqlts8_6-CVE-batch-24
Open

[LTS 8.6] CVE-2025-39697, CVE-2025-38250, CVE-2025-39971#949
pvts-mat wants to merge 4 commits intoctrliq:ciqlts8_6from
pvts-mat:ciqlts8_6-CVE-batch-24

Conversation

@pvts-mat
Copy link
Contributor

@pvts-mat pvts-mat commented Mar 9, 2026

[LTS 8.6]

CVE-2025-39697 VULN-136531
CVE-2025-38250 VULN-72342
CVE-2025-39971 VULN-158747

Commits

CVE-2025-39697

nfs: fold nfs_page_group_lock_subrequests into nfs_lock_and_join_requests

jira VULN-136531
cve-pre CVE-2025-39697
commit-author Christoph Hellwig <hch@lst.de>
commit 25edbcac6e32eab345e470d56ca9974a577b878b
upstream-diff Used LTS 9.2 backport
  d4d77896d3b217118894bd8f1950bca7a56c4f7f for clean cherry pick
NFS: Fix a race when updating an existing write

jira VULN-136531
cve CVE-2025-39697
commit-author Trond Myklebust <trond.myklebust@hammerspace.com>
commit 76d2e3890fb169168c73f2e4f8375c7cc24a765e
upstream-diff Used LTS 9.2 backport
  f49f6cc15b63e86352730672cd1d93dd66dfdc3b for clean cherry pick

For this CVE the solution for LTS 9.2 was ported (see #746).

For the prerequisite, the only difference between LTS 9.2 backport and the upstream was in the nfs_lock_and_join_requests() function, and it has the same form in ciqlts8_6 as it had in ciqlts9_2 right before that change.

nfs_lock_and_join_requests() in ciqlts9_2 at d4d7789~1 = 7695f98:

static struct nfs_page *
nfs_lock_and_join_requests(struct page *page)
{
struct inode *inode = page_file_mapping(page)->host;
struct nfs_page *head;
int ret;
/*
* A reference is taken only on the head request which acts as a
* reference to the whole page group - the group will not be destroyed
* until the head reference is released.
*/
head = nfs_find_and_lock_page_request(page);
if (IS_ERR_OR_NULL(head))
return head;
/* lock each request in the page group */
ret = nfs_page_group_lock_subrequests(head);
if (ret < 0) {
nfs_unlock_and_release_request(head);
return ERR_PTR(ret);
}
nfs_join_page_group(head, inode);
return head;
}

nfs_lock_and_join_requests() in ciqlts8_6:

static struct nfs_page *
nfs_lock_and_join_requests(struct page *page)
{
struct inode *inode = page_file_mapping(page)->host;
struct nfs_page *head;
int ret;
/*
* A reference is taken only on the head request which acts as a
* reference to the whole page group - the group will not be destroyed
* until the head reference is released.
*/
head = nfs_find_and_lock_page_request(page);
if (IS_ERR_OR_NULL(head))
return head;
/* lock each request in the page group */
ret = nfs_page_group_lock_subrequests(head);
if (ret < 0) {
nfs_unlock_and_release_request(head);
return ERR_PTR(ret);
}
nfs_join_page_group(head, inode);
return head;
}

This difference stemmed from the missing backport of b193a78, see commit message of d4d7789:

upstream-diff Used linux-5.15.y backport
fd947b71cc1b86c4731f8d470f5ab5df94e838d8 as baseline, then accounted
in 'nfs_lock_and_join_requests()' for the missing
b193a78 backport.

This backport is missing from ciqlts8_6 as well, so the manual conflict resolution of backporting upstream 25edbca would boil down to what was done ciqlts9_2 anyway, hence it was justified to use it directly.

Unlike the prerequisite, the backport of the CVE fix could have been taken from linux-5.15.y directly without any conflicts, but it was chosen to stick to ciqlts9_2 commits for the sake of consistency.

CVE-2025-38250

Bluetooth: hci_core: Fix use-after-free in vhci_flush()

jira VULN-72342
cve CVE-2025-38250
commit-author Kuniyuki Iwashima <kuniyu@google.com>
commit 1d6123102e9fbedc8d25bf4731da6d513173e49e
upstream-diff Resolved contextual conflicts due to the missing backports
  of 0d151a103775dd9645c78c97f77d6e2a5298d913 and
  989fa5171f005ecf63440057218d8aeb1795287d

The situation is very similar as in the fix for LTS 9.2 (see #746). The synchronization mechanism introduced by the fix is largely independent of the existing code and the only clash could be found in the hci_unregister_dev() function, but it was merely a context conflict.

CVE-2025-39971

i40e: fix idx validation in config queues msg

jira VULN-158747
cve CVE-2025-39971
commit-author Lukasz Czapnik <lukasz.czapnik@intel.com>
commit f1ad24c5abe1eaef69158bac1405a74b3c365115
upstream-diff Resolved context conflicts due to the missing backport of
  230f3d53a5477bf8b04e649dca67da85635cd1eb. No actual diffs from the
  upstream.

The solution is the same as in the linux-5.15.y backport 1fa0aadade34481c567cdf4a897c0d4e4d548bd1 which could have actually been used for the clean cherry pick.

kABI check: passed

[0/1] kabi_check_kernel	Check ABI of kernel [ciqlts8_6-CVE-batch-24]	_kabi_check_kernel__x86_64--test--ciqlts8_6-CVE-batch-24
ninja explain: output state/kernels/ciqlts8_6-CVE-batch-24/x86_64/kabi_checked doesn't exist
ninja explain: state/kernels/ciqlts8_6-CVE-batch-24/x86_64/kabi_checked is dirty
+ dist_git_version=el-8.6
+ local_version=ciqlts8_6-CVE-batch-24
+ arch=x86_64
+ user=pvts
+ buildmachine=x86_64--build--ciqlts8_6
+ virsh_timeout=600
+ ssh_daemon_wait=20
+ src_dir=/mnt/code/kernel-dist-git-el-8.6
+ build_dir=/mnt/build_files/kernel-src-tree-ciqlts8_6-CVE-batch-24
+ sudo chmod +x /data/src/ctrliq-github-haskell/kernel-dist-git-el-8.6/SOURCES/check-kabi
+ ninja-back/virssh.xsh --max 8 --shutdown-on-success --shutdown-on-failure --timeout 600 --ssh-daemon-wait 20 pvts x86_64--build--ciqlts8_6 ''\''/mnt/code/kernel-dist-git-el-8.6/SOURCES/check-kabi'\'' -k '\''/mnt/code/kernel-dist-git-el-8.6/SOURCES/Module.kabi_x86_64'\'' -s '\''/mnt/build_files/kernel-src-tree-ciqlts8_6-CVE-batch-24/Module.symvers'\'''
kABI check passed
+ touch state/kernels/ciqlts8_6-CVE-batch-24/x86_64/kabi_checked

Boot test: passed

boot-test.log

Kselftests: passed relative

Reference

kselftests–ciqlts8_6–run1.log
kselftests–ciqlts8_6–run2.log

Patch

kselftests–ciqlts8_6-CVE-batch-24–run1.log
kselftests–ciqlts8_6-CVE-batch-24–run2.log
kselftests–ciqlts8_6-CVE-batch-24–run3.log

Comparison

The tests results for the reference and the patch are the same.

$ ktests.xsh diff  kselftests*.log

Column    File
--------  --------------------------------------------
Status0   kselftests--ciqlts8_6--run1.log
Status1   kselftests--ciqlts8_6--run2.log
Status2   kselftests--ciqlts8_6-CVE-batch-24--run1.log
Status3   kselftests--ciqlts8_6-CVE-batch-24--run2.log
Status4   kselftests--ciqlts8_6-CVE-batch-24--run3.log

TestCase                                     Status0  Status1  Status2  Status3  Status4  Summary
android:run.sh                               skip     skip     skip     skip     skip     same
bpf:get_cgroup_id_user                       pass     pass     pass     pass     pass     same
bpf:test_bpftool.sh                          pass     pass     pass     pass     pass     same
bpf:test_bpftool_build.sh                    pass     pass     pass     pass     pass     same
bpf:test_bpftool_metadata.sh                 pass     pass     pass     pass     pass     same
bpf:test_cgroup_storage                      pass     pass     pass     pass     pass     same
bpf:test_dev_cgroup                          pass     pass     pass     pass     pass     same
bpf:test_doc_build.sh                        pass     pass     pass     pass     pass     same
bpf:test_flow_dissector.sh                   pass     pass     pass     pass     pass     same
bpf:test_lirc_mode2.sh                       pass     pass     pass     pass     pass     same
bpf:test_lpm_map                             pass     pass     pass     pass     pass     same
bpf:test_lru_map                             pass     pass     pass     pass     pass     same
bpf:test_lwt_ip_encap.sh                     pass     pass     pass     pass     pass     same
bpf:test_lwt_seg6local.sh                    pass     pass     pass     pass     pass     same
bpf:test_netcnt                              pass     pass     pass     pass     pass     same
bpf:test_offload.py                          fail     fail     fail     fail     fail     same
bpf:test_skb_cgroup_id.sh                    pass     pass     pass     pass     pass     same
bpf:test_sock                                pass     pass     pass     pass     pass     same
bpf:test_sock_addr.sh                        pass     pass     pass     pass     pass     same
bpf:test_sysctl                              pass     pass     pass     pass     pass     same
bpf:test_tag                                 pass     pass     pass     pass     pass     same
bpf:test_tc_edt.sh                           pass     pass     pass     pass     pass     same
bpf:test_tc_tunnel.sh                        pass     pass     pass     pass     pass     same
bpf:test_tcp_check_syncookie.sh              pass     pass     pass     pass     pass     same
bpf:test_tcpnotify_user                      pass     pass     pass     pass     pass     same
bpf:test_tunnel.sh                           pass     pass     pass     pass     pass     same
bpf:test_verifier                            pass     pass     pass     pass     pass     same
bpf:test_verifier_log                        pass     pass     pass     pass     pass     same
bpf:test_xdp_meta.sh                         pass     pass     pass     pass     pass     same
bpf:test_xdp_redirect.sh                     pass     pass     pass     pass     pass     same
bpf:test_xdp_veth.sh                         pass     pass     pass     pass     pass     same
bpf:test_xdp_vlan_mode_generic.sh            pass     pass     pass     pass     pass     same
bpf:test_xdp_vlan_mode_native.sh             pass     pass     pass     pass     pass     same
bpf:test_xdping.sh                           pass     pass     pass     pass     pass     same
bpf:urandom_read                             pass     pass     pass     pass     pass     same
breakpoints:breakpoint_test                  pass     pass     pass     pass     pass     same
capabilities:test_execve                     pass     pass     pass     pass     pass     same
core:close_range_test                        pass     pass     pass     pass     pass     same
cpu-hotplug:cpu-on-off-test.sh               pass     pass     pass     pass     pass     same
cpufreq:main.sh                              fail     fail     fail     fail     fail     same
exec:execveat                                pass     pass     pass     pass     pass     same
firmware:fw_run_tests.sh                     skip     skip     skip     skip     skip     same
fpu:run_test_fpu.sh                          skip     skip     skip     skip     skip     same
fpu:test_fpu                                 pass     pass     pass     pass     pass     same
ftrace:ftracetest                            fail     fail     fail     fail     fail     same
futex:run.sh                                 pass     pass     pass     pass     pass     same
gpio:gpio-mockup.sh                          fail     fail     fail     fail     fail     same
intel_pstate:run.sh                          pass     pass     pass     pass     pass     same
ipc:msgque                                   pass     pass     pass     pass     pass     same
kcmp:kcmp_test                               pass     pass     pass     pass     pass     same
kexec:test_kexec_file_load.sh                skip     skip     skip     skip     skip     same
kexec:test_kexec_load.sh                     skip     skip     skip     skip     skip     same
kvm:access_tracking_perf_test                fail     fail     fail     fail     fail     same
kvm:amx_test                                 fail     fail     fail     fail     fail     same
kvm:cr4_cpuid_sync_test                      fail     fail     fail     fail     fail     same
kvm:debug_regs                               fail     fail     fail     fail     fail     same
kvm:demand_paging_test                       pass     pass     pass     pass     pass     same
kvm:dirty_log_perf_test                      pass     pass     pass     pass     pass     same
kvm:dirty_log_test                           fail     fail     fail     fail     fail     same
kvm:emulator_error_test                      fail     fail     fail     fail     fail     same
kvm:evmcs_test                               fail     fail     fail     fail     fail     same
kvm:get_cpuid_test                           fail     fail     fail     fail     fail     same
kvm:get_msr_index_features                   fail     fail     fail     fail     fail     same
kvm:hardware_disable_test                    pass     pass     pass     pass     pass     same
kvm:hyperv_clock                             fail     fail     fail     fail     fail     same
kvm:hyperv_cpuid                             fail     fail     fail     fail     fail     same
kvm:hyperv_features                          fail     fail     fail     fail     fail     same
kvm:kvm_binary_stats_test                    pass     pass     pass     pass     pass     same
kvm:kvm_create_max_vcpus                     skip     skip     skip     skip     skip     same
kvm:kvm_page_table_test                      pass     pass     pass     pass     pass     same
kvm:kvm_pv_test                              fail     fail     fail     fail     fail     same
kvm:memslot_modification_stress_test         pass     pass     pass     pass     pass     same
kvm:memslot_perf_test                        fail     fail     fail     fail     fail     same
kvm:mmio_warning_test                        fail     fail     fail     fail     fail     same
kvm:mmu_role_test                            fail     fail     fail     fail     fail     same
kvm:platform_info_test                       fail     fail     fail     fail     fail     same
kvm:rseq_test                                fail     fail     fail     fail     fail     same
kvm:set_boot_cpu_id                          fail     fail     fail     fail     fail     same
kvm:set_memory_region_test                   pass     pass     pass     pass     pass     same
kvm:set_sregs_test                           fail     fail     fail     fail     fail     same
kvm:smm_test                                 fail     fail     fail     fail     fail     same
kvm:state_test                               fail     fail     fail     fail     fail     same
kvm:steal_time                               pass     pass     pass     pass     pass     same
kvm:svm_int_ctl_test                         fail     fail     fail     fail     fail     same
kvm:svm_vmcall_test                          fail     fail     fail     fail     fail     same
kvm:sync_regs_test                           fail     fail     fail     fail     fail     same
kvm:tsc_msrs_test                            fail     fail     fail     fail     fail     same
kvm:userspace_msr_exit_test                  fail     fail     fail     fail     fail     same
kvm:vmx_apic_access_test                     fail     fail     fail     fail     fail     same
kvm:vmx_close_while_nested_test              fail     fail     fail     fail     fail     same
kvm:vmx_dirty_log_test                       fail     fail     fail     fail     fail     same
kvm:vmx_nested_tsc_scaling_test              fail     fail     fail     fail     fail     same
kvm:vmx_pmu_msrs_test                        fail     fail     fail     fail     fail     same
kvm:vmx_preemption_timer_test                fail     fail     fail     fail     fail     same
kvm:vmx_set_nested_state_test                fail     fail     fail     fail     fail     same
kvm:vmx_tsc_adjust_test                      fail     fail     fail     fail     fail     same
kvm:xapic_ipi_test                           fail     fail     fail     fail     fail     same
kvm:xen_shinfo_test                          fail     fail     fail     fail     fail     same
kvm:xen_vmcall_test                          fail     fail     fail     fail     fail     same
kvm:xss_msr_test                             fail     fail     fail     fail     fail     same
lib:bitmap.sh                                skip     skip     skip     skip     skip     same
lib:prime_numbers.sh                         skip     skip     skip     skip     skip     same
lib:printf.sh                                skip     skip     skip     skip     skip     same
lib:scanf.sh                                 fail     fail     fail     fail     fail     same
livepatch:test-callbacks.sh                  pass     pass     pass     pass     pass     same
livepatch:test-ftrace.sh                     pass     pass     pass     pass     pass     same
livepatch:test-livepatch.sh                  pass     pass     pass     pass     pass     same
livepatch:test-shadow-vars.sh                pass     pass     pass     pass     pass     same
livepatch:test-state.sh                      pass     pass     pass     pass     pass     same
membarrier:membarrier_test_multi_thread      pass     pass     pass     pass     pass     same
membarrier:membarrier_test_single_thread     pass     pass     pass     pass     pass     same
memfd:memfd_test                             pass     pass     pass     pass     pass     same
memfd:run_fuse_test.sh                       fail     fail     fail     fail     fail     same
memfd:run_hugetlbfs_test.sh                  pass     pass     pass     pass     pass     same
memory-hotplug:mem-on-off-test.sh            pass     pass     pass     pass     pass     same
mount:run_tests.sh                           pass     pass     pass     pass     pass     same
net/forwarding:bridge_port_isolation.sh      pass     pass     pass     pass     pass     same
net/forwarding:bridge_sticky_fdb.sh          pass     pass     pass     pass     pass     same
net/forwarding:bridge_vlan_aware.sh          fail     fail     fail     fail     fail     same
net/forwarding:bridge_vlan_unaware.sh        pass     pass     pass     pass     pass     same
net/forwarding:ethtool.sh                    fail     fail     fail     fail     fail     same
net/forwarding:gre_multipath.sh              fail     fail     fail     fail     fail     same
net/forwarding:ip6_forward_instats_vrf.sh    fail     fail     fail     fail     fail     same
net/forwarding:ipip_flat_gre.sh              pass     pass     pass     pass     pass     same
net/forwarding:ipip_flat_gre_key.sh          pass     pass     pass     pass     pass     same
net/forwarding:ipip_flat_gre_keys.sh         pass     pass     pass     pass     pass     same
net/forwarding:ipip_hier_gre.sh              pass     pass     pass     pass     pass     same
net/forwarding:ipip_hier_gre_key.sh          pass     pass     pass     pass     pass     same
net/forwarding:loopback.sh                   skip     skip     skip     skip     skip     same
net/forwarding:mirror_gre.sh                 fail     fail     fail     fail     fail     same
net/forwarding:mirror_gre_bound.sh           pass     pass     pass     pass     pass     same
net/forwarding:mirror_gre_bridge_1d.sh       pass     pass     pass     pass     pass     same
net/forwarding:mirror_gre_bridge_1q.sh       pass     pass     pass     pass     pass     same
net/forwarding:mirror_gre_bridge_1q_lag.sh   pass     pass     pass     pass     pass     same
net/forwarding:mirror_gre_changes.sh         fail     fail     fail     fail     fail     same
net/forwarding:mirror_gre_flower.sh          fail     fail     fail     fail     fail     same
net/forwarding:mirror_gre_lag_lacp.sh        pass     pass     pass     pass     pass     same
net/forwarding:mirror_gre_neigh.sh           pass     pass     pass     pass     pass     same
net/forwarding:mirror_gre_nh.sh              pass     pass     pass     pass     pass     same
net/forwarding:mirror_gre_vlan.sh            pass     pass     pass     pass     pass     same
net/forwarding:mirror_vlan.sh                pass     pass     pass     pass     pass     same
net/forwarding:router.sh                     fail     fail     fail     fail     fail     same
net/forwarding:router_bridge.sh              pass     pass     pass     pass     pass     same
net/forwarding:router_bridge_vlan.sh         pass     pass     pass     pass     pass     same
net/forwarding:router_broadcast.sh           fail     fail     fail     fail     fail     same
net/forwarding:router_multicast.sh           fail     fail     fail     fail     fail     same
net/forwarding:router_multipath.sh           fail     fail     fail     fail     fail     same
net/forwarding:router_vid_1.sh               pass     pass     pass     pass     pass     same
net/forwarding:tc_chains.sh                  pass     pass     pass     pass     pass     same
net/forwarding:tc_flower.sh                  pass     pass     pass     pass     pass     same
net/forwarding:tc_flower_router.sh           pass     pass     pass     pass     pass     same
net/forwarding:tc_mpls_l2vpn.sh              pass     pass     pass     pass     pass     same
net/forwarding:tc_shblocks.sh                pass     pass     pass     pass     pass     same
net/forwarding:tc_vlan_modify.sh             pass     pass     pass     pass     pass     same
net/forwarding:vxlan_asymmetric.sh           pass     pass     pass     pass     pass     same
net/forwarding:vxlan_bridge_1d.sh            fail     fail     fail     fail     fail     same
net/forwarding:vxlan_bridge_1d_port_8472.sh  pass     pass     pass     pass     pass     same
net/forwarding:vxlan_bridge_1q.sh            fail     fail     fail     fail     fail     same
net/forwarding:vxlan_bridge_1q_port_8472.sh  pass     pass     pass     pass     pass     same
net/forwarding:vxlan_symmetric.sh            pass     pass     pass     pass     pass     same
net/mptcp:diag.sh                            pass     pass     pass     pass     pass     same
net/mptcp:mptcp_connect.sh                   pass     pass     pass     pass     pass     same
net/mptcp:mptcp_sockopt.sh                   pass     pass     pass     pass     pass     same
net/mptcp:pm_netlink.sh                      pass     pass     pass     pass     pass     same
net:bareudp.sh                               pass     pass     pass     pass     pass     same
net:devlink_port_split.py                    pass     pass     pass     pass     pass     same
net:drop_monitor_tests.sh                    skip     skip     skip     skip     skip     same
net:fcnal-test.sh                            pass     pass     pass     pass     pass     same
net:fib-onlink-tests.sh                      pass     pass     pass     pass     pass     same
net:fib_rule_tests.sh                        fail     fail     fail     fail     fail     same
net:fib_tests.sh                             pass     pass     pass     pass     pass     same
net:gre_gso.sh                               pass     pass     pass     pass     pass     same
net:icmp_redirect.sh                         pass     pass     pass     pass     pass     same
net:ip6_gre_headroom.sh                      pass     pass     pass     pass     pass     same
net:ipv6_flowlabel.sh                        pass     pass     pass     pass     pass     same
net:l2tp.sh                                  pass     pass     pass     pass     pass     same
net:msg_zerocopy.sh                          fail     fail     fail     fail     fail     same
net:netdevice.sh                             pass     pass     pass     pass     pass     same
net:pmtu.sh                                  pass     pass     pass     pass     pass     same
net:psock_snd.sh                             fail     fail     fail     fail     fail     same
net:reuseaddr_conflict                       pass     pass     pass     pass     pass     same
net:reuseport_bpf                            pass     pass     pass     pass     pass     same
net:reuseport_bpf_cpu                        pass     pass     pass     pass     pass     same
net:reuseport_bpf_numa                       pass     pass     pass     pass     pass     same
net:reuseport_dualstack                      pass     pass     pass     pass     pass     same
net:rtnetlink.sh                             skip     skip     skip     skip     skip     same
net:run_afpackettests                        pass     pass     pass     pass     pass     same
net:run_netsocktests                         pass     pass     pass     pass     pass     same
net:rxtimestamp.sh                           pass     pass     pass     pass     pass     same
net:so_txtime.sh                             fail     fail     fail     fail     fail     same
net:test_bpf.sh                              pass     pass     pass     pass     pass     same
net:test_vxlan_fdb_changelink.sh             pass     pass     pass     pass     pass     same
net:tls                                      pass     pass     pass     pass     pass     same
net:traceroute.sh                            pass     pass     pass     pass     pass     same
net:udpgro.sh                                fail     fail     fail     fail     fail     same
net:udpgro_bench.sh                          fail     fail     fail     fail     fail     same
net:udpgso.sh                                pass     pass     pass     pass     pass     same
net:veth.sh                                  fail     fail     fail     fail     fail     same
net:vrf-xfrm-tests.sh                        pass     pass     pass     pass     pass     same
netfilter:conntrack_icmp_related.sh          fail     fail     fail     fail     fail     same
netfilter:conntrack_tcp_unreplied.sh         fail     fail     fail     fail     fail     same
netfilter:ipvs.sh                            skip     skip     skip     skip     skip     same
netfilter:nft_flowtable.sh                   fail     fail     fail     fail     fail     same
netfilter:nft_meta.sh                        pass     pass     pass     pass     pass     same
netfilter:nft_nat.sh                         skip     skip     skip     skip     skip     same
netfilter:nft_queue.sh                       skip     skip     skip     skip     skip     same
nsfs:owner                                   pass     pass     pass     pass     pass     same
nsfs:pidns                                   pass     pass     pass     pass     pass     same
proc:fd-001-lookup                           pass     pass     pass     pass     pass     same
proc:fd-002-posix-eq                         pass     pass     pass     pass     pass     same
proc:fd-003-kthread                          pass     pass     pass     pass     pass     same
proc:proc-loadavg-001                        pass     pass     pass     pass     pass     same
proc:proc-self-map-files-001                 pass     pass     pass     pass     pass     same
proc:proc-self-map-files-002                 fail     fail     fail     fail     fail     same
proc:proc-self-syscall                       pass     pass     pass     pass     pass     same
proc:proc-self-wchan                         pass     pass     pass     pass     pass     same
proc:proc-uptime-001                         pass     pass     pass     pass     pass     same
proc:proc-uptime-002                         pass     pass     pass     pass     pass     same
proc:read                                    pass     pass     pass     pass     pass     same
proc:setns-dcache                            fail     fail     fail     fail     fail     same
pstore:pstore_post_reboot_tests              skip     skip     skip     skip     skip     same
pstore:pstore_tests                          fail     fail     fail     fail     fail     same
ptrace:peeksiginfo                           pass     pass     pass     pass     pass     same
ptrace:vmaccess                              fail     fail     fail     fail     fail     same
rseq:basic_percpu_ops_test                   pass     pass     pass     pass     pass     same
rseq:basic_test                              pass     pass     pass     pass     pass     same
rseq:param_test                              pass     pass     pass     pass     pass     same
rseq:param_test_benchmark                    pass     pass     pass     pass     pass     same
rseq:param_test_compare_twice                pass     pass     pass     pass     pass     same
rseq:run_param_test.sh                       fail     fail     fail     fail     fail     same
sgx:test_sgx                                 fail     fail     fail     fail     fail     same
sigaltstack:sas                              pass     pass     pass     pass     pass     same
size:get_size                                pass     pass     pass     pass     pass     same
splice:default_file_splice_read.sh           pass     pass     pass     pass     pass     same
static_keys:test_static_keys.sh              skip     skip     skip     skip     skip     same
tc-testing:tdc.sh                            pass     pass     pass     pass     pass     same
timens:clock_nanosleep                       pass     pass     pass     pass     pass     same
timens:exec                                  pass     pass     pass     pass     pass     same
timens:procfs                                pass     pass     pass     pass     pass     same
timens:timens                                pass     pass     pass     pass     pass     same
timens:timer                                 pass     pass     pass     pass     pass     same
timens:timerfd                               pass     pass     pass     pass     pass     same
timers:inconsistency-check                   fail     fail     fail     fail     fail     same
timers:mqueue-lat                            pass     pass     pass     pass     pass     same
timers:nanosleep                             pass     pass     pass     pass     pass     same
timers:nsleep-lat                            fail     fail     fail     fail     fail     same
timers:posix_timers                          pass     pass     pass     pass     pass     same
timers:rtcpie                                pass     pass     pass     pass     pass     same
timers:set-timer-lat                         fail     fail     fail     fail     fail     same
timers:threadtest                            pass     pass     pass     pass     pass     same
tpm2:test_smoke.sh                           fail     fail     fail     fail     fail     same
tpm2:test_space.sh                           fail     fail     fail     fail     fail     same
vm:run_vmtests                               fail     fail     fail     fail     fail     same
x86:amx_64                                   fail     fail     fail     fail     fail     same
x86:check_initial_reg_state_64               pass     pass     pass     pass     pass     same
x86:corrupt_xstate_header_64                 pass     pass     pass     pass     pass     same
x86:fsgsbase_64                              pass     pass     pass     pass     pass     same
x86:fsgsbase_restore_64                      pass     pass     pass     pass     pass     same
x86:ioperm_64                                pass     pass     pass     pass     pass     same
x86:iopl_64                                  pass     pass     pass     pass     pass     same
x86:mov_ss_trap_64                           pass     pass     pass     pass     pass     same
x86:mpx-mini-test_64                         fail     fail     fail     fail     fail     same
x86:protection_keys_64                       pass     pass     pass     pass     pass     same
x86:sigaltstack_64                           pass     pass     pass     pass     pass     same
x86:sigreturn_64                             pass     pass     pass     pass     pass     same
x86:single_step_syscall_64                   pass     pass     pass     pass     pass     same
x86:syscall_nt_64                            pass     pass     pass     pass     pass     same
x86:sysret_rip_64                            pass     pass     pass     pass     pass     same
x86:sysret_ss_attrs_64                       pass     pass     pass     pass     pass     same
x86:test_mremap_vdso_64                      pass     pass     pass     pass     pass     same
x86:test_vdso_64                             pass     pass     pass     pass     pass     same
x86:test_vsyscall_64                         pass     pass     pass     pass     pass     same
zram:zram.sh                                 pass     pass     pass     pass     pass     same

pvts-mat added 4 commits March 7, 2026 23:11
…ests

jira VULN-136531
cve-pre CVE-2025-39697
commit-author Christoph Hellwig <hch@lst.de>
commit 25edbca
upstream-diff Used LTS 9.2 backport
  d4d7789 for clean cherry pick

Fold nfs_page_group_lock_subrequests into nfs_lock_and_join_requests to
prepare for future changes to this code, and move the helpers to write.c
as well.

	Signed-off-by: Christoph Hellwig <hch@lst.de>
	Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
	Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
(cherry picked from commit d4d7789)
	Signed-off-by: Marcin Wcisło <marcin.wcislo@conclusive.pl>
jira VULN-136531
cve CVE-2025-39697
commit-author Trond Myklebust <trond.myklebust@hammerspace.com>
commit 76d2e38
upstream-diff Used LTS 9.2 backport
  f49f6cc for clean cherry pick

After nfs_lock_and_join_requests() tests for whether the request is
still attached to the mapping, nothing prevents a call to
nfs_inode_remove_request() from succeeding until we actually lock the
page group.
The reason is that whoever called nfs_inode_remove_request() doesn't
necessarily have a lock on the page group head.

So in order to avoid races, let's take the page group lock earlier in
nfs_lock_and_join_requests(), and hold it across the removal of the
request in nfs_inode_remove_request().

	Reported-by: Jeff Layton <jlayton@kernel.org>
	Tested-by: Joe Quanaim <jdq@meta.com>
	Tested-by: Andrew Steffen <aksteffen@meta.com>
	Reviewed-by: Jeff Layton <jlayton@kernel.org>
Fixes: bd37d6f ("NFSv4: Convert nfs_lock_and_join_requests() to use nfs_page_find_head_request()")
	Cc: stable@vger.kernel.org
	Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
(cherry picked from commit f49f6cc)
	Signed-off-by: Marcin Wcisło <marcin.wcislo@conclusive.pl>
jira VULN-72342
cve CVE-2025-38250
commit-author Kuniyuki Iwashima <kuniyu@google.com>
commit 1d61231
upstream-diff Resolved contextual conflicts due to the missing backports
  of 0d151a1 and
  989fa51

syzbot reported use-after-free in vhci_flush() without repro. [0]

From the splat, a thread close()d a vhci file descriptor while
its device was being used by iotcl() on another thread.

Once the last fd refcnt is released, vhci_release() calls
hci_unregister_dev(), hci_free_dev(), and kfree() for struct
vhci_data, which is set to hci_dev->dev->driver_data.

The problem is that there is no synchronisation after unlinking
hdev from hci_dev_list in hci_unregister_dev().  There might be
another thread still accessing the hdev which was fetched before
the unlink operation.

We can use SRCU for such synchronisation.

Let's run hci_dev_reset() under SRCU and wait for its completion
in hci_unregister_dev().

Another option would be to restore hci_dev->destruct(), which was
removed in commit 587ae08 ("Bluetooth: Remove unused
hci-destruct cb").  However, this would not be a good solution, as
we should not run hci_unregister_dev() while there are in-flight
ioctl() requests, which could lead to another data-race KCSAN splat.

Note that other drivers seem to have the same problem, for exmaple,
virtbt_remove().

[0]:
BUG: KASAN: slab-use-after-free in skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline]
BUG: KASAN: slab-use-after-free in skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937
Read of size 8 at addr ffff88807cb8d858 by task syz.1.219/6718

CPU: 1 UID: 0 PID: 6718 Comm: syz.1.219 Not tainted 6.16.0-rc1-syzkaller-00196-g08207f42d3ff #0 PREEMPT(full)
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025
Call Trace:
 <TASK>
 dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
 print_address_description mm/kasan/report.c:408 [inline]
 print_report+0xd2/0x2b0 mm/kasan/report.c:521
 kasan_report+0x118/0x150 mm/kasan/report.c:634
 skb_queue_empty_lockless include/linux/skbuff.h:1891 [inline]
 skb_queue_purge_reason+0x99/0x360 net/core/skbuff.c:3937
 skb_queue_purge include/linux/skbuff.h:3368 [inline]
 vhci_flush+0x44/0x50 drivers/bluetooth/hci_vhci.c:69
 hci_dev_do_reset net/bluetooth/hci_core.c:552 [inline]
 hci_dev_reset+0x420/0x5c0 net/bluetooth/hci_core.c:592
 sock_do_ioctl+0xd9/0x300 net/socket.c:1190
 sock_ioctl+0x576/0x790 net/socket.c:1311
 vfs_ioctl fs/ioctl.c:51 [inline]
 __do_sys_ioctl fs/ioctl.c:907 [inline]
 __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fcf5b98e929
Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007fcf5c7b9038 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007fcf5bbb6160 RCX: 00007fcf5b98e929
RDX: 0000000000000000 RSI: 00000000400448cb RDI: 0000000000000009
RBP: 00007fcf5ba10b39 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 00007fcf5bbb6160 R15: 00007ffd6353d528
 </TASK>

Allocated by task 6535:
 kasan_save_stack mm/kasan/common.c:47 [inline]
 kasan_save_track+0x3e/0x80 mm/kasan/common.c:68
 poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
 __kasan_kmalloc+0x93/0xb0 mm/kasan/common.c:394
 kasan_kmalloc include/linux/kasan.h:260 [inline]
 __kmalloc_cache_noprof+0x230/0x3d0 mm/slub.c:4359
 kmalloc_noprof include/linux/slab.h:905 [inline]
 kzalloc_noprof include/linux/slab.h:1039 [inline]
 vhci_open+0x57/0x360 drivers/bluetooth/hci_vhci.c:635
 misc_open+0x2bc/0x330 drivers/char/misc.c:161
 chrdev_open+0x4c9/0x5e0 fs/char_dev.c:414
 do_dentry_open+0xdf0/0x1970 fs/open.c:964
 vfs_open+0x3b/0x340 fs/open.c:1094
 do_open fs/namei.c:3887 [inline]
 path_openat+0x2ee5/0x3830 fs/namei.c:4046
 do_filp_open+0x1fa/0x410 fs/namei.c:4073
 do_sys_openat2+0x121/0x1c0 fs/open.c:1437
 do_sys_open fs/open.c:1452 [inline]
 __do_sys_openat fs/open.c:1468 [inline]
 __se_sys_openat fs/open.c:1463 [inline]
 __x64_sys_openat+0x138/0x170 fs/open.c:1463
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

Freed by task 6535:
 kasan_save_stack mm/kasan/common.c:47 [inline]
 kasan_save_track+0x3e/0x80 mm/kasan/common.c:68
 kasan_save_free_info+0x46/0x50 mm/kasan/generic.c:576
 poison_slab_object mm/kasan/common.c:247 [inline]
 __kasan_slab_free+0x62/0x70 mm/kasan/common.c:264
 kasan_slab_free include/linux/kasan.h:233 [inline]
 slab_free_hook mm/slub.c:2381 [inline]
 slab_free mm/slub.c:4643 [inline]
 kfree+0x18e/0x440 mm/slub.c:4842
 vhci_release+0xbc/0xd0 drivers/bluetooth/hci_vhci.c:671
 __fput+0x44c/0xa70 fs/file_table.c:465
 task_work_run+0x1d1/0x260 kernel/task_work.c:227
 exit_task_work include/linux/task_work.h:40 [inline]
 do_exit+0x6ad/0x22e0 kernel/exit.c:955
 do_group_exit+0x21c/0x2d0 kernel/exit.c:1104
 __do_sys_exit_group kernel/exit.c:1115 [inline]
 __se_sys_exit_group kernel/exit.c:1113 [inline]
 __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1113
 x64_sys_call+0x21ba/0x21c0 arch/x86/include/generated/asm/syscalls_64.h:232
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

The buggy address belongs to the object at ffff88807cb8d800
 which belongs to the cache kmalloc-1k of size 1024
The buggy address is located 88 bytes inside of
 freed 1024-byte region [ffff88807cb8d800, ffff88807cb8dc00)

Fixes: bf18c71 ("Bluetooth: vhci: Free driver_data on file release")
	Reported-by: syzbot+2faa4825e556199361f9@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=f62d64848fc4c7c30cd6
	Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
	Acked-by: Paul Menzel <pmenzel@molgen.mpg.de>
	Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
(cherry picked from commit 1d61231)
	Signed-off-by: Marcin Wcisło <marcin.wcislo@conclusive.pl>
jira VULN-158747
cve CVE-2025-39971
commit-author Lukasz Czapnik <lukasz.czapnik@intel.com>
commit f1ad24c
upstream-diff Resolved context conflicts due to the missing backport of
  230f3d5. No actual diffs from the
  upstream.

Ensure idx is within range of active/initialized TCs when iterating over
vf->ch[idx] in i40e_vc_config_queues_msg().

Fixes: c27eac4 ("i40e: Enable ADq and create queue channel/s on VF")
	Cc: stable@vger.kernel.org
	Signed-off-by: Lukasz Czapnik <lukasz.czapnik@intel.com>
	Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
	Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
	Reviewed-by: Simon Horman <horms@kernel.org>
	Tested-by: Kamakshi Nellore <nellorex.kamakshi@intel.com> (A Contingent Worker at Intel)
	Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
(cherry picked from commit f1ad24c)
	Signed-off-by: Marcin Wcisło <marcin.wcislo@conclusive.pl>
@github-actions
Copy link

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

@github-actions
Copy link

🔍 Interdiff Analysis

  • ⚠️ PR commit c6bdb519e0b4 (nfs: fold nfs_page_group_lock_subrequests into nfs_lock_and_join_requests) → upstream 25edbcac6e32
    Differences found:
================================================================================
*    DELTA DIFFERENCES - code changes that differ between the patches          *
================================================================================

--- b/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -627,27 +627,16 @@
 	if (IS_ERR_OR_NULL(head))
 		return head;
 
-	ret = nfs_page_group_lock(head);
-	if (ret < 0)
-		goto out_unlock;
-
 	/* lock each request in the page group */
-	for (subreq = head->wb_this_page;
-	     subreq != head;
-	     subreq = subreq->wb_this_page) {
-		ret = nfs_page_group_lock_subreq(head, subreq);
-		if (ret < 0)
-			goto out_unlock;
+	ret = nfs_page_group_lock_subrequests(head);
+	if (ret < 0) {
+		nfs_unlock_and_release_request(head);
+		return ERR_PTR(ret);
 	}
 
-	nfs_page_group_unlock(head);
-
 	nfs_join_page_group(head, inode);
-	return head;
 
-out_unlock:
-	nfs_unlock_and_release_request(head);
-	return ERR_PTR(ret);
+	return head;
 }
 
 static void nfs_write_error(struct nfs_page *req, int error)

################################################################################
!    REJECTED PATCH2 HUNKS - could not be compared; manual review needed       !
################################################################################

--- b/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -547,7 +598,7 @@
 static struct nfs_page *nfs_lock_and_join_requests(struct folio *folio)
 {
 	struct inode *inode = folio->mapping->host;
-	struct nfs_page *head;
+	struct nfs_page *head, *subreq;
 	struct nfs_commit_info cinfo;
 	int ret;
 
@@ -577,8 +628,7 @@
 	if (ret < 0)
 		goto out_unlock;
 
-	/* lock each request in the page group */
-	ret = nfs_page_group_lock_subrequests(head);
+	ret = nfs_page_group_lock(head);
 	if (ret < 0)
 		goto out_unlock;
 
@@ -582,6 +632,17 @@
 	if (ret < 0)
 		goto out_unlock;
 
+	/* lock each request in the page group */
+	for (subreq = head->wb_this_page;
+	     subreq != head;
+	     subreq = subreq->wb_this_page) {
+		ret = nfs_page_group_lock_subreq(head, subreq);
+		if (ret < 0)
+			goto out_unlock;
+	}
+
+	nfs_page_group_unlock(head);
+
 	nfs_init_cinfo_from_inode(&cinfo, inode);
 	nfs_join_page_group(head, &cinfo, inode);
 	return head;
--- b/include/linux/nfs_page.h
+++ b/include/linux/nfs_page.h
@@ -155,7 +155,6 @@
 extern  int nfs_wait_on_request(struct nfs_page *);
 extern	void nfs_unlock_request(struct nfs_page *req);
 extern	void nfs_unlock_and_release_request(struct nfs_page *);
-extern	int nfs_page_group_lock_subrequests(struct nfs_page *head);
 extern void nfs_join_page_group(struct nfs_page *head,
 				struct nfs_commit_info *cinfo,
 				struct inode *inode);

================================================================================
*    CONTEXT DIFFERENCES - surrounding code differences between the patches    *
================================================================================

--- b/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -163,4 +163,5 @@
 }
+EXPORT_SYMBOL_GPL(nfs_async_iocounter_wait);
 
 /*
  * nfs_unroll_locks -  unlock all newly locked reqs and wait on @req
--- b/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -563,9 +595,7 @@
 	ret = nfs_page_group_lock_subrequests(head);
-	if (ret < 0) {
-		nfs_unlock_and_release_request(head);
-		return ERR_PTR(ret);
-	}
-
-	nfs_join_page_group(head, inode);
+	if (ret < 0)
+		goto out_unlock;
 
+	nfs_init_cinfo_from_inode(&cinfo, inode);
+	nfs_join_page_group(head, &cinfo, inode);
 	return head;
--- b/include/linux/nfs_page.h
+++ b/include/linux/nfs_page.h
@@ -141,7 +142,6 @@
 extern	void nfs_unlock_request(struct nfs_page *req);
 extern	void nfs_unlock_and_release_request(struct nfs_page *);
-extern	struct nfs_page *nfs_page_group_lock_head(struct nfs_page *req);
 extern	int nfs_page_group_lock_subrequests(struct nfs_page *head);
-extern	void nfs_join_page_group(struct nfs_page *head, struct inode *inode);
-extern int nfs_page_group_lock(struct nfs_page *);
-extern void nfs_page_group_unlock(struct nfs_page *);
+extern void nfs_join_page_group(struct nfs_page *head,
+				struct nfs_commit_info *cinfo,
+				struct inode *inode);
  • ⚠️ PR commit 47b7c5fd21be (NFS: Fix a race when updating an existing write) → upstream 76d2e3890fb1
    Differences found:
================================================================================
*    DELTA DIFFERENCES - code changes that differ between the patches          *
================================================================================

--- b/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -232,6 +232,36 @@
 	return req;
 }
 
+static struct nfs_page *nfs_find_and_lock_page_request(struct page *page)
+{
+	struct inode *inode = page_file_mapping(page)->host;
+	struct nfs_page *req, *head;
+	int ret;
+
+	for (;;) {
+		req = nfs_page_find_head_request(page);
+		if (!req)
+			return req;
+		head = nfs_page_group_lock_head(req);
+		if (head != req)
+			nfs_release_request(req);
+		if (IS_ERR(head))
+			return head;
+		ret = nfs_cancel_remove_inode(head, inode);
+		if (ret < 0) {
+			nfs_unlock_and_release_request(head);
+			return ERR_PTR(ret);
+		}
+		/* Ensure that nobody removed the request before we locked it */
+		if (head == nfs_page_private_request(page))
+			break;
+		if (PageSwapCache(page))
+			break;
+		nfs_unlock_and_release_request(head);
+	}
+	return head;
+}
+
 /* Adjust the file length if we're writing beyond the end */
 static void nfs_grow_file(struct page *page, unsigned int offset, unsigned int count)
 {
@@ -583,32 +613,14 @@
 	 * reference to the whole page group - the group will not be destroyed
 	 * until the head reference is released.
 	 */
-retry:
-	head = nfs_page_find_head_request(page);
+	head = nfs_find_and_lock_page_request(page);
 	if (IS_ERR_OR_NULL(head))
 		return head;
 
-	while (!nfs_lock_request(head)) {
-		ret = nfs_wait_on_request(head);
-		if (ret < 0) {
-			nfs_release_request(head);
-			return ERR_PTR(ret);
-		}
-	}
-
 	ret = nfs_page_group_lock(head);
 	if (ret < 0)
 		goto out_unlock;
 
-	/* Ensure that nobody removed the request before we locked it */
-	if (head != nfs_page_private_request(page) && !PageSwapCache(page)) {
-		nfs_page_group_unlock(head);
-		nfs_unlock_and_release_request(head);
-		goto retry;
-	}
-
-	nfs_cancel_remove_inode(head, inode);
-
 	/* lock each request in the page group */
 	for (subreq = head->wb_this_page;
 	     subreq != head;

################################################################################
!    REJECTED PATCH2 HUNKS - could not be compared; manual review needed       !
################################################################################

--- b/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -575,6 +565,10 @@
 		}
 	}
 
+	ret = nfs_page_group_lock(head);
+	if (ret < 0)
+		goto out_unlock;
+
 	/* Ensure that nobody removed the request before we locked it */
 	if (head != folio->private) {
 		nfs_unlock_and_release_request(head);
@@ -577,6 +571,7 @@
 
 	/* Ensure that nobody removed the request before we locked it */
 	if (head != folio->private) {
+		nfs_page_group_unlock(head);
 		nfs_unlock_and_release_request(head);
 		goto retry;
 	}
@@ -580,13 +575,7 @@
 		goto retry;
 	}
 
-	ret = nfs_cancel_remove_inode(head, inode);
-	if (ret < 0)
-		goto out_unlock;
-
-	ret = nfs_page_group_lock(head);
-	if (ret < 0)
-		goto out_unlock;
+	nfs_cancel_remove_inode(head, inode);
 
 	/* lock each request in the page group */
 	for (subreq = head->wb_this_page;
@@ -776,7 +765,8 @@
 {
 	struct nfs_inode *nfsi = NFS_I(nfs_page_to_inode(req));
 
-	if (nfs_page_group_sync_on_bit(req, PG_REMOVE)) {
+	nfs_page_group_lock(req);
+	if (nfs_page_group_sync_on_bit_locked(req, PG_REMOVE)) {
 		struct folio *folio = nfs_page_to_folio(req->wb_head);
 		struct address_space *mapping = folio->mapping;
 

================================================================================
*    CONTEXT DIFFERENCES - surrounding code differences between the patches    *
================================================================================

--- b/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -173,4 +169,4 @@
 	return 0;
 }
 
-static struct nfs_page *
+/**
@@ -620,13 +580,36 @@
-	 * reference to the whole page group - the group will not be destroyed
-	 * until the head reference is released.
-	 */
-	head = nfs_find_and_lock_page_request(page);
-	if (IS_ERR_OR_NULL(head))
-		return head;
+		}
+	}
+
+	/* Ensure that nobody removed the request before we locked it */
+	if (head != folio->private) {
+		nfs_unlock_and_release_request(head);
+		goto retry;
+	}
+
+	ret = nfs_cancel_remove_inode(head, inode);
+	if (ret < 0)
+		goto out_unlock;
+
+	while (!nfs_lock_request(head)) {
+		ret = nfs_wait_on_request(head);
+		if (ret < 0) {
+			nfs_release_request(head);
+			return ERR_PTR(ret);
+		}
+	}
 
 	ret = nfs_page_group_lock(head);
 	if (ret < 0)
 		goto out_unlock;
 
+	/* Ensure that nobody removed the request before we locked it */
+	if (head != nfs_page_private_request(page) && !PageSwapCache(page)) {
+		nfs_page_group_unlock(head);
+		nfs_unlock_and_release_request(head);
+		goto retry;
+	}
+
+	nfs_cancel_remove_inode(head, inode);
+
 	/* lock each request in the page group */
 	for (subreq = head->wb_this_page;
@@ -829,6 +800,7 @@
-	struct nfs_inode *nfsi = NFS_I(inode);
-	struct nfs_page *head;
+{
+	struct nfs_inode *nfsi = NFS_I(nfs_page_to_inode(req));
 
 	if (nfs_page_group_sync_on_bit(req, PG_REMOVE)) {
-		head = req->wb_head;
+		struct folio *folio = nfs_page_to_folio(req->wb_head);
+		struct address_space *mapping = folio->mapping;
 
@@ -836,6 +807,6 @@
 		}
-		spin_unlock(&mapping->private_lock);
+		spin_unlock(&mapping->i_private_lock);
 	}
 
 	if (test_and_clear_bit(PG_INODE_REF, &req->wb_flags)) {
-		nfs_release_request(req);
+		atomic_long_dec(&nfsi->nrequests);
  • ⚠️ PR commit cef7b218ce05 (Bluetooth: hci_core: Fix use-after-free in vhci_flush()) → upstream 1d6123102e9f
    Differences found:
################################################################################
!    REJECTED PATCH2 HUNKS - could not be compared; manual review needed       !
################################################################################

--- b/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2701,6 +2724,9 @@
 	list_del(&hdev->list);
 	write_unlock(&hci_dev_list_lock);
 
+	synchronize_srcu(&hdev->srcu);
+	cleanup_srcu_struct(&hdev->srcu);
+
 	disable_work_sync(&hdev->rx_work);
 	disable_work_sync(&hdev->cmd_work);
 	disable_work_sync(&hdev->tx_work);

================================================================================
*    CONTEXT DIFFERENCES - surrounding code differences between the patches    *
================================================================================

--- b/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -25,6 +25,6 @@
 #include <linux/idr.h>
 #include <linux/leds.h>
 #include <linux/rculist.h>
 
 #include <net/bluetooth/hci.h>
-#include <net/bluetooth/hci_sock.h>
+#include <net/bluetooth/hci_drv.h>
@@ -291,4 +349,4 @@
 	struct list_head list;
 	struct mutex	lock;
 
-	char		name[8];
+	struct ida	unset_handle_ida;
--- b/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -3894,6 +2678,6 @@
 	list_del(&hdev->list);
 	write_unlock(&hci_dev_list_lock);
 
-	cancel_work_sync(&hdev->power_on);
-
-	if (!test_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks)) {
+	disable_work_sync(&hdev->rx_work);
+	disable_work_sync(&hdev->cmd_work);
+	disable_work_sync(&hdev->tx_work);
  • ⚠️ PR commit 1de4a19d9a4e (i40e: fix idx validation in config queues msg) → upstream f1ad24c5abe1
    Differences found:
################################################################################
!    REJECTED PATCH2 HUNKS - could not be compared; manual review needed       !
################################################################################

--- b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -2395,7 +2395,7 @@
 		}
 
 		if (vf->adq_enabled) {
-			if (idx >= ARRAY_SIZE(vf->ch)) {
+			if (idx >= vf->num_tc) {
 				aq_ret = -ENODEV;
 				goto error_param;
 			}
@@ -2416,7 +2416,7 @@
 		 * to its appropriate VSIs based on TC mapping
 		 */
 		if (vf->adq_enabled) {
-			if (idx >= ARRAY_SIZE(vf->ch)) {
+			if (idx >= vf->num_tc) {
 				aq_ret = -ENODEV;
 				goto error_param;
 			}

================================================================================
*    CONTEXT DIFFERENCES - surrounding code differences between the patches    *
================================================================================

--- b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -2291,5 +2291,5 @@
 		if (vf->adq_enabled) {
 			if (idx >= ARRAY_SIZE(vf->ch)) {
-				aq_ret = I40E_ERR_NO_AVAILABLE_VSI;
+				aq_ret = -ENODEV;
 				goto error_param;
 			}
@@ -2315,5 +2418,5 @@
 		if (vf->adq_enabled) {
 			if (idx >= ARRAY_SIZE(vf->ch)) {
-				aq_ret = I40E_ERR_NO_AVAILABLE_VSI;
+				aq_ret = -ENODEV;
 				goto error_param;
 			}

This is an automated interdiff check for backported commits.

@github-actions
Copy link

JIRA PR Check Results

4 commit(s) with issues found:

Commit 1de4a19d9a4e

Summary: i40e: fix idx validation in config queues msg

❌ Errors:

  • VULN-158747: Status is 'To Do', expected 'In Progress'

⚠️ Warnings:

  • VULN-158747: No time logged - please log time manually

Commit cef7b218ce05

Summary: Bluetooth: hci_core: Fix use-after-free in vhci_flush()

❌ Errors:

  • VULN-72342: Status is 'To Do', expected 'In Progress'

⚠️ Warnings:

  • VULN-72342: No time logged - please log time manually

Commit 47b7c5fd21be

Summary: NFS: Fix a race when updating an existing write

❌ Errors:

  • VULN-136531: Status is 'To Do', expected 'In Progress'

⚠️ Warnings:

  • VULN-136531: No time logged - please log time manually

Commit c6bdb519e0b4

Summary: nfs: fold nfs_page_group_lock_subrequests into nfs_lock_and_join_requests

❌ Errors:

  • VULN-136531: Status is 'To Do', expected 'In Progress'

⚠️ Warnings:

  • VULN-136531: No time logged - please log time manually

Summary: Checked 4 commit(s) total.

@github-actions
Copy link

Validation checks completed with issues View full results: https://github.com/ctrliq/kernel-src-tree/actions/runs/22895723249

@roxanan1996 roxanan1996 requested a review from a team March 10, 2026 11:57
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.

2 participants