From 949b36c469b416eaf14f6cbf4cdc19619f751b24 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 20 Nov 2025 16:57:56 +0100 Subject: [PATCH] 5.15-stable patches added patches: gcov-add-support-for-gcc-15.patch nfsd-free-copynotify-stateid-in-nfs4_free_ol_stateid.patch strparser-fix-signed-unsigned-mismatch-bug.patch --- queue-5.15/gcov-add-support-for-gcc-15.patch | 40 +++++++++ ...tify-stateid-in-nfs4_free_ol_stateid.patch | 85 +++++++++++++++++++ queue-5.15/series | 3 + ...ser-fix-signed-unsigned-mismatch-bug.patch | 47 ++++++++++ 4 files changed, 175 insertions(+) create mode 100644 queue-5.15/gcov-add-support-for-gcc-15.patch create mode 100644 queue-5.15/nfsd-free-copynotify-stateid-in-nfs4_free_ol_stateid.patch create mode 100644 queue-5.15/strparser-fix-signed-unsigned-mismatch-bug.patch diff --git a/queue-5.15/gcov-add-support-for-gcc-15.patch b/queue-5.15/gcov-add-support-for-gcc-15.patch new file mode 100644 index 0000000000..a5b974af2b --- /dev/null +++ b/queue-5.15/gcov-add-support-for-gcc-15.patch @@ -0,0 +1,40 @@ +From ec4d11fc4b2dd4a2fa8c9d801ee9753b74623554 Mon Sep 17 00:00:00 2001 +From: Peter Oberparleiter +Date: Tue, 28 Oct 2025 12:51:25 +0100 +Subject: gcov: add support for GCC 15 + +From: Peter Oberparleiter + +commit ec4d11fc4b2dd4a2fa8c9d801ee9753b74623554 upstream. + +Using gcov on kernels compiled with GCC 15 results in truncated 16-byte +long .gcda files with no usable data. To fix this, update GCOV_COUNTERS +to match the value defined by GCC 15. + +Tested with GCC 14.3.0 and GCC 15.2.0. + +Link: https://lkml.kernel.org/r/20251028115125.1319410-1-oberpar@linux.ibm.com +Signed-off-by: Peter Oberparleiter +Reported-by: Matthieu Baerts +Closes: https://github.com/linux-test-project/lcov/issues/445 +Tested-by: Matthieu Baerts +Cc: +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +--- + kernel/gcov/gcc_4_7.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/kernel/gcov/gcc_4_7.c ++++ b/kernel/gcov/gcc_4_7.c +@@ -18,7 +18,9 @@ + #include + #include "gcov.h" + +-#if (__GNUC__ >= 14) ++#if (__GNUC__ >= 15) ++#define GCOV_COUNTERS 10 ++#elif (__GNUC__ >= 14) + #define GCOV_COUNTERS 9 + #elif (__GNUC__ >= 10) + #define GCOV_COUNTERS 8 diff --git a/queue-5.15/nfsd-free-copynotify-stateid-in-nfs4_free_ol_stateid.patch b/queue-5.15/nfsd-free-copynotify-stateid-in-nfs4_free_ol_stateid.patch new file mode 100644 index 0000000000..324bb7922a --- /dev/null +++ b/queue-5.15/nfsd-free-copynotify-stateid-in-nfs4_free_ol_stateid.patch @@ -0,0 +1,85 @@ +From 4aa17144d5abc3c756883e3a010246f0dba8b468 Mon Sep 17 00:00:00 2001 +From: Olga Kornievskaia +Date: Tue, 14 Oct 2025 13:59:59 -0400 +Subject: NFSD: free copynotify stateid in nfs4_free_ol_stateid() + +From: Olga Kornievskaia + +commit 4aa17144d5abc3c756883e3a010246f0dba8b468 upstream. + +Typically copynotify stateid is freed either when parent's stateid +is being close/freed or in nfsd4_laundromat if the stateid hasn't +been used in a lease period. + +However, in case when the server got an OPEN (which created +a parent stateid), followed by a COPY_NOTIFY using that stateid, +followed by a client reboot. New client instance while doing +CREATE_SESSION would force expire previous state of this client. +It leads to the open state being freed thru release_openowner-> +nfs4_free_ol_stateid() and it finds that it still has copynotify +stateid associated with it. We currently print a warning and is +triggerred + +WARNING: CPU: 1 PID: 8858 at fs/nfsd/nfs4state.c:1550 nfs4_free_ol_stateid+0xb0/0x100 [nfsd] + +This patch, instead, frees the associated copynotify stateid here. + +If the parent stateid is freed (without freeing the copynotify +stateids associated with it), it leads to the list corruption +when laundromat ends up freeing the copynotify state later. + +[ 1626.839430] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP +[ 1626.842828] Modules linked in: nfnetlink_queue nfnetlink_log bluetooth cfg80211 rpcrdma rdma_cm iw_cm ib_cm ib_core nfsd nfs_acl lockd grace nfs_localio ext4 crc16 mbcache jbd2 overlay uinput snd_seq_dummy snd_hrtimer qrtr rfkill vfat fat uvcvideo snd_hda_codec_generic videobuf2_vmalloc videobuf2_memops snd_hda_intel uvc snd_intel_dspcfg videobuf2_v4l2 videobuf2_common snd_hda_codec snd_hda_core videodev snd_hwdep snd_seq mc snd_seq_device snd_pcm snd_timer snd soundcore sg loop auth_rpcgss vsock_loopback vmw_vsock_virtio_transport_common vmw_vsock_vmci_transport vmw_vmci vsock xfs 8021q garp stp llc mrp nvme ghash_ce e1000e nvme_core sr_mod nvme_keyring nvme_auth cdrom vmwgfx drm_ttm_helper ttm sunrpc dm_mirror dm_region_hash dm_log iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi fuse dm_multipath dm_mod nfnetlink +[ 1626.855594] CPU: 2 UID: 0 PID: 199 Comm: kworker/u24:33 Kdump: loaded Tainted: G B W 6.17.0-rc7+ #22 PREEMPT(voluntary) +[ 1626.857075] Tainted: [B]=BAD_PAGE, [W]=WARN +[ 1626.857573] Hardware name: VMware, Inc. VMware20,1/VBSA, BIOS VMW201.00V.24006586.BA64.2406042154 06/04/2024 +[ 1626.858724] Workqueue: nfsd4 laundromat_main [nfsd] +[ 1626.859304] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) +[ 1626.860010] pc : __list_del_entry_valid_or_report+0x148/0x200 +[ 1626.860601] lr : __list_del_entry_valid_or_report+0x148/0x200 +[ 1626.861182] sp : ffff8000881d7a40 +[ 1626.861521] x29: ffff8000881d7a40 x28: 0000000000000018 x27: ffff0000c2a98200 +[ 1626.862260] x26: 0000000000000600 x25: 0000000000000000 x24: ffff8000881d7b20 +[ 1626.862986] x23: ffff0000c2a981e8 x22: 1fffe00012410e7d x21: ffff0000920873e8 +[ 1626.863701] x20: ffff0000920873e8 x19: ffff000086f22998 x18: 0000000000000000 +[ 1626.864421] x17: 20747562202c3839 x16: 3932326636383030 x15: 3030666666662065 +[ 1626.865092] x14: 6220646c756f6873 x13: 0000000000000001 x12: ffff60004fd9e4a3 +[ 1626.865713] x11: 1fffe0004fd9e4a2 x10: ffff60004fd9e4a2 x9 : dfff800000000000 +[ 1626.866320] x8 : 00009fffb0261b5e x7 : ffff00027ecf2513 x6 : 0000000000000001 +[ 1626.866938] x5 : ffff00027ecf2510 x4 : ffff60004fd9e4a3 x3 : 0000000000000000 +[ 1626.867553] x2 : 0000000000000000 x1 : ffff000096069640 x0 : 000000000000006d +[ 1626.868167] Call trace: +[ 1626.868382] __list_del_entry_valid_or_report+0x148/0x200 (P) +[ 1626.868876] _free_cpntf_state_locked+0xd0/0x268 [nfsd] +[ 1626.869368] nfs4_laundromat+0x6f8/0x1058 [nfsd] +[ 1626.869813] laundromat_main+0x24/0x60 [nfsd] +[ 1626.870231] process_one_work+0x584/0x1050 +[ 1626.870595] worker_thread+0x4c4/0xc60 +[ 1626.870893] kthread+0x2f8/0x398 +[ 1626.871146] ret_from_fork+0x10/0x20 +[ 1626.871422] Code: aa1303e1 aa1403e3 910e8000 97bc55d7 (d4210000) +[ 1626.871892] SMP: stopping secondary CPUs + +Reported-by: rtm@csail.mit.edu +Closes: https://lore.kernel.org/linux-nfs/d8f064c1-a26f-4eed-b4f0-1f7f608f415f@oracle.com/T/#t +Fixes: 624322f1adc5 ("NFSD add COPY_NOTIFY operation") +Cc: stable@vger.kernel.org +Signed-off-by: Olga Kornievskaia +Signed-off-by: Chuck Lever +Signed-off-by: Greg Kroah-Hartman +--- + fs/nfsd/nfs4state.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/fs/nfsd/nfs4state.c ++++ b/fs/nfsd/nfs4state.c +@@ -1499,7 +1499,8 @@ static void nfs4_free_ol_stateid(struct + release_all_access(stp); + if (stp->st_stateowner) + nfs4_put_stateowner(stp->st_stateowner); +- WARN_ON(!list_empty(&stid->sc_cp_list)); ++ if (!list_empty(&stid->sc_cp_list)) ++ nfs4_free_cpntf_statelist(stid->sc_client->net, stid); + kmem_cache_free(stateid_slab, stid); + } + diff --git a/queue-5.15/series b/queue-5.15/series index 4755f31dad..21c02582d6 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -269,3 +269,6 @@ lib-crypto-arm-curve25519-disable-on-cpu_big_endian.patch mtd-onenand-pass-correct-pointer-to-irq-handler.patch netfilter-nf_tables-reject-duplicate-device-on-updat.patch hid-hid-ntrig-prevent-memory-leak-in-ntrig_report_ve.patch +nfsd-free-copynotify-stateid-in-nfs4_free_ol_stateid.patch +gcov-add-support-for-gcc-15.patch +strparser-fix-signed-unsigned-mismatch-bug.patch diff --git a/queue-5.15/strparser-fix-signed-unsigned-mismatch-bug.patch b/queue-5.15/strparser-fix-signed-unsigned-mismatch-bug.patch new file mode 100644 index 0000000000..036a265db9 --- /dev/null +++ b/queue-5.15/strparser-fix-signed-unsigned-mismatch-bug.patch @@ -0,0 +1,47 @@ +From 4da4e4bde1c453ac5cc2dce5def81d504ae257ee Mon Sep 17 00:00:00 2001 +From: Nate Karstens +Date: Thu, 6 Nov 2025 16:28:33 -0600 +Subject: strparser: Fix signed/unsigned mismatch bug + +From: Nate Karstens + +commit 4da4e4bde1c453ac5cc2dce5def81d504ae257ee upstream. + +The `len` member of the sk_buff is an unsigned int. This is cast to +`ssize_t` (a signed type) for the first sk_buff in the comparison, +but not the second sk_buff. On 32-bit systems, this can result in +an integer underflow for certain values because unsigned arithmetic +is being used. + +This appears to be an oversight: if the intention was to use unsigned +arithmetic, then the first cast would have been omitted. The change +ensures both len values are cast to `ssize_t`. + +The underflow causes an issue with ktls when multiple TLS PDUs are +included in a single TCP segment. The mainline kernel does not use +strparser for ktls anymore, but this is still useful for other +features that still use strparser, and for backporting. + +Signed-off-by: Nate Karstens +Cc: stable@vger.kernel.org +Fixes: 43a0c6751a32 ("strparser: Stream parser for messages") +Reviewed-by: Jacob Keller +Reviewed-by: Sabrina Dubroca +Link: https://patch.msgid.link/20251106222835.1871628-1-nate.karstens@garmin.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/strparser/strparser.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/strparser/strparser.c ++++ b/net/strparser/strparser.c +@@ -238,7 +238,7 @@ static int __strp_recv(read_descriptor_t + strp_parser_err(strp, -EMSGSIZE, desc); + break; + } else if (len <= (ssize_t)head->len - +- skb->len - stm->strp.offset) { ++ (ssize_t)skb->len - stm->strp.offset) { + /* Length must be into new skb (and also + * greater than zero) + */ -- 2.47.3