Skip to contentSkip to conversation

6.19.11-rc1 review

PATCH In review Greg Kroah-Hartman 20 participants 366 messages Mar 31 – Apr 7 3 messages not in the archive Page 3 of 3

Subsystems (4)
lore
Share & tools
lore
author maintainer
#291 lore raw

PATCH 291/342 ext4: convert inline data to extents when truncate exceeds inline size

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Deepanshu Kartikey <[email protected]>

commit ed9356a30e59c7cc3198e7fc46cfedf3767b9b17 upstream.

Add a check in ext4_setattr() to convert files from inline data storage to extent-based storage when truncate() grows the file size beyond the inline capacity. This prevents the filesystem from entering an inconsistent state where the inline data flag is set but the file size exceeds what can be stored inline.

Without this fix, the following sequence causes a kernel BUG_ON():

1. Mount filesystem with inode that has inline flag set and small size
2. truncate(file, 50MB) - grows size but inline flag remains set
3. sendfile() attempts to write data
4. ext4_write_inline_data() hits BUG_ON(write_size > inline_capacity)

The crash occurs because ext4_write_inline_data() expects inline storage to accommodate the write, but the actual inline capacity (~60 bytes for i_block + ~96 bytes for xattrs) is far smaller than the file size and write request.

The fix checks if the new size from setattr exceeds the inode's actual inline capacity (EXT4_I(inode)->i_inline_size) and converts the file to extent-based storage before proceeding with the size change.

This addresses the root cause by ensuring the inline data flag and file size remain consistent during truncate operations.

---
 fs/ext4/inode.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)
fs/ext4/inode.c +12 -0
@@ -5901,6 +5901,18 @@ int ext4_setattr(struct mnt_idmap *idmap
 		if (attr->ia_size == inode->i_size)
 			inc_ivers = false;
 
+		/*
+		 * If file has inline data but new size exceeds inline capacity,
+		 * convert to extent-based storage first to prevent inconsistent
+		 * state (inline flag set but size exceeds inline capacity).
+		 */
+		if (ext4_has_inline_data(inode) &&
+		    attr->ia_size > EXT4_I(inode)->i_inline_size) {
+			error = ext4_convert_inline_data(inode);
+			if (error)
+				goto err_out;
+		}
+
 		if (shrink) {
 			if (ext4_should_order_data(inode)) {
 				error = ext4_begin_ordered_truncate(inode,
author maintainer
#292 lore raw

PATCH 292/342 ext4: fix stale xarray tags after writeback

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jan Kara <[email protected]>

commit f4a2b42e78914ff15630e71289adc589c3a8eb45 upstream.

There are cases where ext4_bio_write_page() gets called for a page which has no buffers to submit. This happens e.g. when the part of the file is actually a hole, when we cannot allocate blocks due to being called from jbd2, or in data=journal mode when checkpointing writes the buffers earlier. In these cases we just return from ext4_bio_write_page() however if the page didn't need redirtying, we will leave stale DIRTY and/or TOWRITE tags in xarray because those get cleared only in __folio_start_writeback(). As a result we can leave these tags set in mappings even after a final sync on filesystem that's getting remounted read-only or that's being frozen. Various assertions can then get upset when writeback is started on such filesystems (Gerald reported assertion in ext4_journal_check_start() firing).

Fix the problem by cycling the page through writeback state even if we decide nothing needs to be written for it so that xarray tags get properly updated. This is slightly silly (we could update the xarray tags directly) but I don't think a special helper messing with xarray tags is really worth it in this relatively rare corner case.

---
 fs/ext4/page-io.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
fs/ext4/page-io.c +8 -2
@@ -523,9 +523,15 @@ int ext4_bio_write_folio(struct ext4_io_
 		nr_to_submit++;
 	} while ((bh = bh->b_this_page) != head);
 
-	/* Nothing to submit? Just unlock the folio... */
-	if (!nr_to_submit)
+	if (!nr_to_submit) {
+		/*
+		 * We have nothing to submit. Just cycle the folio through
+		 * writeback state to properly update xarray tags.
+		 */
+		__folio_start_writeback(folio, keep_towrite);
+		folio_end_writeback(folio);
 		return 0;
+	}
 
 	bh = head = folio_buffers(folio);
 
author maintainer
#293 lore raw

PATCH 293/342 ext4: do not check fast symlink during orphan recovery

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Zhang Yi <[email protected]>

commit 84e21e3fb8fd99ea460eb7274584750d11cf3e9f upstream.

Commit '5f920d5d6083 ("ext4: verify fast symlink length")' causes the generic/475 test to fail during orphan cleanup of zero-length symlinks.

generic/475 84s ... _check_generic_filesystem: filesystem on /dev/vde is inconsistent

The fsck reports are provided below:

Deleted inode 9686 has zero dtime.
Deleted inode 158230 has zero dtime.
...
Inode bitmap differences: -9686 -158230
Orphan file (inode 12) block 13 is not clean.
Failed to initialize orphan file.

In ext4_symlink(), a newly created symlink can be added to the orphan list due to ENOSPC. Its data has not been initialized, and its size is zero. Therefore, we need to disregard the length check of the symbolic link when cleaning up orphan inodes. Instead, we should ensure that the nlink count is zero.

---
 fs/ext4/inode.c |   40 +++++++++++++++++++++++++++++-----------
 1 file changed, 29 insertions(+), 11 deletions(-)
fs/ext4/inode.c +29 -11
@@ -5449,18 +5449,36 @@ struct inode *__ext4_iget(struct super_b
 			inode->i_op = &ext4_encrypted_symlink_inode_operations;
 		} else if (ext4_inode_is_fast_symlink(inode)) {
 			inode->i_op = &ext4_fast_symlink_inode_operations;
-			if (inode->i_size == 0 ||
-			    inode->i_size >= sizeof(ei->i_data) ||
-			    strnlen((char *)ei->i_data, inode->i_size + 1) !=
-								inode->i_size) {
-				ext4_error_inode(inode, function, line, 0,
-					"invalid fast symlink length %llu",
-					 (unsigned long long)inode->i_size);
-				ret = -EFSCORRUPTED;
-				goto bad_inode;
+
+			/*
+			 * Orphan cleanup can see inodes with i_size == 0
+			 * and i_data uninitialized. Skip size checks in
+			 * that case. This is safe because the first thing
+			 * ext4_evict_inode() does for fast symlinks is
+			 * clearing of i_data and i_size.
+			 */
+			if ((EXT4_SB(sb)->s_mount_state & EXT4_ORPHAN_FS)) {
+				if (inode->i_nlink != 0) {
+					ext4_error_inode(inode, function, line, 0,
+						"invalid orphan symlink nlink %d",
+						inode->i_nlink);
+					ret = -EFSCORRUPTED;
+					goto bad_inode;
+				}
+			} else {
+				if (inode->i_size == 0 ||
+				    inode->i_size >= sizeof(ei->i_data) ||
+				    strnlen((char *)ei->i_data, inode->i_size + 1) !=
+						inode->i_size) {
+					ext4_error_inode(inode, function, line, 0,
+						"invalid fast symlink length %llu",
+						(unsigned long long)inode->i_size);
+					ret = -EFSCORRUPTED;
+					goto bad_inode;
+				}
+				inode_set_cached_link(inode, (char *)ei->i_data,
+						      inode->i_size);
 			}
-			inode_set_cached_link(inode, (char *)ei->i_data,
-					      inode->i_size);
 		} else {
 			inode->i_op = &ext4_symlink_inode_operations;
 		}
author maintainer
#294 lore raw

PATCH 294/342 ext4: fix fsync(2) for nojournal mode

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jan Kara <[email protected]>

commit 1308255bbf8452762f89f44f7447ce137ecdbcff upstream.

When inode metadata is changed, we sometimes just call ext4_mark_inode_dirty() to track modified metadata. This copies inode metadata into block buffer which is enough when we are journalling metadata. However when we are running in nojournal mode we currently fail to write the dirtied inode buffer during fsync(2) because the inode is not marked as dirty. Use explicit ext4_write_inode() call to make sure the inode table buffer is written to the disk. This is a band aid solution but proper solution requires a much larger rewrite including changes in metadata bh tracking infrastructure.

---
 fs/ext4/fsync.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
fs/ext4/fsync.c +14 -2
@@ -83,11 +83,23 @@ static int ext4_fsync_nojournal(struct f
 				int datasync, bool *needs_barrier)
 {
 	struct inode *inode = file->f_inode;
+	struct writeback_control wbc = {
+		.sync_mode = WB_SYNC_ALL,
+		.nr_to_write = 0,
+	};
 	int ret;
 
 	ret = generic_buffers_fsync_noflush(file, start, end, datasync);
-	if (!ret)
-		ret = ext4_sync_parent(inode);
+	if (ret)
+		return ret;
+
+	/* Force writeout of inode table buffer to disk */
+	ret = ext4_write_inode(inode, &wbc);
+	if (ret)
+		return ret;
+
+	ret = ext4_sync_parent(inode);
+
 	if (test_opt(inode->i_sb, BARRIER))
 		*needs_barrier = true;
 
author maintainer
#295 lore raw

PATCH 295/342 ext4: make recently_deleted() properly work with lazy itable initialization

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jan Kara <[email protected]>

commit bd060afa7cc3e0ad30afa9ecc544a78638498555 upstream.

recently_deleted() checks whether inode has been used in the near past. However this can give false positive result when inode table is not initialized yet and we are in fact comparing to random garbage (or stale itable block of a filesystem before mkfs). Ultimately this results in uninitialized inodes being skipped during inode allocation and possibly they are never initialized and thus e2fsck complains. Verify if the inode has been initialized before checking for dtime.

---
 fs/ext4/ialloc.c |    6 ++++++
 1 file changed, 6 insertions(+)
fs/ext4/ialloc.c +6 -0
@@ -686,6 +686,12 @@ static int recently_deleted(struct super
 	if (unlikely(!gdp))
 		return 0;
 
+	/* Inode was never used in this filesystem? */
+	if (ext4_has_group_desc_csum(sb) &&
+	    (gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_UNINIT) ||
+	     ino >= EXT4_INODES_PER_GROUP(sb) - ext4_itable_unused_count(sb, gdp)))
+		return 0;
+
 	bh = sb_find_get_block(sb, ext4_inode_table(sb, gdp) +
 		       (ino / inodes_per_block));
 	if (!bh || !buffer_uptodate(bh))
author maintainer
#296 lore raw

PATCH 296/342 ext4: replace BUG_ON with proper error handling in ext4_read_inline_folio

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Yuto Ohnuki <[email protected]>

commit 356227096eb66e41b23caf7045e6304877322edf upstream.

Replace BUG_ON() with proper error handling when inline data size exceeds PAGE_SIZE. This prevents kernel panic and allows the system to continue running while properly reporting the filesystem corruption.

The error is logged via ext4_error_inode(), the buffer head is released to prevent memory leak, and -EFSCORRUPTED is returned to indicate filesystem corruption.

---
 fs/ext4/inline.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
fs/ext4/inline.c +9 -1
@@ -522,7 +522,15 @@ static int ext4_read_inline_folio(struct
 		goto out;
 
 	len = min_t(size_t, ext4_get_inline_size(inode), i_size_read(inode));
-	BUG_ON(len > PAGE_SIZE);
+
+	if (len > PAGE_SIZE) {
+		ext4_error_inode(inode, __func__, __LINE__, 0,
+				 "inline size %zu exceeds PAGE_SIZE", len);
+		ret = -EFSCORRUPTED;
+		brelse(iloc.bh);
+		goto out;
+	}
+
 	kaddr = kmap_local_folio(folio, 0);
 	ret = ext4_read_inline_data(inode, kaddr, len, &iloc);
 	kaddr = folio_zero_tail(folio, len, kaddr + len);
author maintainer
#297 lore raw

PATCH 297/342 ext4: publish jinode after initialization

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Li Chen <[email protected]>

commit 1aec30021edd410b986c156f195f3d23959a9d11 upstream.

ext4_inode_attach_jinode() publishes ei->jinode to concurrent users. It used to set ei->jinode before jbd2_journal_init_jbd_inode(), allowing a reader to observe a non-NULL jinode with i_vfs_inode still unset.

The fast commit flush path can then pass this jinode to jbd2_wait_inode_data(), which dereferences i_vfs_inode->i_mapping and may crash.

Below is the crash I observe:

```
BUG: unable to handle page fault for address: 000000010beb47f4
PGD 110e51067 P4D 110e51067 PUD 0
Oops: Oops: 0000 [#1] SMP NOPTI
CPU: 1 UID: 0 PID: 4850 Comm: fc_fsync_bench_ Not tainted 6.18.0-00764-g795a690c06a5 #1 PREEMPT(voluntary)
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.17.0-2-2 04/01/2014
RIP: 0010:xas_find_marked+0x3d/0x2e0
Code: e0 03 48 83 f8 02 0f 84 f0 01 00 00 48 8b 47 08 48 89 c3 48 39 c6 0f 82 fd 01 00 00 48 85 c9 74 3d 48 83 f9 03 77 63 4c 8b 0f <49> 8b 71 08 48 c7 47 18 00 00 00 00 48 89 f1 83 e1 03 48 83 f9 02
RSP: 0018:ffffbbee806e7bf0 EFLAGS: 00010246
RAX: 000000000010beb4 RBX: 000000000010beb4 RCX: 0000000000000003
RDX: 0000000000000001 RSI: 0000002000300000 RDI: ffffbbee806e7c10
RBP: 0000000000000001 R08: 0000002000300000 R09: 000000010beb47ec
R10: ffff9ea494590090 R11: 0000000000000000 R12: 0000002000300000
R13: ffffbbee806e7c90 R14: ffff9ea494513788 R15: ffffbbee806e7c88
FS: 00007fc2f9e3e6c0(0000) GS:ffff9ea6b1444000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000010beb47f4 CR3: 0000000119ac5000 CR4: 0000000000750ef0
PKRU: 55555554
Call Trace:
<TASK>
filemap_get_folios_tag+0x87/0x2a0
__filemap_fdatawait_range+0x5f/0xd0
? srso_alias_return_thunk+0x5/0xfbef5
? __schedule+0x3e7/0x10c0
? srso_alias_return_thunk+0x5/0xfbef5
? srso_alias_return_thunk+0x5/0xfbef5
? srso_alias_return_thunk+0x5/0xfbef5
? preempt_count_sub+0x5f/0x80
? srso_alias_return_thunk+0x5/0xfbef5
? cap_safe_nice+0x37/0x70
? srso_alias_return_thunk+0x5/0xfbef5
? preempt_count_sub+0x5f/0x80
? srso_alias_return_thunk+0x5/0xfbef5
filemap_fdatawait_range_keep_errors+0x12/0x40
ext4_fc_commit+0x697/0x8b0
? ext4_file_write_iter+0x64b/0x950
? srso_alias_return_thunk+0x5/0xfbef5
? preempt_count_sub+0x5f/0x80
? srso_alias_return_thunk+0x5/0xfbef5
? vfs_write+0x356/0x480
? srso_alias_return_thunk+0x5/0xfbef5
? preempt_count_sub+0x5f/0x80
ext4_sync_file+0xf7/0x370
do_fsync+0x3b/0x80
? syscall_trace_enter+0x108/0x1d0
__x64_sys_fdatasync+0x16/0x20
do_syscall_64+0x62/0x2c0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
...
```

Fix this by initializing the jbd2_inode first.
Use smp_wmb() and WRITE_ONCE() to publish ei->jinode after initialization. Readers use READ_ONCE() to fetch the pointer.

---
 fs/ext4/fast_commit.c |    4 ++--
 fs/ext4/inode.c       |   15 +++++++++++----
 2 files changed, 13 insertions(+), 6 deletions(-)
fs/ext4/fast_commit.c +2 -2
@@ -975,13 +975,13 @@ static int ext4_fc_flush_data(journal_t
 	int ret = 0;
 
 	list_for_each_entry(ei, &sbi->s_fc_q[FC_Q_MAIN], i_fc_list) {
-		ret = jbd2_submit_inode_data(journal, ei->jinode);
+		ret = jbd2_submit_inode_data(journal, READ_ONCE(ei->jinode));
 		if (ret)
 			return ret;
 	}
 
 	list_for_each_entry(ei, &sbi->s_fc_q[FC_Q_MAIN], i_fc_list) {
-		ret = jbd2_wait_inode_data(journal, ei->jinode);
+		ret = jbd2_wait_inode_data(journal, READ_ONCE(ei->jinode));
 		if (ret)
 			return ret;
 	}
fs/ext4/inode.c +11 -4
@@ -126,6 +126,8 @@ void ext4_inode_csum_set(struct inode *i
 static inline int ext4_begin_ordered_truncate(struct inode *inode,
 					      loff_t new_size)
 {
+	struct jbd2_inode *jinode = READ_ONCE(EXT4_I(inode)->jinode);
+
 	trace_ext4_begin_ordered_truncate(inode, new_size);
 	/*
 	 * If jinode is zero, then we never opened the file for
@@ -133,10 +135,10 @@ static inline int ext4_begin_ordered_tru
 	 * jbd2_journal_begin_ordered_truncate() since there's no
 	 * outstanding writes we need to flush.
 	 */
-	if (!EXT4_I(inode)->jinode)
+	if (!jinode)
 		return 0;
 	return jbd2_journal_begin_ordered_truncate(EXT4_JOURNAL(inode),
-						   EXT4_I(inode)->jinode,
+						   jinode,
 						   new_size);
 }
 
@@ -4499,8 +4501,13 @@ int ext4_inode_attach_jinode(struct inod
 			spin_unlock(&inode->i_lock);
 			return -ENOMEM;
 		}
-		ei->jinode = jinode;
-		jbd2_journal_init_jbd_inode(ei->jinode, inode);
+		jbd2_journal_init_jbd_inode(jinode, inode);
+		/*
+		 * Publish ->jinode only after it is fully initialized so that
+		 * readers never observe a partially initialized jbd2_inode.
+		 */
+		smp_wmb();
+		WRITE_ONCE(ei->jinode, jinode);
 		jinode = NULL;
 	}
 	spin_unlock(&inode->i_lock);
author maintainer
#298 lore raw

PATCH 298/342 ext4: test if inodes all dirty pages are submitted to disk

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Ye Bin <[email protected]>

commit 73bf12adbea10b13647864cd1c62410d19e21086 upstream.

The commit aa373cf55099 ("writeback: stop background/kupdate works from livelocking other works") introduced an issue where unmounting a filesystem in a multi-logical-partition scenario could lead to batch file data loss. This problem was not fixed until the commit d92109891f21 ("fs/writeback:
bail out if there is no more inodes for IO and queued once"). It took considerable time to identify the root cause. Additionally, in actual production environments, we frequently encountered file data loss after normal system reboots. Therefore, we are adding a check in the inode release flow to verify whether all dirty pages have been flushed to disk, in order to determine whether the data loss is caused by a logic issue in the filesystem code.

---
 fs/ext4/inode.c |    8 ++++++++
 1 file changed, 8 insertions(+)
fs/ext4/inode.c +8 -0
@@ -184,6 +184,14 @@ void ext4_evict_inode(struct inode *inod
 	if (EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)
 		ext4_evict_ea_inode(inode);
 	if (inode->i_nlink) {
+		/*
+		 * If there's dirty page will lead to data loss, user
+		 * could see stale data.
+		 */
+		if (unlikely(!ext4_emergency_state(inode->i_sb) &&
+		    mapping_tagged(&inode->i_data, PAGECACHE_TAG_DIRTY)))
+			ext4_warning_inode(inode, "data will be lost");
+
 		truncate_inode_pages_final(&inode->i_data);
 
 		goto no_delete;
author maintainer
#299 lore raw

PATCH 299/342 ext4: validate p_idx bounds in ext4_ext_correct_indexes

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Tejas Bharambe <[email protected]>

commit 2acb5c12ebd860f30e4faf67e6cc8c44ddfe5fe8 upstream.

ext4_ext_correct_indexes() walks up the extent tree correcting index entries when the first extent in a leaf is modified. Before accessing path[k].p_idx->ei_block, there is no validation that p_idx falls within the valid range of index entries for that level.

If the on-disk extent header contains a corrupted or crafted eh_entries value, p_idx can point past the end of the allocated buffer, causing a slab-out-of-bounds read.

Fix this by validating path[k].p_idx against EXT_LAST_INDEX() at both access sites: before the while loop and inside it. Return -EFSCORRUPTED if the index pointer is out of range, consistent with how other bounds violations are handled in the ext4 extent tree code.

---
 fs/ext4/extents.c |   15 +++++++++++++++
 1 file changed, 15 insertions(+)
fs/ext4/extents.c +15 -0
@@ -1741,6 +1741,13 @@ static int ext4_ext_correct_indexes(hand
 	err = ext4_ext_get_access(handle, inode, path + k);
 	if (err)
 		return err;
+	if (unlikely(path[k].p_idx > EXT_LAST_INDEX(path[k].p_hdr))) {
+		EXT4_ERROR_INODE(inode,
+				 "path[%d].p_idx %p > EXT_LAST_INDEX %p",
+				 k, path[k].p_idx,
+				 EXT_LAST_INDEX(path[k].p_hdr));
+		return -EFSCORRUPTED;
+	}
 	path[k].p_idx->ei_block = border;
 	err = ext4_ext_dirty(handle, inode, path + k);
 	if (err)
@@ -1753,6 +1760,14 @@ static int ext4_ext_correct_indexes(hand
 		err = ext4_ext_get_access(handle, inode, path + k);
 		if (err)
 			goto clean;
+		if (unlikely(path[k].p_idx > EXT_LAST_INDEX(path[k].p_hdr))) {
+			EXT4_ERROR_INODE(inode,
+					 "path[%d].p_idx %p > EXT_LAST_INDEX %p",
+					 k, path[k].p_idx,
+					 EXT_LAST_INDEX(path[k].p_hdr));
+			err = -EFSCORRUPTED;
+			goto clean;
+		}
 		path[k].p_idx->ei_block = border;
 		err = ext4_ext_dirty(handle, inode, path + k);
 		if (err)
author maintainer
#300 lore raw

PATCH 300/342 ext4: avoid infinite loops caused by residual data

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Edward Adam Davis <[email protected]>

commit 5422fe71d26d42af6c454ca9527faaad4e677d6c upstream.

On the mkdir/mknod path, when mapping logical blocks to physical blocks, if inserting a new extent into the extent tree fails (in this example, because the file system disabled the huge file feature when marking the inode as dirty), ext4_ext_map_blocks() only calls ext4_free_blocks() to reclaim the physical block without deleting the corresponding data in the extent tree. This causes subsequent mkdir operations to reference the previously reclaimed physical block number again, even though this physical block is already being used by the xattr block. Therefore, a situation arises where both the directory and xattr are using the same buffer head block in memory simultaneously.

The above causes ext4_xattr_block_set() to enter an infinite loop about "inserted" and cannot release the inode lock, ultimately leading to the 143s blocking problem mentioned in [1].

If the metadata is corrupted, then trying to remove some extent space can do even more harm. Also in case EXT4_GET_BLOCKS_DELALLOC_RESERVE was passed, remove space wrongly update quota information. Jan Kara suggests distinguishing between two cases:

1) The error is ENOSPC or EDQUOT - in this case the filesystem is fully consistent and we must maintain its consistency including all the accounting. However these errors can happen only early before we've inserted the extent into the extent tree. So current code works correctly for this case.

2) Some other error - this means metadata is corrupted. We should strive to do as few modifications as possible to limit damage. So I'd just skip freeing of allocated blocks.

[1]

INFO: task syz.0.17:5995 blocked for more than 143 seconds.
Call Trace:
 inode_lock_nested include/linux/fs.h:1073 [inline]
 __start_dirop fs/namei.c:2923 [inline]
 start_dirop fs/namei.c:2934 [inline]
---
 fs/ext4/extents.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
fs/ext4/extents.c +6 -2
@@ -4461,9 +4461,13 @@ got_allocated_blocks:
 	path = ext4_ext_insert_extent(handle, inode, path, &newex, flags);
 	if (IS_ERR(path)) {
 		err = PTR_ERR(path);
-		if (allocated_clusters) {
+		/*
+		 * Gracefully handle out of space conditions. If the filesystem
+		 * is inconsistent, we'll just leak allocated blocks to avoid
+		 * causing even more damage.
+		 */
+		if (allocated_clusters && (err == -EDQUOT || err == -ENOSPC)) {
 			int fb_flags = 0;
-
 			/*
 			 * free data blocks we just allocated.
 			 * not a good idea to call discard here directly,
author maintainer
#301 lore raw

PATCH 301/342 ext4: avoid allocate block from corrupted group in ext4_mb_find_by_goal()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Ye Bin <[email protected]>

commit 46066e3a06647c5b186cc6334409722622d05c44 upstream.

There's issue as follows:
...
EXT4-fs (mmcblk0p1): Delayed block allocation failed for inode 206 at logical offset 0 with max blocks 1 with error 117 EXT4-fs (mmcblk0p1): This should not happen!! Data will be lost

EXT4-fs (mmcblk0p1): Delayed block allocation failed for inode 206 at logical offset 0 with max blocks 1 with error 117 EXT4-fs (mmcblk0p1): This should not happen!! Data will be lost

EXT4-fs (mmcblk0p1): Delayed block allocation failed for inode 206 at logical offset 0 with max blocks 1 with error 117 EXT4-fs (mmcblk0p1): This should not happen!! Data will be lost

EXT4-fs (mmcblk0p1): Delayed block allocation failed for inode 206 at logical offset 0 with max blocks 1 with error 117 EXT4-fs (mmcblk0p1): This should not happen!! Data will be lost

EXT4-fs (mmcblk0p1): Delayed block allocation failed for inode 2243 at logical offset 0 with max blocks 1 with error 117 EXT4-fs (mmcblk0p1): This should not happen!! Data will be lost

EXT4-fs (mmcblk0p1): Delayed block allocation failed for inode 2239 at logical offset 0 with max blocks 1 with error 117 EXT4-fs (mmcblk0p1): This should not happen!! Data will be lost

EXT4-fs (mmcblk0p1): error count since last fsck: 1
EXT4-fs (mmcblk0p1): initial error at time 1765597433: ext4_mb_generate_buddy:760 EXT4-fs (mmcblk0p1): last error at time 1765597433: ext4_mb_generate_buddy:760
...

According to the log analysis, blocks are always requested from the corrupted block group. This may happen as follows:
ext4_mb_find_by_goal
ext4_mb_load_buddy
ext4_mb_load_buddy_gfp
ext4_mb_init_cache
ext4_read_block_bitmap_nowait
ext4_wait_block_bitmap
ext4_validate_block_bitmap
if (!grp || EXT4_MB_GRP_BBITMAP_CORRUPT(grp))
return -EFSCORRUPTED; // There's no logs.
if (err)
return err; // Will return error
ext4_lock_group(ac->ac_sb, group);
if (unlikely(EXT4_MB_GRP_BBITMAP_CORRUPT(e4b->bd_info))) // Unreachable
goto out;

After commit 9008a58e5dce ("ext4: make the bitmap read routines return real error codes") merged, Commit 163a203ddb36 ("ext4: mark block group as corrupt on block bitmap error") is no real solution for allocating blocks from corrupted block groups. This is because if 'EXT4_MB_GRP_BBITMAP_CORRUPT(e4b->bd_info)' is true, then 'ext4_mb_load_buddy()' may return an error. This means that the block allocation will fail.
Therefore, check block group if corrupted when ext4_mb_load_buddy() returns error.

Fixes 163a203ddb36 ("ext4: mark block group as corrupt on block bitmap error")
Fixes 9008a58e5dce ("ext4: make the bitmap read routines return real error codes")
---
 fs/ext4/mballoc.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
fs/ext4/mballoc.c +5 -1
@@ -2443,8 +2443,12 @@ int ext4_mb_find_by_goal(struct ext4_all
 		return 0;
 
 	err = ext4_mb_load_buddy(ac->ac_sb, group, e4b);
-	if (err)
+	if (err) {
+		if (EXT4_MB_GRP_BBITMAP_CORRUPT(e4b->bd_info) &&
+		    !(ac->ac_flags & EXT4_MB_HINT_GOAL_ONLY))
+			return 0;
 		return err;
+	}
 
 	ext4_lock_group(ac->ac_sb, group);
 	if (unlikely(EXT4_MB_GRP_BBITMAP_CORRUPT(e4b->bd_info)))
author maintainer
#302 lore raw

PATCH 302/342 ext4: reject mount if bigalloc with s_first_data_block != 0

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Helen Koike <[email protected]>

commit 3822743dc20386d9897e999dbb990befa3a5b3f8 upstream.

bigalloc with s_first_data_block != 0 is not supported, reject mounting it.

---
 fs/ext4/super.c |    7 +++++++
 1 file changed, 7 insertions(+)
fs/ext4/super.c +7 -0
@@ -3625,6 +3625,13 @@ int ext4_feature_set_ok(struct super_blo
 			 "extents feature\n");
 		return 0;
 	}
+	if (ext4_has_feature_bigalloc(sb) &&
+	    le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block)) {
+		ext4_msg(sb, KERN_WARNING,
+			 "bad geometry: bigalloc file system with non-zero "
+			 "first_data_block\n");
+		return 0;
+	}
 
 #if !IS_ENABLED(CONFIG_QUOTA) || !IS_ENABLED(CONFIG_QFMT_V2)
 	if (!readonly && (ext4_has_feature_quota(sb) ||
author maintainer
#303 lore raw

PATCH 303/342 ext4: fix use-after-free in update_super_work when racing with umount

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jiayuan Chen <[email protected]>

commit d15e4b0a418537aafa56b2cb80d44add83e83697 upstream.

Commit b98535d09179 ("ext4: fix bug_on in start_this_handle during umount filesystem") moved ext4_unregister_sysfs() before flushing s_sb_upd_work to prevent new error work from being queued via /proc/fs/ext4/xx/mb_groups reads during unmount. However, this introduced a use-after-free because update_super_work calls ext4_notify_error_sysfs() -> sysfs_notify() which accesses the kobject's kernfs_node after it has been freed by kobject_del() in ext4_unregister_sysfs():

update_super_work ext4_put_super
----------------- --------------

                                   ext4_unregister_sysfs(sb)
                                     kobject_del(&sbi->s_kobj)
                                       __kobject_del()
                                         sysfs_remove_dir()
                                           kobj->sd = NULL
                                         sysfs_put(sd)
                                           kernfs_put()  // RCU free
  ext4_notify_error_sysfs(sbi)
    sysfs_notify(&sbi->s_kobj)
      kn = kobj->sd              // stale pointer
      kernfs_get(kn)             // UAF on freed kernfs_node
                                   ext4_journal_destroy()
                                     flush_work(&sbi->s_sb_upd_work)

Instead of reordering the teardown sequence, fix this by making ext4_notify_error_sysfs() detect that sysfs has already been torn down by checking s_kobj.state_in_sysfs, and skipping the sysfs_notify() call in that case. A dedicated mutex (s_error_notify_mutex) serializes ext4_notify_error_sysfs() against kobject_del() in ext4_unregister_sysfs() to prevent TOCTOU races where the kobject could be deleted between the state_in_sysfs check and the sysfs_notify() call.

---
 fs/ext4/ext4.h  |    1 +
 fs/ext4/super.c |    1 +
 fs/ext4/sysfs.c |   10 +++++++++-
 3 files changed, 11 insertions(+), 1 deletion(-)
fs/ext4/ext4.h +1 -0
@@ -1583,6 +1583,7 @@ struct ext4_sb_info {
 	struct proc_dir_entry *s_proc;
 	struct kobject s_kobj;
 	struct completion s_kobj_unregister;
+	struct mutex s_error_notify_mutex; /* protects sysfs_notify vs kobject_del */
 	struct super_block *s_sb;
 	struct buffer_head *s_mmp_bh;
 
fs/ext4/super.c +1 -0
@@ -5400,6 +5400,7 @@ static int __ext4_fill_super(struct fs_c
 
 	timer_setup(&sbi->s_err_report, print_daily_error_info, 0);
 	spin_lock_init(&sbi->s_error_lock);
+	mutex_init(&sbi->s_error_notify_mutex);
 	INIT_WORK(&sbi->s_sb_upd_work, update_super_work);
 
 	err = ext4_group_desc_init(sb, es, logical_sb_block, &first_not_zeroed);
fs/ext4/sysfs.c +9 -1
@@ -561,7 +561,10 @@ static const struct kobj_type ext4_feat_
 
 void ext4_notify_error_sysfs(struct ext4_sb_info *sbi)
 {
-	sysfs_notify(&sbi->s_kobj, NULL, "errors_count");
+	mutex_lock(&sbi->s_error_notify_mutex);
+	if (sbi->s_kobj.state_in_sysfs)
+		sysfs_notify(&sbi->s_kobj, NULL, "errors_count");
+	mutex_unlock(&sbi->s_error_notify_mutex);
 }
 
 static struct kobject *ext4_root;
@@ -574,8 +577,10 @@ int ext4_register_sysfs(struct super_blo
 	int err;
 
 	init_completion(&sbi->s_kobj_unregister);
+	mutex_lock(&sbi->s_error_notify_mutex);
 	err = kobject_init_and_add(&sbi->s_kobj, &ext4_sb_ktype, ext4_root,
 				   "%s", sb->s_id);
+	mutex_unlock(&sbi->s_error_notify_mutex);
 	if (err) {
 		kobject_put(&sbi->s_kobj);
 		wait_for_completion(&sbi->s_kobj_unregister);
@@ -608,7 +613,10 @@ void ext4_unregister_sysfs(struct super_
 
 	if (sbi->s_proc)
 		remove_proc_subtree(sb->s_id, ext4_proc_root);
+
+	mutex_lock(&sbi->s_error_notify_mutex);
 	kobject_del(&sbi->s_kobj);
+	mutex_unlock(&sbi->s_error_notify_mutex);
 }
 
 int __init ext4_init_sysfs(void)
author maintainer
#304 lore raw

PATCH 304/342 ext4: fix the might_sleep() warnings in kvfree()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Zqiang <[email protected]>

commit 496bb99b7e66f48b178126626f47e9ba79e2d0fa upstream.

Use the kvfree() in the RCU read critical section can trigger the following warnings:

EXT4-fs (vdb): unmounting filesystem cd983e5b-3c83-4f5a-a136-17b00eb9d018.

WARNING: suspicious RCU usage

./include/linux/rcupdate.h:409 Illegal context switch in RCU read-side critical section!

other info that might help us debug this:

rcu_scheduler_active = 2, debug_locks = 1

Call Trace:
 <TASK>
 dump_stack_lvl+0xbb/0xd0
 dump_stack+0x14/0x20
 lockdep_rcu_suspicious+0x15a/0x1b0
 __might_resched+0x375/0x4d0
 ? put_object.part.0+0x2c/0x50
 __might_sleep+0x108/0x160
 vfree+0x58/0x910
 ? ext4_group_desc_free+0x27/0x270
 kvfree+0x23/0x40
 ext4_group_desc_free+0x111/0x270
 ext4_put_super+0x3c8/0xd40
 generic_shutdown_super+0x14c/0x4a0
 ? __pfx_shrinker_free+0x10/0x10
 kill_block_super+0x40/0x90
 ext4_kill_sb+0x6d/0xb0
 deactivate_locked_super+0xb4/0x180
 deactivate_super+0x7e/0xa0
 cleanup_mnt+0x296/0x3e0
 __cleanup_mnt+0x16/0x20
 task_work_run+0x157/0x250
 ? __pfx_task_work_run+0x10/0x10
 ? exit_to_user_mode_loop+0x6a/0x550
 exit_to_user_mode_loop+0x102/0x550
 do_syscall_64+0x44a/0x500
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
 </TASK>

BUG: sleeping function called from invalid context at mm/vmalloc.c:3441
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 556, name: umount
preempt_count: 1, expected: 0
CPU: 3 UID: 0 PID: 556 Comm: umount
Call Trace:
 <TASK>
 dump_stack_lvl+0xbb/0xd0
 dump_stack+0x14/0x20
 __might_resched+0x275/0x4d0
 ? put_object.part.0+0x2c/0x50
 __might_sleep+0x108/0x160
 vfree+0x58/0x910
 ? ext4_group_desc_free+0x27/0x270
 kvfree+0x23/0x40
 ext4_group_desc_free+0x111/0x270
 ext4_put_super+0x3c8/0xd40
 generic_shutdown_super+0x14c/0x4a0
 ? __pfx_shrinker_free+0x10/0x10
 kill_block_super+0x40/0x90
 ext4_kill_sb+0x6d/0xb0
 deactivate_locked_super+0xb4/0x180
 deactivate_super+0x7e/0xa0
 cleanup_mnt+0x296/0x3e0
 __cleanup_mnt+0x16/0x20
 task_work_run+0x157/0x250
 ? __pfx_task_work_run+0x10/0x10
 ? exit_to_user_mode_loop+0x6a/0x550
 exit_to_user_mode_loop+0x102/0x550
 do_syscall_64+0x44a/0x500
 entry_SYSCALL_64_after_hwframe+0x77/0x7f

The above scenarios occur in initialization failures and teardown paths, there are no parallel operations on the resources released by kvfree(), this commit therefore remove rcu_read_lock/unlock() and use rcu_access_pointer() instead of rcu_dereference() operations.

Fixes 7c990728b99e ("ext4: fix potential race between s_flex_groups online resizing and access")
Fixes df3da4ea5a0f ("ext4: fix potential race between s_group_info online resizing and access")
---
 fs/ext4/mballoc.c |   10 +++-------
 fs/ext4/super.c   |    8 ++------
 2 files changed, 5 insertions(+), 13 deletions(-)
fs/ext4/mballoc.c +3 -7
@@ -3584,9 +3584,7 @@ err_freebuddy:
 	rcu_read_unlock();
 	iput(sbi->s_buddy_cache);
 err_freesgi:
-	rcu_read_lock();
-	kvfree(rcu_dereference(sbi->s_group_info));
-	rcu_read_unlock();
+	kvfree(rcu_access_pointer(sbi->s_group_info));
 	return -ENOMEM;
 }
 
@@ -3903,7 +3901,8 @@ void ext4_mb_release(struct super_block
 		WARN_ON_ONCE(!list_empty(&sbi->s_discard_list));
 	}
 
-	if (sbi->s_group_info) {
+	group_info = rcu_access_pointer(sbi->s_group_info);
+	if (group_info) {
 		for (i = 0; i < ngroups; i++) {
 			cond_resched();
 			grinfo = ext4_get_group_info(sb, i);
@@ -3921,12 +3920,9 @@ void ext4_mb_release(struct super_block
 		num_meta_group_infos = (ngroups +
 				EXT4_DESC_PER_BLOCK(sb) - 1) >>
 			EXT4_DESC_PER_BLOCK_BITS(sb);
-		rcu_read_lock();
-		group_info = rcu_dereference(sbi->s_group_info);
 		for (i = 0; i < num_meta_group_infos; i++)
 			kfree(group_info[i]);
 		kvfree(group_info);
-		rcu_read_unlock();
 	}
 	ext4_mb_avg_fragment_size_destroy(sbi);
 	ext4_mb_largest_free_orders_destroy(sbi);
fs/ext4/super.c +2 -6
@@ -1249,12 +1249,10 @@ static void ext4_group_desc_free(struct
 	struct buffer_head **group_desc;
 	int i;
 
-	rcu_read_lock();
-	group_desc = rcu_dereference(sbi->s_group_desc);
+	group_desc = rcu_access_pointer(sbi->s_group_desc);
 	for (i = 0; i < sbi->s_gdb_count; i++)
 		brelse(group_desc[i]);
 	kvfree(group_desc);
-	rcu_read_unlock();
 }
 
 static void ext4_flex_groups_free(struct ext4_sb_info *sbi)
@@ -1262,14 +1260,12 @@ static void ext4_flex_groups_free(struct
 	struct flex_groups **flex_groups;
 	int i;
 
-	rcu_read_lock();
-	flex_groups = rcu_dereference(sbi->s_flex_groups);
+	flex_groups = rcu_access_pointer(sbi->s_flex_groups);
 	if (flex_groups) {
 		for (i = 0; i < sbi->s_flex_groups_allocated; i++)
 			kvfree(flex_groups[i]);
 		kvfree(flex_groups);
 	}
-	rcu_read_unlock();
 }
 
 static void ext4_put_super(struct super_block *sb)
author maintainer
#305 lore raw

PATCH 305/342 ext4: handle wraparound when searching for blocks for indirect mapped blocks

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Theodore Ts'o <[email protected]>

commit bb81702370fad22c06ca12b6e1648754dbc37e0f upstream.

Commit 4865c768b563 ("ext4: always allocate blocks only from groups inode can use") restricts what blocks will be allocated for indirect block based files to block numbers that fit within 32-bit block numbers.

However, when using a review bot running on the latest Gemini LLM to check this commit when backporting into an LTS based kernel, it raised this concern:

If ac->ac_g_ex.fe_group is >= ngroups (for instance, if the goal group was populated via stream allocation from s_mb_last_groups), then start will be >= ngroups.

Does this allow allocating blocks beyond the 32-bit limit for indirect block mapped files? The commit message mentions that ext4_mb_scan_groups_linear() takes care to not select unsupported groups. However, its loop uses group = *start, and the very first iteration will call ext4_mb_scan_group() with this unsupported group because next_linear_group() is only called at the end of the iteration.

After reviewing the code paths involved and considering the LLM review, I determined that this can happen when there is a file system where some files/directories are extent-mapped and others are indirect-block mapped. To address this, add a safety clamp in ext4_mb_scan_groups().

Fixes 4865c768b563 ("ext4: always allocate blocks only from groups inode can use")
Cc Jan Kara <[email protected]>
---
 fs/ext4/mballoc.c |    2 ++
 1 file changed, 2 insertions(+)
fs/ext4/mballoc.c +2 -0
@@ -1199,6 +1199,8 @@ static int ext4_mb_scan_groups(struct ex
 
 	/* searching for the right group start from the goal value specified */
 	start = ac->ac_g_ex.fe_group;
+	if (start >= ngroups)
+		start = 0;
 	ac->ac_prefetch_grp = start;
 	ac->ac_prefetch_nr = 0;
 
author maintainer
#306 lore raw

PATCH 306/342 ext4: fix iloc.bh leak in ext4_fc_replay_inode() error paths

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Baokun Li <[email protected]>

commit ec0a7500d8eace5b4f305fa0c594dd148f0e8d29 upstream.

During code review, Joseph found that ext4_fc_replay_inode() calls ext4_get_fc_inode_loc() to get the inode location, which holds a reference to iloc.bh that must be released via brelse().

However, several error paths jump to the 'out' label without releasing iloc.bh:

- ext4_handle_dirty_metadata() failure
- sync_dirty_buffer() failure
- ext4_mark_inode_used() failure
- ext4_iget() failure

Fix this by introducing an 'out_brelse' label placed just before the existing 'out' label to ensure iloc.bh is always released.

Additionally, make ext4_fc_replay_inode() propagate errors properly instead of always returning 0.

---
 fs/ext4/fast_commit.c |   13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
fs/ext4/fast_commit.c +8 -5
@@ -1613,19 +1613,21 @@ static int ext4_fc_replay_inode(struct s
 	/* Immediately update the inode on disk. */
 	ret = ext4_handle_dirty_metadata(NULL, NULL, iloc.bh);
 	if (ret)
-		goto out;
+		goto out_brelse;
 	ret = sync_dirty_buffer(iloc.bh);
 	if (ret)
-		goto out;
+		goto out_brelse;
 	ret = ext4_mark_inode_used(sb, ino);
 	if (ret)
-		goto out;
+		goto out_brelse;
 
 	/* Given that we just wrote the inode on disk, this SHOULD succeed. */
 	inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL);
 	if (IS_ERR(inode)) {
 		ext4_debug("Inode not found.");
-		return -EFSCORRUPTED;
+		inode = NULL;
+		ret = -EFSCORRUPTED;
+		goto out_brelse;
 	}
 
 	/*
@@ -1642,13 +1644,14 @@ static int ext4_fc_replay_inode(struct s
 	ext4_inode_csum_set(inode, ext4_raw_inode(&iloc), EXT4_I(inode));
 	ret = ext4_handle_dirty_metadata(NULL, NULL, iloc.bh);
 	sync_dirty_buffer(iloc.bh);
+out_brelse:
 	brelse(iloc.bh);
 out:
 	iput(inode);
 	if (!ret)
 		blkdev_issue_flush(sb->s_bdev);
 
-	return 0;
+	return ret;
 }
 
 /*
author maintainer
#307 lore raw

PATCH 307/342 ext4: always drain queued discard work in ext4_mb_release()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Theodore Ts'o <[email protected]>

commit 9ee29d20aab228adfb02ca93f87fb53c56c2f3af upstream.

While reviewing recent ext4 patch[1], Sashiko raised the following concern[2]:

Quoted 5 lines

If the filesystem is initially mounted with the discard option, deleting files will populate sbi->s_discard_list and queue s_discard_work. If it is then remounted with nodiscard, the EXT4_MOUNT_DISCARD flag is cleared, but the pending s_discard_work is neither cancelled nor flushed.

[1] https://lore.kernel.org/r/[email protected]/
[2] https://sashiko.dev/#/patchset/20260319094545.19291-1-qiang.zhang%40linux.dev

The concern was valid, but it had nothing to do with the patch[1]. One of the problems with Sashiko in its current (early) form is that it will detect pre-existing issues and report it as a problem with the patch that it is reviewing.

In practice, it would be hard to hit deliberately (unless you are a malicious syzkaller fuzzer), since it would involve mounting the file system with -o discard, and then deleting a large number of files, remounting the file system with -o nodiscard, and then immediately unmounting the file system before the queued discard work has a change to drain on its own.

Fix it because it's a real bug, and to avoid Sashiko from raising this concern when analyzing future patches to mballoc.c.

Fixes 55cdd0af2bc5 ("ext4: get discard out of jbd2 commit kthread contex")
---
 fs/ext4/mballoc.c |   12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)
fs/ext4/mballoc.c +5 -7
@@ -3895,13 +3895,11 @@ void ext4_mb_release(struct super_block
 	struct kmem_cache *cachep = get_groupinfo_cache(sb->s_blocksize_bits);
 	int count;
 
-	if (test_opt(sb, DISCARD)) {
-		/*
-		 * wait the discard work to drain all of ext4_free_data
-		 */
-		flush_work(&sbi->s_discard_work);
-		WARN_ON_ONCE(!list_empty(&sbi->s_discard_list));
-	}
+	/*
+	 * wait the discard work to drain all of ext4_free_data
+	 */
+	flush_work(&sbi->s_discard_work);
+	WARN_ON_ONCE(!list_empty(&sbi->s_discard_list));
 
 	group_info = rcu_access_pointer(sbi->s_group_info);
 	if (group_info) {
author maintainer
#308 lore raw

PATCH 308/342 arm64: dts: imx8mn-tqma8mqnl: fix LDO5 power off

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Markus Niebel <[email protected]>

commit 8adc841d43ebceabec996c9dcff6e82d3e585268 upstream.

Fix SD card removal caused by automatic LDO5 power off after boot

To prevent this, add vqmmc regulator for USDHC, using a GPIO-controlled regulator that is supplied by LDO5. Since this is implemented on SoM but used on baseboards with SD-card interface, implement the functionality on SoM part and optionally enable it on baseboards if needed.

---
 arch/arm64/boot/dts/freescale/imx8mn-tqma8mqnl-mba8mx.dts |   13 ++++----
 arch/arm64/boot/dts/freescale/imx8mn-tqma8mqnl.dtsi       |   22 ++++++++++++++
 2 files changed, 29 insertions(+), 6 deletions(-)
arch/arm64/boot/dts/freescale/imx8mn-tqma8mqnl-mba8mx.dts +7 -6
@@ -69,6 +69,10 @@
 	samsung,esc-clock-frequency = <20000000>;
 };
 
+&reg_usdhc2_vqmmc {
+	status = "okay";
+};
+
 &sai3 {
 	assigned-clocks = <&clk IMX8MN_CLK_SAI3>;
 	assigned-clock-parents = <&clk IMX8MN_AUDIO_PLL1_OUT>;
@@ -216,8 +220,7 @@
 			   <MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0		0x1d4>,
 			   <MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1		0x1d4>,
 			   <MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2		0x1d4>,
-			   <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3		0x1d4>,
-			   <MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT	0x84>;
+			   <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3		0x1d4>;
 	};
 
 	pinctrl_usdhc2_100mhz: usdhc2-100mhzgrp {
@@ -226,8 +229,7 @@
 			   <MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0		0x1d4>,
 			   <MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1		0x1d4>,
 			   <MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2		0x1d4>,
-			   <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3		0x1d4>,
-			   <MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT	0x84>;
+			   <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3		0x1d4>;
 	};
 
 	pinctrl_usdhc2_200mhz: usdhc2-200mhzgrp {
@@ -236,8 +238,7 @@
 			   <MX8MN_IOMUXC_SD2_DATA0_USDHC2_DATA0		0x1d4>,
 			   <MX8MN_IOMUXC_SD2_DATA1_USDHC2_DATA1		0x1d4>,
 			   <MX8MN_IOMUXC_SD2_DATA2_USDHC2_DATA2		0x1d4>,
-			   <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3		0x1d4>,
-			   <MX8MN_IOMUXC_GPIO1_IO04_USDHC2_VSELECT	0x84>;
+			   <MX8MN_IOMUXC_SD2_DATA3_USDHC2_DATA3		0x1d4>;
 	};
 
 	pinctrl_usdhc2_gpio: usdhc2-gpiogrp {
arch/arm64/boot/dts/freescale/imx8mn-tqma8mqnl.dtsi +22 -0
@@ -30,6 +30,20 @@
 		regulator-max-microvolt = <3300000>;
 	};
 
+	reg_usdhc2_vqmmc: regulator-usdhc2-vqmmc {
+		compatible = "regulator-gpio";
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_reg_usdhc2_vqmmc>;
+		regulator-name = "V_SD2";
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <3300000>;
+		gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+		states = <1800000 0x1>,
+			 <3300000 0x0>;
+		vin-supply = <&ldo5_reg>;
+		status = "disabled";
+	};
+
 	reserved-memory {
 		#address-cells = <2>;
 		#size-cells = <2>;
@@ -233,6 +247,10 @@
 	vddio-supply = <&ldo3_reg>;
 };
 
+&usdhc2 {
+	vqmmc-supply = <&reg_usdhc2_vqmmc>;
+};
+
 &usdhc3 {
 	pinctrl-names = "default", "state_100mhz", "state_200mhz";
 	pinctrl-0 = <&pinctrl_usdhc3>;
@@ -287,6 +305,10 @@
 		fsl,pins = <MX8MN_IOMUXC_SD2_RESET_B_GPIO2_IO19		0x84>;
 	};
 
+	pinctrl_reg_usdhc2_vqmmc: regusdhc2vqmmcgrp {
+		fsl,pins = <MX8MN_IOMUXC_GPIO1_IO04_GPIO1_IO4		0xc0>;
+	};
+
 	pinctrl_usdhc3: usdhc3grp {
 		fsl,pins = <MX8MN_IOMUXC_NAND_WE_B_USDHC3_CLK		0x1d4>,
 			   <MX8MN_IOMUXC_NAND_WP_B_USDHC3_CMD		0x1d2>,
author maintainer
#309 lore raw

PATCH 309/342 powerpc64/bpf: do not increment tailcall count when prog is NULL

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Hari Bathini <[email protected]>

commit 521bd39d9d28ce54cbfec7f9b89c94ad4fdb8350 upstream.

Do not increment tailcall count, if tailcall did not succeed due to missing BPF program.

[ Conflict due to missing feature commit 2ed2d8f6fb38 ("powerpc64/bpf:
Support tailcalls with subprogs") resolved accordingly. ]

---
 arch/powerpc/net/bpf_jit_comp64.c |   23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)
arch/powerpc/net/bpf_jit_comp64.c +14 -9
@@ -430,27 +430,32 @@ static int bpf_jit_emit_tail_call(u32 *i
 
 	/*
 	 * tail_call_cnt++;
+	 * Writeback this updated value only if tailcall succeeds.
 	 */
 	EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), 1));
-	EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
 
 	/* prog = array->ptrs[index]; */
-	EMIT(PPC_RAW_MULI(bpf_to_ppc(TMP_REG_1), b2p_index, 8));
-	EMIT(PPC_RAW_ADD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), b2p_bpf_array));
-	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_array, ptrs)));
+	EMIT(PPC_RAW_MULI(bpf_to_ppc(TMP_REG_2), b2p_index, 8));
+	EMIT(PPC_RAW_ADD(bpf_to_ppc(TMP_REG_2), bpf_to_ppc(TMP_REG_2), b2p_bpf_array));
+	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_2), bpf_to_ppc(TMP_REG_2),
+			offsetof(struct bpf_array, ptrs)));
 
 	/*
 	 * if (prog == NULL)
 	 *   goto out;
 	 */
-	EMIT(PPC_RAW_CMPLDI(bpf_to_ppc(TMP_REG_1), 0));
+	EMIT(PPC_RAW_CMPLDI(bpf_to_ppc(TMP_REG_2), 0));
 	PPC_BCC_SHORT(COND_EQ, out);
 
 	/* goto *(prog->bpf_func + prologue_size); */
-	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_prog, bpf_func)));
-	EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1),
-			FUNCTION_DESCR_SIZE + bpf_tailcall_prologue_size));
-	EMIT(PPC_RAW_MTCTR(bpf_to_ppc(TMP_REG_1)));
+	EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_2), bpf_to_ppc(TMP_REG_2),
+			offsetof(struct bpf_prog, bpf_func)));
+	EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_2), bpf_to_ppc(TMP_REG_2),
+			  FUNCTION_DESCR_SIZE + bpf_tailcall_prologue_size));
+	EMIT(PPC_RAW_MTCTR(bpf_to_ppc(TMP_REG_2)));
+
+	/* Writeback updated tailcall count */
+	EMIT(PPC_RAW_STD(bpf_to_ppc(TMP_REG_1), _R1, bpf_jit_stack_tailcallcnt(ctx)));
 
 	/* tear down stack, restore NVRs, ... */
 	bpf_jit_emit_common_epilogue(image, ctx);
author maintainer
#310 lore raw

PATCH 310/342 mm/damon/core: avoid use of half-online-committed context

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: SeongJae Park <[email protected]>

commit 26f775a054c3cda86ad465a64141894a90a9e145 upstream.

One major usage of damon_call() is online DAMON parameters update. It is done by calling damon_commit_ctx() inside the damon_call() callback function. damon_commit_ctx() can fail for two reasons: 1) invalid parameters and 2) internal memory allocation failures. In case of failures, the damon_ctx that attempted to be updated (commit destination) can be partially updated (or, corrupted from a perspective), and therefore shouldn't be used anymore. The function only ensures the damon_ctx object can safely deallocated using damon_destroy_ctx().

The API callers are, however, calling damon_commit_ctx() only after asserting the parameters are valid, to avoid damon_commit_ctx() fails due to invalid input parameters. But it can still theoretically fail if the internal memory allocation fails. In the case, DAMON may run with the partially updated damon_ctx. This can result in unexpected behaviors including even NULL pointer dereference in case of damos_commit_dests() failure [1]. Such allocation failure is arguably too small to fail, so the real world impact would be rare. But, given the bad consequence, this needs to be fixed.

Avoid such partially-committed (maybe-corrupted) damon_ctx use by saving the damon_commit_ctx() failure on the damon_ctx object. For this, introduce damon_ctx->maybe_corrupted field. damon_commit_ctx() sets it when it is failed. kdamond_call() checks if the field is set after each damon_call_control->fn() is executed. If it is set, ignore remaining callback requests and return. All kdamond_call() callers including kdamond_fn() also check the maybe_corrupted field right after kdamond_call() invocations. If the field is set, break the kdamond_fn() main loop so that DAMON sill doesn't use the context that might be corrupted.

---
 include/linux/damon.h |    7 +++++++
 mm/damon/core.c       |    9 ++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)
include/linux/damon.h +7 -0
@@ -806,7 +806,14 @@ struct damon_ctx {
 	struct damos_walk_control *walk_control;
 	struct mutex walk_control_lock;
 
+	/*
+	 * indicate if this may be corrupted.  Currentonly this is set only for
+	 * damon_commit_ctx() failure.
+	 */
+	bool maybe_corrupted;
+
 /* public: */
+	/* Working thread of the given DAMON context */
 	struct task_struct *kdamond;
 	struct mutex kdamond_lock;
 
mm/damon/core.c +8 -1
@@ -1241,6 +1241,7 @@ int damon_commit_ctx(struct damon_ctx *d
 {
 	int err;
 
+	dst->maybe_corrupted = true;
 	if (!is_power_of_2(src->min_region_sz))
 		return -EINVAL;
 
@@ -1266,6 +1267,7 @@ int damon_commit_ctx(struct damon_ctx *d
 	dst->addr_unit = src->addr_unit;
 	dst->min_region_sz = src->min_region_sz;
 
+	dst->maybe_corrupted = false;
 	return 0;
 }
 
@@ -2610,10 +2612,11 @@ static void kdamond_call(struct damon_ct
 			complete(&control->completion);
 		} else if (control->canceled && control->dealloc_on_cancel) {
 			kfree(control);
-			continue;
 		} else {
 			list_add(&control->list, &repeat_controls);
 		}
+		if (!cancel && ctx->maybe_corrupted)
+			break;
 	}
 	control = list_first_entry_or_null(&repeat_controls,
 			struct damon_call_control, list);
@@ -2646,6 +2649,8 @@ static int kdamond_wait_activation(struc
 		kdamond_usleep(min_wait_time);
 
 		kdamond_call(ctx, false);
+		if (ctx->maybe_corrupted)
+			return -EINVAL;
 		damos_walk_cancel(ctx);
 	}
 	return -EBUSY;
@@ -2731,6 +2736,8 @@ static int kdamond_fn(void *data)
 		 * kdamond_merge_regions() if possible, to reduce overhead
 		 */
 		kdamond_call(ctx, false);
+		if (ctx->maybe_corrupted)
+			break;
 		if (!list_empty(&ctx->schemes))
 			kdamond_apply_schemes(ctx);
 		else
author maintainer
#311 lore raw

PATCH 311/342 rust: pin-init: internal: init: document load-bearing fact of field accessors

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Benno Lossin <[email protected]>

[ Upstream commit 580cc37b1de4fcd9997c48d7080e744533f09f36 ]

The functions [Pin]Init::__[pinned_]init and ptr::write called from the init! macro require the passed pointer to be aligned. This fact is ensured by the creation of field accessors to previously initialized fields.

Since we missed this very important fact from the beginning [1], document it in the code.

Fixes 90e53c5e70a6 ("rust: add pin-init API core")
Cc <[email protected]> # 6.6.y, 6.12.y: 42415d163e5d: rust: pin-init: add references to previously initialized fields
Cc <[email protected]> # 6.6.y, 6.12.y, 6.18.y, 6.19.y
[ Updated Cc: stable@ tags as discussed. - Miguel ]

[ Moved changes to the declarative macro, because 6.19.y and earlier do not
have syn. Also duplicated the comment for all field accessor creations.
- Benno ]

---
 rust/pin-init/src/macros.rs |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)
rust/pin-init/src/macros.rs +16 -0
@@ -1312,6 +1312,10 @@ macro_rules! __init_internal {
         // return when an error/panic occurs.
         // We also use the `data` to require the correct trait (`Init` or `PinInit`) for `$field`.
         unsafe { $data.$field(::core::ptr::addr_of_mut!((*$slot).$field), init)? };
+        // NOTE: the field accessor ensures that the initialized field is properly aligned.
+        // Unaligned fields will cause the compiler to emit E0793. We do not support
+        // unaligned fields since `Init::__init` requires an aligned pointer; the call to
+        // `ptr::write` below has the same requirement.
         // SAFETY:
         // - the project function does the correct field projection,
         // - the field has been initialized,
@@ -1351,6 +1355,10 @@ macro_rules! __init_internal {
         // return when an error/panic occurs.
         unsafe { $crate::Init::__init(init, ::core::ptr::addr_of_mut!((*$slot).$field))? };
 
+        // NOTE: the field accessor ensures that the initialized field is properly aligned.
+        // Unaligned fields will cause the compiler to emit E0793. We do not support
+        // unaligned fields since `Init::__init` requires an aligned pointer; the call to
+        // `ptr::write` below has the same requirement.
         // SAFETY:
         // - the field is not structurally pinned, since the line above must compile,
         // - the field has been initialized,
@@ -1391,6 +1399,10 @@ macro_rules! __init_internal {
             unsafe { ::core::ptr::write(::core::ptr::addr_of_mut!((*$slot).$field), $field) };
         }
 
+        // NOTE: the field accessor ensures that the initialized field is properly aligned.
+        // Unaligned fields will cause the compiler to emit E0793. We do not support
+        // unaligned fields since `Init::__init` requires an aligned pointer; the call to
+        // `ptr::write` below has the same requirement.
         #[allow(unused_variables)]
         // SAFETY:
         // - the field is not structurally pinned, since no `use_data` was required to create this
@@ -1431,6 +1443,10 @@ macro_rules! __init_internal {
             // SAFETY: The memory at `slot` is uninitialized.
             unsafe { ::core::ptr::write(::core::ptr::addr_of_mut!((*$slot).$field), $field) };
         }
+        // NOTE: the field accessor ensures that the initialized field is properly aligned.
+        // Unaligned fields will cause the compiler to emit E0793. We do not support
+        // unaligned fields since `Init::__init` requires an aligned pointer; the call to
+        // `ptr::write` below has the same requirement.
         // SAFETY:
         // - the project function does the correct field projection,
         // - the field has been initialized,
author maintainer
#312 lore raw

PATCH 312/342 ksmbd: fix use-after-free and NULL deref in smb_grant_oplock()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Werner Kasselman <[email protected]>

[ Upstream commit 48623ec358c1c600fa1e38368746f933e0f1a617 ]

smb_grant_oplock() has two issues in the oplock publication sequence:

1) opinfo is linked into ci->m_op_list (via opinfo_add) before add_lease_global_list() is called. If add_lease_global_list() fails (kmalloc returns NULL), the error path frees the opinfo via __free_opinfo() while it is still linked in ci->m_op_list. Concurrent m_op_list readers (opinfo_get_list, or direct iteration in smb_break_all_levII_oplock) dereference the freed node.

2) opinfo->o_fp is assigned after add_lease_global_list() publishes the opinfo on the global lease list. A concurrent find_same_lease_key() can walk the lease list and dereference opinfo->o_fp->f_ci while o_fp is still NULL.

Fix by restructuring the publication sequence to eliminate post-publish failure:

- Set opinfo->o_fp before any list publication (fixes NULL deref).
- Preallocate lease_table via alloc_lease_table() before opinfo_add() so add_lease_global_list() becomes infallible after publication.
- Keep the original m_op_list publication order (opinfo_add before lease list) so concurrent opens via same_client_has_lease() and opinfo_get_list() still see the in-flight grant.
- Use opinfo_put() instead of __free_opinfo() on err_out so that the RCU-deferred free path is used.

This also requires splitting add_lease_global_list() to take a preallocated lease_table and changing its return type from int to void, since it can no longer fail.

Fixes 1dfd062caa16 ("ksmbd: fix use-after-free by using call_rcu() for oplock_info")
[ adapted kmalloc_obj() macro to kmalloc(sizeof()) ]
---
 fs/smb/server/oplock.c |   72 ++++++++++++++++++++++++++++++-------------------
 1 file changed, 45 insertions(+), 27 deletions(-)
fs/smb/server/oplock.c +45 -27
@@ -82,11 +82,19 @@ static void lease_del_list(struct oplock
 	spin_unlock(&lb->lb_lock);
 }
 
-static void lb_add(struct lease_table *lb)
+static struct lease_table *alloc_lease_table(struct oplock_info *opinfo)
 {
-	write_lock(&lease_list_lock);
-	list_add(&lb->l_entry, &lease_table_list);
-	write_unlock(&lease_list_lock);
+	struct lease_table *lb;
+
+	lb = kmalloc(sizeof(struct lease_table), KSMBD_DEFAULT_GFP);
+	if (!lb)
+		return NULL;
+
+	memcpy(lb->client_guid, opinfo->conn->ClientGUID,
+	       SMB2_CLIENT_GUID_SIZE);
+	INIT_LIST_HEAD(&lb->lease_list);
+	spin_lock_init(&lb->lb_lock);
+	return lb;
 }
 
 static int alloc_lease(struct oplock_info *opinfo, struct lease_ctx_info *lctx)
@@ -1042,34 +1050,27 @@ static void copy_lease(struct oplock_inf
 	lease2->version = lease1->version;
 }
 
-static int add_lease_global_list(struct oplock_info *opinfo)
+static void add_lease_global_list(struct oplock_info *opinfo,
+				  struct lease_table *new_lb)
 {
 	struct lease_table *lb;
 
-	read_lock(&lease_list_lock);
+	write_lock(&lease_list_lock);
 	list_for_each_entry(lb, &lease_table_list, l_entry) {
 		if (!memcmp(lb->client_guid, opinfo->conn->ClientGUID,
 			    SMB2_CLIENT_GUID_SIZE)) {
 			opinfo->o_lease->l_lb = lb;
 			lease_add_list(opinfo);
-			read_unlock(&lease_list_lock);
-			return 0;
+			write_unlock(&lease_list_lock);
+			kfree(new_lb);
+			return;
 		}
 	}
-	read_unlock(&lease_list_lock);
 
-	lb = kmalloc(sizeof(struct lease_table), KSMBD_DEFAULT_GFP);
-	if (!lb)
-		return -ENOMEM;
-
-	memcpy(lb->client_guid, opinfo->conn->ClientGUID,
-	       SMB2_CLIENT_GUID_SIZE);
-	INIT_LIST_HEAD(&lb->lease_list);
-	spin_lock_init(&lb->lb_lock);
-	opinfo->o_lease->l_lb = lb;
+	opinfo->o_lease->l_lb = new_lb;
 	lease_add_list(opinfo);
-	lb_add(lb);
-	return 0;
+	list_add(&new_lb->l_entry, &lease_table_list);
+	write_unlock(&lease_list_lock);
 }
 
 static void set_oplock_level(struct oplock_info *opinfo, int level,
@@ -1189,6 +1190,7 @@ int smb_grant_oplock(struct ksmbd_work *
 	int err = 0;
 	struct oplock_info *opinfo = NULL, *prev_opinfo = NULL;
 	struct ksmbd_inode *ci = fp->f_ci;
+	struct lease_table *new_lb = NULL;
 	bool prev_op_has_lease;
 	__le32 prev_op_state = 0;
 
@@ -1291,21 +1293,37 @@ set_lev:
 	set_oplock_level(opinfo, req_op_level, lctx);
 
 out:
-	opinfo_count_inc(fp);
-	opinfo_add(opinfo, fp);
-
+	/*
+	 * Set o_fp before any publication so that concurrent readers
+	 * (e.g. find_same_lease_key() on the lease list) that
+	 * dereference opinfo->o_fp don't hit a NULL pointer.
+	 *
+	 * Keep the original publication order so concurrent opens can
+	 * still observe the in-flight grant via ci->m_op_list, but make
+	 * everything after opinfo_add() no-fail by preallocating any new
+	 * lease_table first.
+	 */
+	opinfo->o_fp = fp;
 	if (opinfo->is_lease) {
-		err = add_lease_global_list(opinfo);
-		if (err)
+		new_lb = alloc_lease_table(opinfo);
+		if (!new_lb) {
+			err = -ENOMEM;
 			goto err_out;
+		}
 	}
 
+	opinfo_count_inc(fp);
+	opinfo_add(opinfo, fp);
+
+	if (opinfo->is_lease)
+		add_lease_global_list(opinfo, new_lb);
+
 	rcu_assign_pointer(fp->f_opinfo, opinfo);
-	opinfo->o_fp = fp;
 
 	return 0;
 err_out:
-	__free_opinfo(opinfo);
+	kfree(new_lb);
+	opinfo_put(opinfo);
 	return err;
 }
 
author maintainer
#313 lore raw

PATCH 313/342 dmaengine: idxd: Fix crash when the event log is disabled

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Vinicius Costa Gomes <[email protected]>

[ Upstream commit 52d2edea0d63c935e82631e4b9e4a94eccf97b5b ]

If reporting errors to the event log is not supported by the hardware, and an error that causes Function Level Reset (FLR) is received, the driver will try to restore the event log even if it was not allocated.

Also, only try to free the event log if it was properly allocated.

Fixes 6078a315aec1 ("dmaengine: idxd: Add idxd_device_config_save() and idxd_device_config_restore() helpers")
---
 drivers/dma/idxd/device.c | 3 +++
 drivers/dma/idxd/init.c   | 3 ++-
 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/dma/idxd/device.c +3 -0
index c2cdf41b6e576..f9e49c5545f65 100644
@@ -830,6 +830,9 @@ static void idxd_device_evl_free(struct idxd_device *idxd)
 	struct device *dev = &idxd->pdev->dev;
 	struct idxd_evl *evl = idxd->evl;
 
+	if (!evl)
+		return;
+
 	gencfg.bits = ioread32(idxd->reg_base + IDXD_GENCFG_OFFSET);
 	if (!gencfg.evl_en)
 		return;
drivers/dma/idxd/init.c +2 -1
index 2acc34b3daff8..449424242631d 100644
@@ -962,7 +962,8 @@ static void idxd_device_config_restore(struct idxd_device *idxd,
 
 	idxd->rdbuf_limit = idxd_saved->saved_idxd.rdbuf_limit;
 
-	idxd->evl->size = saved_evl->size;
+	if (idxd->evl)
+		idxd->evl->size = saved_evl->size;
 
 	for (i = 0; i < idxd->max_groups; i++) {
 		struct idxd_group *saved_group, *group;
Signature · 1 line
2.53.0
author maintainer
#314 lore raw

PATCH 314/342 dmaengine: idxd: Fix possible invalid memory access after FLR

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Vinicius Costa Gomes <[email protected]>

[ Upstream commit d6077df7b75d26e4edf98983836c05d00ebabd8d ]

In the case that the first Function Level Reset (FLR) concludes correctly, but in the second FLR the scratch area for the saved configuration cannot be allocated, it's possible for a invalid memory access to happen.

Always set the deallocated scratch area to NULL after FLR completes.

---
 drivers/dma/idxd/init.c | 1 +
 1 file changed, 1 insertion(+)
drivers/dma/idxd/init.c +1 -0
index 449424242631d..f2b37c63a964c 100644
@@ -1137,6 +1137,7 @@ static void idxd_reset_done(struct pci_dev *pdev)
 	}
 out:
 	kfree(idxd->idxd_saved);
+	idxd->idxd_saved = NULL;
 }
 
 static const struct pci_error_handlers idxd_error_handler = {
Signature · 1 line
2.53.0
author maintainer
#315 lore raw

PATCH 315/342 dmaengine: idxd: Fix not releasing workqueue on .release()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Vinicius Costa Gomes <[email protected]>

[ Upstream commit 3d33de353b1ff9023d5ec73b9becf80ea87af695 ]

The workqueue associated with an DSA/IAA device is not released when the object is freed.

---
 drivers/dma/idxd/sysfs.c | 1 +
 1 file changed, 1 insertion(+)
drivers/dma/idxd/sysfs.c +1 -0
index 9f0701021af0e..cdd7a59140d90 100644
@@ -1812,6 +1812,7 @@ static void idxd_conf_device_release(struct device *dev)
 {
 	struct idxd_device *idxd = confdev_to_idxd(dev);
 
+	destroy_workqueue(idxd->wq);
 	kfree(idxd->groups);
 	bitmap_free(idxd->wq_enable_map);
 	kfree(idxd->wqs);
Signature · 1 line
2.53.0
author maintainer
#316 lore raw

PATCH 316/342 dmaengine: idxd: Fix memory leak when a wq is reset

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Vinicius Costa Gomes <[email protected]>

[ Upstream commit d9cfb5193a047a92a4d3c0e91ea4cc87c8f7c478 ]

idxd_wq_disable_cleanup() which is called from the reset path for a workqueue, sets the wq type to NONE, which for other parts of the driver mean that the wq is empty (all its resources were released).

Only set the wq type to NONE after its resources are released.

---
 drivers/dma/idxd/device.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/dma/idxd/device.c +1 -2
index f9e49c5545f65..a7ecc17442354 100644
@@ -175,6 +175,7 @@ void idxd_wq_free_resources(struct idxd_wq *wq)
 	free_descs(wq);
 	dma_free_coherent(dev, wq->compls_size, wq->compls, wq->compls_addr);
 	sbitmap_queue_free(&wq->sbq);
+	wq->type = IDXD_WQT_NONE;
 }
 EXPORT_SYMBOL_NS_GPL(idxd_wq_free_resources, "IDXD");
 
@@ -382,7 +383,6 @@ static void idxd_wq_disable_cleanup(struct idxd_wq *wq)
 	lockdep_assert_held(&wq->wq_lock);
 	wq->state = IDXD_WQ_DISABLED;
 	memset(wq->wqcfg, 0, idxd->wqcfg_size);
-	wq->type = IDXD_WQT_NONE;
 	wq->threshold = 0;
 	wq->priority = 0;
 	wq->enqcmds_retries = IDXD_ENQCMDS_RETRIES;
@@ -1531,7 +1531,6 @@ void idxd_drv_disable_wq(struct idxd_wq *wq)
 	idxd_wq_reset(wq);
 	idxd_wq_free_resources(wq);
 	percpu_ref_exit(&wq->wq_active);
-	wq->type = IDXD_WQT_NONE;
 	wq->client_count = 0;
 }
 EXPORT_SYMBOL_NS_GPL(idxd_drv_disable_wq, "IDXD");
Signature · 1 line
2.53.0
author maintainer
#317 lore raw

PATCH 317/342 dmaengine: idxd: Fix freeing the allocated ida too late

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Vinicius Costa Gomes <[email protected]>

[ Upstream commit c311f5e9248471a950f0a524c2fd736414d98900 ]

It can happen that when the cdev .release() is called, the driver already called ida_destroy(). Move ida_free() to the _del() path.

We see with DEBUG_KOBJECT_RELEASE enabled and forcing an early PCI unbind.

---
 drivers/dma/idxd/cdev.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/dma/idxd/cdev.c +4 -4
index 7e4715f927732..4105688cf3f06 100644
@@ -158,11 +158,7 @@ static const struct device_type idxd_cdev_file_type = {
 static void idxd_cdev_dev_release(struct device *dev)
 {
 	struct idxd_cdev *idxd_cdev = dev_to_cdev(dev);
-	struct idxd_cdev_context *cdev_ctx;
-	struct idxd_wq *wq = idxd_cdev->wq;
 
-	cdev_ctx = &ictx[wq->idxd->data->type];
-	ida_free(&cdev_ctx->minor_ida, idxd_cdev->minor);
 	kfree(idxd_cdev);
 }
 
@@ -582,11 +578,15 @@ int idxd_wq_add_cdev(struct idxd_wq *wq)
 
 void idxd_wq_del_cdev(struct idxd_wq *wq)
 {
+	struct idxd_cdev_context *cdev_ctx;
 	struct idxd_cdev *idxd_cdev;
 
 	idxd_cdev = wq->idxd_cdev;
 	wq->idxd_cdev = NULL;
 	cdev_device_del(&idxd_cdev->cdev, cdev_dev(idxd_cdev));
+
+	cdev_ctx = &ictx[wq->idxd->data->type];
+	ida_free(&cdev_ctx->minor_ida, idxd_cdev->minor);
 	put_device(cdev_dev(idxd_cdev));
 }
 
Signature · 1 line
2.53.0
author maintainer
#318 lore raw

PATCH 318/342 dmaengine: idxd: Fix leaking event log memory

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Vinicius Costa Gomes <[email protected]>

[ Upstream commit ee66bc29578391c9b48523dc9119af67bd5c7c0f ]

During the device remove process, the device is reset, causing the configuration registers to go back to their default state, which is zero. As the driver is checking if the event log support was enabled before deallocating, it will fail if a reset happened before.

Do not check if the support was enabled, the check for 'idxd->evl' being valid (only allocated if the HW capability is available) is enough.

---
 drivers/dma/idxd/device.c | 4 ----
 1 file changed, 4 deletions(-)
drivers/dma/idxd/device.c +0 -4
index a7ecc17442354..4013f970cb3b2 100644
@@ -833,10 +833,6 @@ static void idxd_device_evl_free(struct idxd_device *idxd)
 	if (!evl)
 		return;
 
-	gencfg.bits = ioread32(idxd->reg_base + IDXD_GENCFG_OFFSET);
-	if (!gencfg.evl_en)
-		return;
-
 	mutex_lock(&evl->lock);
 	gencfg.evl_en = 0;
 	iowrite32(gencfg.bits, idxd->reg_base + IDXD_GENCFG_OFFSET);
Signature · 1 line
2.53.0
author maintainer
#319 lore raw

PATCH 319/342 phy: ti: j721e-wiz: Fix device node reference leak in wiz_get_lane_phy_types()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Felix Gu <[email protected]>

[ Upstream commit 584b457f4166293bdfa50f930228e9fb91a38392 ]

The serdes device_node is obtained using of_get_child_by_name(), which increments the reference count. However, it is never put, leading to a reference leak.

Add the missing of_node_put() calls to ensure the reference count is properly balanced.

Fixes 7ae14cf581f2 ("phy: ti: j721e-wiz: Implement DisplayPort mode to the wiz driver")
---
 drivers/phy/ti/phy-j721e-wiz.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/phy/ti/phy-j721e-wiz.c +2 -0
index ba31b0a1f7f79..77f18de6fdf62 100644
@@ -1425,6 +1425,7 @@ static int wiz_get_lane_phy_types(struct device *dev, struct wiz *wiz)
 			dev_err(dev,
 				"%s: Reading \"reg\" from \"%s\" failed: %d\n",
 				__func__, subnode->name, ret);
+			of_node_put(serdes);
 			return ret;
 		}
 		of_property_read_u32(subnode, "cdns,num-lanes", &num_lanes);
@@ -1439,6 +1440,7 @@ static int wiz_get_lane_phy_types(struct device *dev, struct wiz *wiz)
 		}
 	}
 
+	of_node_put(serdes);
 	return 0;
 }
 
Signature · 1 line
2.53.0
author maintainer
#320 lore raw

PATCH 320/342 dmaengine: dw-edma: Fix multiple times setting of the CYCLE_STATE and CYCLE_BIT bits for HDMA.

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: LUO Haowen <[email protected]>

[ Upstream commit 3f63297ff61a994b99d710dcb6dbde41c4003233 ]

Others have submitted this issue (https://lore.kernel.org/dmaengine/
[email protected]/),
but it has not been fixed yet. Therefore, more supplementary information is provided here.

As mentioned in the "PCS-CCS-CB-TCB" Producer-Consumer Synchronization of "DesignWare Cores PCI Express Controller Databook, version 6.00a":

1. The Consumer CYCLE_STATE (CCS) bit in the register only needs to be initialized once; the value will update automatically to be ~CYCLE_BIT (CB) in the next chunk.
2. The Consumer CYCLE_BIT bit in the register is loaded from the LL element and tested against CCS. When CB = CCS, the data transfer is executed. Otherwise not.

The current logic sets customer (HDMA) CS and CB bits to 1 in each chunk while setting the producer (software) CB of odd chunks to 0 and even chunks to 1 in the linked list. This is leading to a mismatch between the producer CB and consumer CS bits.

This issue can be reproduced by setting the transmission data size to exceed one chunk. By the way, in the EDMA using the same "PCS-CCS-CB-TCB" mechanism, the CS bit is only initialized once and this issue was not found. Refer to drivers/dma/dw-edma/dw-edma-v0-core.c:dw_edma_v0_core_start.

So fix this issue by initializing the CYCLE_STATE and CYCLE_BIT bits only once.

Fixes e74c39573d35 ("dmaengine: dw-edma: Add support for native HDMA")
---
 drivers/dma/dw-edma/dw-hdma-v0-core.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/dma/dw-edma/dw-hdma-v0-core.c +3 -3
index e3f8db4fe909a..ce8f7254bab21 100644
@@ -252,10 +252,10 @@ static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
 			  lower_32_bits(chunk->ll_region.paddr));
 		SET_CH_32(dw, chan->dir, chan->id, llp.msb,
 			  upper_32_bits(chunk->ll_region.paddr));
+		/* Set consumer cycle */
+		SET_CH_32(dw, chan->dir, chan->id, cycle_sync,
+			HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT);
 	}
-	/* Set consumer cycle */
-	SET_CH_32(dw, chan->dir, chan->id, cycle_sync,
-		  HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT);
 
 	dw_hdma_v0_sync_ll_data(chunk);
 
Signature · 1 line
2.53.0
author maintainer
#321 lore raw

PATCH 321/342 dmaengine: xilinx: xdma: Fix regmap init error handling

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Alexander Stein <[email protected]>

[ Upstream commit e0adbf74e2a0455a6bc9628726ba87bcd0b42bf8 ]

devm_regmap_init_mmio returns an ERR_PTR() upon error, not NULL. Fix the error check and also fix the error message. Use the error code from ERR_PTR() instead of the wrong value in ret.

Fixes 17ce252266c7 ("dmaengine: xilinx: xdma: Add xilinx xdma driver")
---
 drivers/dma/xilinx/xdma.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/dma/xilinx/xdma.c +2 -2
index 5ecf8223c112e..58e01e22b9765 100644
@@ -1236,8 +1236,8 @@ static int xdma_probe(struct platform_device *pdev)
 
 	xdev->rmap = devm_regmap_init_mmio(&pdev->dev, reg_base,
 					   &xdma_regmap_config);
-	if (!xdev->rmap) {
-		xdma_err(xdev, "config regmap failed: %d", ret);
+	if (IS_ERR(xdev->rmap)) {
+		xdma_err(xdev, "config regmap failed: %pe", xdev->rmap);
 		goto failed;
 	}
 	INIT_LIST_HEAD(&xdev->dma_dev.channels);
Signature · 1 line
2.53.0
author maintainer
#322 lore raw

PATCH 322/342 netfs: Fix kernel BUG in netfs_limit_iter() for ITER_KVEC iterators

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Deepanshu Kartikey <[email protected]>

[ Upstream commit 67e467a11f62ff64ad219dc6aa5459e132c79d14 ]

When a process crashes and the kernel writes a core dump to a 9P filesystem, __kernel_write() creates an ITER_KVEC iterator. This iterator reaches netfs_limit_iter() via netfs_unbuffered_write(), which only handles ITER_FOLIOQ, ITER_BVEC and ITER_XARRAY iterator types, hitting the BUG() for any other type.

Fix this by adding netfs_limit_kvec() following the same pattern as netfs_limit_bvec(), since both kvec and bvec are simple segment arrays with pointer and length fields. Dispatch it from netfs_limit_iter() when the iterator type is ITER_KVEC.

---
 fs/netfs/iterator.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)
fs/netfs/iterator.c +43 -0
index 72a435e5fc6da..154a14bb2d7f7 100644
@@ -142,6 +142,47 @@ static size_t netfs_limit_bvec(const struct iov_iter *iter, size_t start_offset,
 	return min(span, max_size);
 }
 
+/*
+ * Select the span of a kvec iterator we're going to use.  Limit it by both
+ * maximum size and maximum number of segments.  Returns the size of the span
+ * in bytes.
+ */
+static size_t netfs_limit_kvec(const struct iov_iter *iter, size_t start_offset,
+			       size_t max_size, size_t max_segs)
+{
+	const struct kvec *kvecs = iter->kvec;
+	unsigned int nkv = iter->nr_segs, ix = 0, nsegs = 0;
+	size_t len, span = 0, n = iter->count;
+	size_t skip = iter->iov_offset + start_offset;
+
+	if (WARN_ON(!iov_iter_is_kvec(iter)) ||
+	    WARN_ON(start_offset > n) ||
+	    n == 0)
+		return 0;
+
+	while (n && ix < nkv && skip) {
+		len = kvecs[ix].iov_len;
+		if (skip < len)
+			break;
+		skip -= len;
+		n -= len;
+		ix++;
+	}
+
+	while (n && ix < nkv) {
+		len = min3(n, kvecs[ix].iov_len - skip, max_size);
+		span += len;
+		nsegs++;
+		ix++;
+		if (span >= max_size || nsegs >= max_segs)
+			break;
+		skip = 0;
+		n -= len;
+	}
+
+	return min(span, max_size);
+}
+
 /*
  * Select the span of an xarray iterator we're going to use.  Limit it by both
  * maximum size and maximum number of segments.  It is assumed that segments
@@ -245,6 +286,8 @@ size_t netfs_limit_iter(const struct iov_iter *iter, size_t start_offset,
 		return netfs_limit_bvec(iter, start_offset, max_size, max_segs);
 	if (iov_iter_is_xarray(iter))
 		return netfs_limit_xarray(iter, start_offset, max_size, max_segs);
+	if (iov_iter_is_kvec(iter))
+		return netfs_limit_kvec(iter, start_offset, max_size, max_segs);
 	BUG();
 }
 EXPORT_SYMBOL(netfs_limit_iter);
Signature · 1 line
2.53.0
author maintainer
#323 lore raw

PATCH 323/342 netfs: Fix NULL pointer dereference in netfs_unbuffered_write() on retry

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Deepanshu Kartikey <[email protected]>

[ Upstream commit e9075e420a1eb3b52c60f3b95893a55e77419ce8 ]

When a write subrequest is marked NETFS_SREQ_NEED_RETRY, the retry path in netfs_unbuffered_write() unconditionally calls stream->prepare_write() without checking if it is NULL.

Filesystems such as 9P do not set the prepare_write operation, so stream->prepare_write remains NULL. When get_user_pages() fails with -EFAULT and the subrequest is flagged for retry, this results in a NULL pointer dereference at fs/netfs/direct_write.c:189.

Fix this by mirroring the pattern already used in write_retry.c: if stream->prepare_write is NULL, skip renegotiation and directly reissue the subrequest via netfs_reissue_write(), which handles iterator reset, IN_PROGRESS flag, stats update and reissue internally.

Fixes a0b4c7a49137 ("netfs: Fix unbuffered/DIO writes to dispatch subrequests in strict sequence")
Reported-by [email protected]
---
 fs/netfs/direct_write.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)
fs/netfs/direct_write.c +11 -3
index dd1451bf7543d..4d9760e36c119 100644
@@ -186,10 +186,18 @@ static int netfs_unbuffered_write(struct netfs_io_request *wreq)
 		stream->sreq_max_segs	= INT_MAX;
 
 		netfs_get_subrequest(subreq, netfs_sreq_trace_get_resubmit);
-		stream->prepare_write(subreq);
 
-		__set_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags);
-		netfs_stat(&netfs_n_wh_retry_write_subreq);
+		if (stream->prepare_write) {
+			stream->prepare_write(subreq);
+			__set_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags);
+			netfs_stat(&netfs_n_wh_retry_write_subreq);
+		} else {
+			struct iov_iter source;
+
+			netfs_reset_iter(subreq);
+			source = subreq->io_iter;
+			netfs_reissue_write(stream, subreq, &source);
+		}
 	}
 
 	netfs_unbuffered_write_done(wreq);
Signature · 1 line
2.53.0
author maintainer
#324 lore raw

PATCH 324/342 dmaengine: idxd: fix possible wrong descriptor completion in llist_abort_desc()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Tuo Li <[email protected]>

[ Upstream commit e1c9866173c5f8521f2d0768547a01508cb9ff27 ]

At the end of this function, d is the traversal cursor of flist, but the code completes found instead. This can lead to issues such as NULL pointer dereferences, double completion, or descriptor leaks.

Fix this by completing d instead of found in the final list_for_each_entry_safe() loop.

Fixes aa8d18becc0c ("dmaengine: idxd: add callback support for iaa crypto")
---
 drivers/dma/idxd/submit.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/idxd/submit.c +1 -1
index 6db1c5fcedc58..03217041b8b3e 100644
@@ -138,7 +138,7 @@ static void llist_abort_desc(struct idxd_wq *wq, struct idxd_irq_entry *ie,
 	 */
 	list_for_each_entry_safe(d, t, &flist, list) {
 		list_del_init(&d->list);
-		idxd_dma_complete_txd(found, IDXD_COMPLETE_ABORT, true,
+		idxd_dma_complete_txd(d, IDXD_COMPLETE_ABORT, true,
 				      NULL, NULL);
 	}
 }
Signature · 1 line
2.53.0
author maintainer
#325 lore raw

PATCH 325/342 dmaengine: xilinx: xilinx_dma: Fix dma_device directions

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Marek Vasut <[email protected]>

[ Upstream commit e9cc95397bb7da13fe8a5b53a2f23cfaf9018ade ]

Unlike chan->direction , struct dma_device .directions field is a bitfield. Turn chan->direction into a bitfield to make it compatible with struct dma_device .directions .

Fixes 7e01511443c3 ("dmaengine: xilinx_dma: Set dma_device directions")
---
 drivers/dma/xilinx/xilinx_dma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/xilinx/xilinx_dma.c +1 -1
index 89a8254d9cdc6..e6d10079ec670 100644
@@ -3003,7 +3003,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev,
 		return -EINVAL;
 	}
 
-	xdev->common.directions |= chan->direction;
+	xdev->common.directions |= BIT(chan->direction);
 
 	/* Request the interrupt */
 	chan->irq = of_irq_get(node, chan->tdest);
Signature · 1 line
2.53.0
author maintainer
#326 lore raw

PATCH 326/342 dmaengine: xilinx: xilinx_dma: Fix residue calculation for cyclic DMA

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Marek Vasut <[email protected]>

[ Upstream commit f61d145999d61948a23cd436ebbfa4c3b9ab8987 ]

The cyclic DMA calculation is currently entirely broken and reports residue only for the first segment. The problem is twofold.

First, when the first descriptor finishes, it is moved from active_list to done_list, but it is never returned back into the active_list. The xilinx_dma_tx_status() expects the descriptor to be in the active_list to report any meaningful residue information, which never happens after the first descriptor finishes. Fix this up in xilinx_dma_start_transfer() and if the descriptor is cyclic, lift it from done_list and place it back into active_list list.

Second, the segment .status fields of the descriptor remain dirty. Once the DMA did one pass on the descriptor, the .status fields are populated with data by the DMA, but the .status fields are not cleared before reuse during the next cyclic DMA round. The xilinx_dma_get_residue() recognizes that as if the descriptor was complete and had 0 residue, which is bogus. Reinitialize the status field before placing the descriptor back into the active_list.

Fixes c0bba3a99f07 ("dmaengine: vdma: Add Support for Xilinx AXI Direct Memory Access Engine")
---
 drivers/dma/xilinx/xilinx_dma.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)
drivers/dma/xilinx/xilinx_dma.c +22 -1
index e6d10079ec670..ccfcc2b801f82 100644
@@ -1546,8 +1546,29 @@ static void xilinx_dma_start_transfer(struct xilinx_dma_chan *chan)
 	if (chan->err)
 		return;
 
-	if (list_empty(&chan->pending_list))
+	if (list_empty(&chan->pending_list)) {
+		if (chan->cyclic) {
+			struct xilinx_dma_tx_descriptor *desc;
+			struct list_head *entry;
+
+			desc = list_last_entry(&chan->done_list,
+					       struct xilinx_dma_tx_descriptor, node);
+			list_for_each(entry, &desc->segments) {
+				struct xilinx_axidma_tx_segment *axidma_seg;
+				struct xilinx_axidma_desc_hw *axidma_hw;
+				axidma_seg = list_entry(entry,
+							struct xilinx_axidma_tx_segment,
+							node);
+				axidma_hw = &axidma_seg->hw;
+				axidma_hw->status = 0;
+			}
+
+			list_splice_tail_init(&chan->done_list, &chan->active_list);
+			chan->desc_pendingcount = 0;
+			chan->idle = false;
+		}
 		return;
+	}
 
 	if (!chan->idle)
 		return;
Signature · 1 line
2.53.0
author maintainer
#327 lore raw

PATCH 327/342 dmaengine: xilinx: xilinx_dma: Fix unmasked residue subtraction

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Marek Vasut <[email protected]>

[ Upstream commit c7d812e33f3e8ca0fa9eeabf71d1c7bc3acedc09 ]

The segment .control and .status fields both contain top bits which are not part of the buffer size, the buffer size is located only in the bottom max_buffer_len bits. To avoid interference from those top bits, mask out the size using max_buffer_len first, and only then subtract the values.

Fixes a575d0b4e663 ("dmaengine: xilinx_dma: Introduce xilinx_dma_get_residue")
---
 drivers/dma/xilinx/xilinx_dma.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/dma/xilinx/xilinx_dma.c +6 -6
index ccfcc2b801f82..7b24d0a18ea53 100644
@@ -997,16 +997,16 @@ static u32 xilinx_dma_get_residue(struct xilinx_dma_chan *chan,
 					      struct xilinx_cdma_tx_segment,
 					      node);
 			cdma_hw = &cdma_seg->hw;
-			residue += (cdma_hw->control - cdma_hw->status) &
-				   chan->xdev->max_buffer_len;
+			residue += (cdma_hw->control & chan->xdev->max_buffer_len) -
+			           (cdma_hw->status & chan->xdev->max_buffer_len);
 		} else if (chan->xdev->dma_config->dmatype ==
 			   XDMA_TYPE_AXIDMA) {
 			axidma_seg = list_entry(entry,
 						struct xilinx_axidma_tx_segment,
 						node);
 			axidma_hw = &axidma_seg->hw;
-			residue += (axidma_hw->control - axidma_hw->status) &
-				   chan->xdev->max_buffer_len;
+			residue += (axidma_hw->control & chan->xdev->max_buffer_len) -
+			           (axidma_hw->status & chan->xdev->max_buffer_len);
 		} else {
 			aximcdma_seg =
 				list_entry(entry,
@@ -1014,8 +1014,8 @@ static u32 xilinx_dma_get_residue(struct xilinx_dma_chan *chan,
 					   node);
 			aximcdma_hw = &aximcdma_seg->hw;
 			residue +=
-				(aximcdma_hw->control - aximcdma_hw->status) &
-				chan->xdev->max_buffer_len;
+				(aximcdma_hw->control & chan->xdev->max_buffer_len) -
+				(aximcdma_hw->status & chan->xdev->max_buffer_len);
 		}
 	}
 
Signature · 1 line
2.53.0
author maintainer
#328 lore raw

PATCH 328/342 dmaengine: xilinx_dma: Fix reset related timeout with two-channel AXIDMA

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Tomi Valkeinen <[email protected]>

[ Upstream commit a17ce4bc6f4f9acf77ba416c36791a15602e53aa ]

A single AXIDMA controller can have one or two channels. When it has two channels, the reset for both are tied together: resetting one channel resets the other as well. This creates a problem where resetting one channel will reset the registers for both channels, including clearing interrupt enable bits for the other channel, which can then lead to timeouts as the driver is waiting for an interrupt which never comes.

The driver currently has a probe-time work around for this: when a channel is created, the driver also resets and enables the interrupts. With two channels the reset for the second channel will clear the interrupt enables for the first one. The work around in the driver is just to manually enable the interrupts again in xilinx_dma_alloc_chan_resources().

This workaround only addresses the probe-time issue. When channels are reset at runtime (e.g., in xilinx_dma_terminate_all() or during error recovery), there's no corresponding mechanism to restore the other channel's interrupt enables. This leads to one channel having its interrupts disabled while the driver expects them to work, causing timeouts and DMA failures.

A proper fix is a complicated matter, as we should not reset the other channel when it's operating normally. So, perhaps, there should be some kind of synchronization for a common reset, which is not trivial to implement. To add to the complexity, the driver also supports other DMA types, like VDMA, CDMA and MCDMA, which don't have a shared reset.

However, when the two-channel AXIDMA is used in the (assumably) normal use case, providing DMA for a single memory-to-memory device, the common reset is a bit smaller issue: when something bad happens on one channel, or when one channel is terminated, the assumption is that we also want to terminate the other channel. And thus resetting both at the same time is "ok".

With that line of thinking we can implement a bit better work around than just the current probe time work around: let's enable the AXIDMA interrupts at xilinx_dma_start_transfer() instead. This ensures interrupts are enabled whenever a transfer starts, regardless of any prior resets that may have cleared them.

This approach is also more logical: enable interrupts only when needed for a transfer, rather than at resource allocation time, and, I think, all the other DMA types should also use this model, but I'm reluctant to do such changes as I cannot test them.

The reset function still enables interrupts even though it's not needed for AXIDMA anymore, but it's common code for all DMA types (VDMA, CDMA, MCDMA), so leave it unchanged to avoid affecting other variants.

Fixes c0bba3a99f07 ("dmaengine: vdma: Add Support for Xilinx AXI Direct Memory Access Engine")
---
 drivers/dma/xilinx/xilinx_dma.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)
drivers/dma/xilinx/xilinx_dma.c +1 -8
index 7b24d0a18ea53..7dec5e6babe14 100644
@@ -1217,14 +1217,6 @@ static int xilinx_dma_alloc_chan_resources(struct dma_chan *dchan)
 
 	dma_cookie_init(dchan);
 
-	if (chan->xdev->dma_config->dmatype == XDMA_TYPE_AXIDMA) {
-		/* For AXI DMA resetting once channel will reset the
-		 * other channel as well so enable the interrupts here.
-		 */
-		dma_ctrl_set(chan, XILINX_DMA_REG_DMACR,
-			      XILINX_DMA_DMAXR_ALL_IRQ_MASK);
-	}
-
 	if ((chan->xdev->dma_config->dmatype == XDMA_TYPE_CDMA) && chan->has_sg)
 		dma_ctrl_set(chan, XILINX_DMA_REG_DMACR,
 			     XILINX_CDMA_CR_SGMODE);
@@ -1594,6 +1586,7 @@ static void xilinx_dma_start_transfer(struct xilinx_dma_chan *chan)
 			     head_desc->async_tx.phys);
 	reg  &= ~XILINX_DMA_CR_DELAY_MAX;
 	reg  |= chan->irq_delay << XILINX_DMA_CR_DELAY_SHIFT;
+	reg |= XILINX_DMA_DMAXR_ALL_IRQ_MASK;
 	dma_ctrl_write(chan, XILINX_DMA_REG_DMACR, reg);
 
 	xilinx_dma_start(chan);
Signature · 1 line
2.53.0
author maintainer
#329 lore raw

PATCH 329/342 selftests/mount_setattr: increase tmpfs size for idmapped mount tests

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Christian Brauner <[email protected]>

[ Upstream commit c465f5591aa84a6f85d66d152e28b92844a45d4f ]

The mount_setattr_idmapped fixture mounts a 2 MB tmpfs at /mnt and then creates a 2 GB sparse ext4 image at /mnt/C/ext4.img. While ftruncate() succeeds (sparse file), mkfs.ext4 needs to write actual metadata blocks (inode tables, journal, bitmaps) which easily exceeds the 2 MB tmpfs limit, causing ENOSPC and failing the fixture setup for all mount_setattr_idmapped tests.

This was introduced by commit d37d4720c3e7 ("selftests/mount_settattr:
ensure that ext4 filesystem can be created") which increased the image size from 2 MB to 2 GB but didn't adjust the tmpfs size.

Bump the tmpfs size to 256 MB which is sufficient for the ext4 metadata.

Fixes d37d4720c3e7 ("selftests/mount_settattr: ensure that ext4 filesystem can be created")
---
 tools/testing/selftests/mount_setattr/mount_setattr_test.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/mount_setattr/mount_setattr_test.c +1 -1
index 7aec3ae82a446..c6dafb3cc1163 100644
@@ -1020,7 +1020,7 @@ FIXTURE_SETUP(mount_setattr_idmapped)
 			"size=100000,mode=700"), 0);
 
 	ASSERT_EQ(mount("testing", "/mnt", "tmpfs", MS_NOATIME | MS_NODEV,
-			"size=2m,mode=700"), 0);
+			"size=256m,mode=700"), 0);
 
 	ASSERT_EQ(mkdir("/mnt/A", 0777), 0);
 
Signature · 1 line
2.53.0
author maintainer
#330 lore raw

PATCH 330/342 netfs: Fix read abandonment during retry

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: David Howells <[email protected]>

[ Upstream commit 7e57523490cd2efb52b1ea97f2e0a74c0fb634cd ]

Under certain circumstances, all the remaining subrequests from a read request will get abandoned during retry. The abandonment process expects the 'subreq' variable to be set to the place to start abandonment from, but it doesn't always have a useful value (it will be uninitialised on the first pass through the loop and it may point to a deleted subrequest on later passes).

Fix the first jump to "abandon:" to set subreq to the start of the first subrequest expected to need retry (which, in this abandonment case, turned out unexpectedly to no longer have NEED_RETRY set).

Also clear the subreq pointer after discarding superfluous retryable subrequests to cause an oops if we do try to access it.

---
 fs/netfs/read_retry.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
fs/netfs/read_retry.c +4 -1
index 7793ba5e3e8fc..cca9ac43c0773 100644
@@ -93,8 +93,10 @@ static void netfs_retry_read_subrequests(struct netfs_io_request *rreq)
 		       from->start, from->transferred, from->len);
 
 		if (test_bit(NETFS_SREQ_FAILED, &from->flags) ||
-		    !test_bit(NETFS_SREQ_NEED_RETRY, &from->flags))
+		    !test_bit(NETFS_SREQ_NEED_RETRY, &from->flags)) {
+			subreq = from;
 			goto abandon;
+		}
 
 		list_for_each_continue(next, &stream->subrequests) {
 			subreq = list_entry(next, struct netfs_io_subrequest, rreq_link);
@@ -178,6 +180,7 @@ static void netfs_retry_read_subrequests(struct netfs_io_request *rreq)
 				if (subreq == to)
 					break;
 			}
+			subreq = NULL;
 			continue;
 		}
 
Signature · 1 line
2.53.0
author maintainer
#331 lore raw

PATCH 331/342 btrfs: fix super block offset in error message in btrfs_validate_super()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Mark Harmstone <[email protected]>

[ Upstream commit b52fe51f724385b3ed81e37e510a4a33107e8161 ]

Fix the superblock offset mismatch error message in btrfs_validate_super(): we changed it so that it considers all the superblocks, but the message still assumes we're only looking at the first one.

The change from %u to %llu is because we're changing from a constant to a u64.

Fixes 069ec957c35e ("btrfs: Refactor btrfs_check_super_valid")
---
 fs/btrfs/disk-io.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
fs/btrfs/disk-io.c +2 -2
index 6d2dcd023cc6f..8df7eb7f01e90 100644
@@ -2503,8 +2503,8 @@ int btrfs_validate_super(const struct btrfs_fs_info *fs_info,
 
 	if (mirror_num >= 0 &&
 	    btrfs_super_bytenr(sb) != btrfs_sb_offset(mirror_num)) {
-		btrfs_err(fs_info, "super offset mismatch %llu != %u",
-			  btrfs_super_bytenr(sb), BTRFS_SUPER_INFO_OFFSET);
+		btrfs_err(fs_info, "super offset mismatch %llu != %llu",
+			  btrfs_super_bytenr(sb), btrfs_sb_offset(mirror_num));
 		ret = -EINVAL;
 	}
 
Signature · 1 line
2.53.0
author maintainer
#332 lore raw

PATCH 332/342 btrfs: fix leak of kobject name for sub-group space_info

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Shin'ichiro Kawasaki <[email protected]>

[ Upstream commit a4376d9a5d4c9610e69def3fc0b32c86a7ab7a41 ]

When create_space_info_sub_group() allocates elements of space_info->sub_group[], kobject_init_and_add() is called for each element via btrfs_sysfs_add_space_info_type(). However, when check_removing_space_info() frees these elements, it does not call btrfs_sysfs_remove_space_info() on them. As a result, kobject_put() is not called and the associated kobj->name objects are leaked.

This memory leak is reproduced by running the blktests test case zbd/009 on kernels built with CONFIG_DEBUG_KMEMLEAK. The kmemleak feature reports the following error:

unreferenced object 0xffff888112877d40 (size 16):
comm "mount", pid 1244, jiffies 4294996972
hex dump (first 16 bytes):

    64 61 74 61 2d 72 65 6c 6f 63 00 c4 c6 a7 cb 7f  data-reloc......
  backtrace (crc 53ffde4d):
    __kmalloc_node_track_caller_noprof+0x619/0x870
    kstrdup+0x42/0xc0
    kobject_set_name_vargs+0x44/0x110
    kobject_init_and_add+0xcf/0x150
    btrfs_sysfs_add_space_info_type+0xfc/0x210 [btrfs]
    create_space_info_sub_group.constprop.0+0xfb/0x1b0 [btrfs]
    create_space_info+0x211/0x320 [btrfs]
    btrfs_init_space_info+0x15a/0x1b0 [btrfs]
    open_ctree+0x33c7/0x4a50 [btrfs]
    btrfs_get_tree.cold+0x9f/0x1ee [btrfs]
    vfs_get_tree+0x87/0x2f0
    vfs_cmd_create+0xbd/0x280
    __do_sys_fsconfig+0x3df/0x990
    do_syscall_64+0x136/0x1540
    entry_SYSCALL_64_after_hwframe+0x76/0x7e

To avoid the leak, call btrfs_sysfs_remove_space_info() instead of kfree() for the elements.

---
 fs/btrfs/block-group.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/block-group.c +1 -1
index 25a0d207f10c9..4b73ccefcbcba 100644
@@ -4466,7 +4466,7 @@ static void check_removing_space_info(struct btrfs_space_info *space_info)
 		for (int i = 0; i < BTRFS_SPACE_INFO_SUB_GROUP_MAX; i++) {
 			if (space_info->sub_group[i]) {
 				check_removing_space_info(space_info->sub_group[i]);
-				kfree(space_info->sub_group[i]);
+				btrfs_sysfs_remove_space_info(space_info->sub_group[i]);
 				space_info->sub_group[i] = NULL;
 			}
 		}
Signature · 1 line
2.53.0
author maintainer
#333 lore raw

PATCH 333/342 btrfs: fix lost error when running device stats on multiple devices fs

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Filipe Manana <[email protected]>

[ Upstream commit 1c37d896b12dfd0d4c96e310b0033c6676933917 ]

Whenever we get an error updating the device stats item for a device in btrfs_run_dev_stats() we allow the loop to go to the next device, and if updating the stats item for the next device succeeds, we end up losing the error we had from the previous device.

Fix this by breaking out of the loop once we get an error and make sure it's returned to the caller. Since we are in the transaction commit path (and in the critical section actually), returning the error will result in a transaction abort.

Fixes 733f4fbbc108 ("Btrfs: read device stats on mount, write modified ones during commit")
---
 fs/btrfs/volumes.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
fs/btrfs/volumes.c +3 -2
index fbf23d20cce01..052b830a0b66e 100644
@@ -7874,8 +7874,9 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans)
 		smp_rmb();
 
 		ret = update_dev_stat_item(trans, device);
-		if (!ret)
-			atomic_sub(stats_cnt, &device->dev_stats_ccnt);
+		if (ret)
+			break;
+		atomic_sub(stats_cnt, &device->dev_stats_ccnt);
 	}
 	mutex_unlock(&fs_devices->device_list_mutex);
 
Signature · 1 line
2.53.0
author maintainer
#334 lore raw

PATCH 334/342 xen/privcmd: unregister xenstore notifier on module exit

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: GuoHan Zhao <[email protected]>

[ Upstream commit cd7e1fef5a1ca1c4fcd232211962ac2395601636 ]

Commit 453b8fb68f36 ("xen/privcmd: restrict usage in unprivileged domU") added a xenstore notifier to defer setting the restriction target until Xenstore is ready.

XEN_PRIVCMD can be built as a module, but privcmd_exit() leaves that notifier behind. Balance the notifier lifecycle by unregistering it on module exit.

This is harmless even if xenstore was already ready at registration time and the notifier was never queued on the chain.

Fixes 453b8fb68f3641fe ("xen/privcmd: restrict usage in unprivileged domU")

Message-ID: <[email protected]>

---
 drivers/xen/privcmd.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/xen/privcmd.c +3 -0
index b8a546fe7c1e2..cbc62f0df11b7 100644
@@ -1764,6 +1764,9 @@ static int __init privcmd_init(void)
 
 static void __exit privcmd_exit(void)
 {
+	if (!xen_initial_domain())
+		unregister_xenstore_notifier(&xenstore_notifier);
+
 	privcmd_ioeventfd_exit();
 	privcmd_irqfd_exit();
 	misc_deregister(&privcmd_dev);
Signature · 1 line
2.53.0
author maintainer
#335 lore raw

PATCH 335/342 netfs: Fix the handling of stream->front by removing it

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: David Howells <[email protected]>

[ Upstream commit 0e764b9d46071668969410ec5429be0e2f38c6d3 ]

The netfs_io_stream::front member is meant to point to the subrequest currently being collected on a stream, but it isn't actually used this way by direct write (which mostly ignores it). However, there's a tracepoint which looks at it. Further, stream->front is actually redundant with stream->subrequests.next.

Fix the potential problem in the direct code by just removing the member and using stream->subrequests.next instead, thereby also simplifying the code.

---
 fs/netfs/buffered_read.c     | 3 +--
 fs/netfs/direct_read.c       | 3 +--
 fs/netfs/direct_write.c      | 1 -
 fs/netfs/read_collect.c      | 4 ++--
 fs/netfs/read_single.c       | 1 -
 fs/netfs/write_collect.c     | 4 ++--
 fs/netfs/write_issue.c       | 3 +--
 include/linux/netfs.h        | 1 -
 include/trace/events/netfs.h | 8 ++++----
 9 files changed, 11 insertions(+), 17 deletions(-)
fs/netfs/buffered_read.c +1 -2
index 37ab6f28b5ad0..88361e8c70961 100644
@@ -171,9 +171,8 @@ static void netfs_queue_read(struct netfs_io_request *rreq,
 	spin_lock(&rreq->lock);
 	list_add_tail(&subreq->rreq_link, &stream->subrequests);
 	if (list_is_first(&subreq->rreq_link, &stream->subrequests)) {
-		stream->front = subreq;
 		if (!stream->active) {
-			stream->collected_to = stream->front->start;
+			stream->collected_to = subreq->start;
 			/* Store list pointers before active flag */
 			smp_store_release(&stream->active, true);
 		}
fs/netfs/direct_read.c +1 -2
index a498ee8d66745..f72e6da88cca7 100644
@@ -71,9 +71,8 @@ static int netfs_dispatch_unbuffered_reads(struct netfs_io_request *rreq)
 		spin_lock(&rreq->lock);
 		list_add_tail(&subreq->rreq_link, &stream->subrequests);
 		if (list_is_first(&subreq->rreq_link, &stream->subrequests)) {
-			stream->front = subreq;
 			if (!stream->active) {
-				stream->collected_to = stream->front->start;
+				stream->collected_to = subreq->start;
 				/* Store list pointers before active flag */
 				smp_store_release(&stream->active, true);
 			}
fs/netfs/direct_write.c +0 -1
index 4d9760e36c119..f9ab69de3e298 100644
@@ -111,7 +111,6 @@ static int netfs_unbuffered_write(struct netfs_io_request *wreq)
 			netfs_prepare_write(wreq, stream, wreq->start + wreq->transferred);
 			subreq = stream->construct;
 			stream->construct = NULL;
-			stream->front = NULL;
 		}
 
 		/* Check if (re-)preparation failed. */
fs/netfs/read_collect.c +2 -2
index 137f0e28a44c5..e5f6665b3341e 100644
@@ -205,7 +205,8 @@ static void netfs_collect_read_results(struct netfs_io_request *rreq)
 	 * in progress.  The issuer thread may be adding stuff to the tail
 	 * whilst we're doing this.
 	 */
-	front = READ_ONCE(stream->front);
+	front = list_first_entry_or_null(&stream->subrequests,
+					 struct netfs_io_subrequest, rreq_link);
 	while (front) {
 		size_t transferred;
 
@@ -301,7 +302,6 @@ static void netfs_collect_read_results(struct netfs_io_request *rreq)
 		list_del_init(&front->rreq_link);
 		front = list_first_entry_or_null(&stream->subrequests,
 						 struct netfs_io_subrequest, rreq_link);
-		stream->front = front;
 		spin_unlock(&rreq->lock);
 		netfs_put_subrequest(remove,
 				     notes & ABANDON_SREQ ?
fs/netfs/read_single.c +0 -1
index 8e6264f62a8f3..d0e23bc42445f 100644
@@ -107,7 +107,6 @@ static int netfs_single_dispatch_read(struct netfs_io_request *rreq)
 	spin_lock(&rreq->lock);
 	list_add_tail(&subreq->rreq_link, &stream->subrequests);
 	trace_netfs_sreq(subreq, netfs_sreq_trace_added);
-	stream->front = subreq;
 	/* Store list pointers before active flag */
 	smp_store_release(&stream->active, true);
 	spin_unlock(&rreq->lock);
fs/netfs/write_collect.c +2 -2
index 83eb3dc1adf8a..b194447f4b111 100644
@@ -228,7 +228,8 @@ static void netfs_collect_write_results(struct netfs_io_request *wreq)
 		if (!smp_load_acquire(&stream->active))
 			continue;
 
-		front = stream->front;
+		front = list_first_entry_or_null(&stream->subrequests,
+						 struct netfs_io_subrequest, rreq_link);
 		while (front) {
 			trace_netfs_collect_sreq(wreq, front);
 			//_debug("sreq [%x] %llx %zx/%zx",
@@ -279,7 +280,6 @@ static void netfs_collect_write_results(struct netfs_io_request *wreq)
 			list_del_init(&front->rreq_link);
 			front = list_first_entry_or_null(&stream->subrequests,
 							 struct netfs_io_subrequest, rreq_link);
-			stream->front = front;
 			spin_unlock(&wreq->lock);
 			netfs_put_subrequest(remove,
 					     notes & SAW_FAILURE ?
fs/netfs/write_issue.c +1 -2
index 437268f656409..2db688f941251 100644
@@ -206,9 +206,8 @@ void netfs_prepare_write(struct netfs_io_request *wreq,
 	spin_lock(&wreq->lock);
 	list_add_tail(&subreq->rreq_link, &stream->subrequests);
 	if (list_is_first(&subreq->rreq_link, &stream->subrequests)) {
-		stream->front = subreq;
 		if (!stream->active) {
-			stream->collected_to = stream->front->start;
+			stream->collected_to = subreq->start;
 			/* Write list pointers before active flag */
 			smp_store_release(&stream->active, true);
 		}
include/linux/netfs.h +0 -1
index 72ee7d210a744..ba17ac5bf356a 100644
@@ -140,7 +140,6 @@ struct netfs_io_stream {
 	void (*issue_write)(struct netfs_io_subrequest *subreq);
 	/* Collection tracking */
 	struct list_head	subrequests;	/* Contributory I/O operations */
-	struct netfs_io_subrequest *front;	/* Op being collected */
 	unsigned long long	collected_to;	/* Position we've collected results to */
 	size_t			transferred;	/* The amount transferred from this stream */
 	unsigned short		error;		/* Aggregate error for the stream */
include/trace/events/netfs.h +4 -4
index 2d366be46a1c3..cbe28211106c5 100644
@@ -740,19 +740,19 @@ TRACE_EVENT(netfs_collect_stream,
 		    __field(unsigned int,	wreq)
 		    __field(unsigned char,	stream)
 		    __field(unsigned long long,	collected_to)
-		    __field(unsigned long long,	front)
+		    __field(unsigned long long,	issued_to)
 			     ),
 
 	    TP_fast_assign(
 		    __entry->wreq	= wreq->debug_id;
 		    __entry->stream	= stream->stream_nr;
 		    __entry->collected_to = stream->collected_to;
-		    __entry->front	= stream->front ? stream->front->start : UINT_MAX;
+		    __entry->issued_to	= atomic64_read(&wreq->issued_to);
 			   ),
 
-	    TP_printk("R=%08x[%x:] cto=%llx frn=%llx",
+	    TP_printk("R=%08x[%x:] cto=%llx ito=%llx",
 		      __entry->wreq, __entry->stream,
-		      __entry->collected_to, __entry->front)
+		      __entry->collected_to, __entry->issued_to)
 	    );
 
 TRACE_EVENT(netfs_folioq,
Signature · 1 line
2.53.0
author maintainer
#336 lore raw

PATCH 336/342 irqchip/renesas-rzv2h: Fix error path in rzv2h_icu_probe_common()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Biju Das <[email protected]>

[ Upstream commit 897cf98926429c8671a9009442883c2f62deae96 ]

Replace pm_runtime_put() with pm_runtime_put_sync() when irq_domain_create_hierarchy() fails to ensure the device suspends synchronously before devres cleanup disables runtime PM via pm_runtime_disable().

Fixes 5ec8cabc3b86 ("irqchip/renesas-rzv2h: Use devm_pm_runtime_enable()")
---
 drivers/irqchip/irq-renesas-rzv2h.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/irqchip/irq-renesas-rzv2h.c +1 -1
index 9b487120f0113..85eb194dfe3b2 100644
@@ -567,7 +567,7 @@ static int rzv2h_icu_probe_common(struct platform_device *pdev, struct device_no
 	return 0;
 
 pm_put:
-	pm_runtime_put(&pdev->dev);
+	pm_runtime_put_sync(&pdev->dev);
 
 	return ret;
 }
Signature · 1 line
2.53.0
author maintainer
#337 lore raw

PATCH 337/342 futex: Require sys_futex_requeue() to have identical flags

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Peter Zijlstra <[email protected]>

[ Upstream commit 19f94b39058681dec64a10ebeb6f23fe7fc3f77a ]

Nicholas reported that his LLM found it was possible to create a UaF when sys_futex_requeue() is used with different flags. The initial motivation for allowing different flags was the variable sized futex, but since that hasn't been merged (yet), simply mandate the flags are identical, as is the case for the old style sys_futex() requeue operations.

Fixes 0f4b5f972216 ("futex: Add sys_futex_requeue()")
---
 kernel/futex/syscalls.c | 8 ++++++++
 1 file changed, 8 insertions(+)
kernel/futex/syscalls.c +8 -0
index 880c9bf2f3150..99723189c8cf7 100644
@@ -459,6 +459,14 @@ SYSCALL_DEFINE4(futex_requeue,
 	if (ret)
 		return ret;
 
+	/*
+	 * For now mandate both flags are identical, like the sys_futex()
+	 * interface has. If/when we merge the variable sized futex support,
+	 * that patch can modify this test to allow a difference in size.
+	 */
+	if (futexes[0].w.flags != futexes[1].w.flags)
+		return -EINVAL;
+
 	cmpval = futexes[0].w.val;
 
 	return futex_requeue(u64_to_user_ptr(futexes[0].w.uaddr), futexes[0].w.flags,
Signature · 1 line
2.53.0
author maintainer
#338 lore raw

PATCH 338/342 futex: Fix UaF between futex_key_to_node_opt() and vma_replace_policy()

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Hao-Yu Yang <[email protected]>

[ Upstream commit 190a8c48ff623c3d67cb295b4536a660db2012aa ]

During futex_key_to_node_opt() execution, vma->vm_policy is read under speculative mmap lock and RCU. Concurrently, mbind() may call vma_replace_policy() which frees the old mempolicy immediately via kmem_cache_free().

This creates a race where __futex_key_to_node() dereferences a freed mempolicy pointer, causing a use-after-free read of mpol->mode.

[  151.412631] BUG: KASAN: slab-use-after-free in __futex_key_to_node (kernel/futex/core.c:349)
[  151.414046] Read of size 2 at addr ffff888001c49634 by task e/87
[  151.415969] Call Trace:
[  151.416732]  __asan_load2 (mm/kasan/generic.c:271)
[  151.416777]  __futex_key_to_node (kernel/futex/core.c:349)
[  151.416822]  get_futex_key (kernel/futex/core.c:374 kernel/futex/core.c:386 kernel/futex/core.c:593)

Fix by adding rcu to __mpol_put().

---
 include/linux/mempolicy.h |  1 +
 kernel/futex/core.c       |  2 +-
 mm/mempolicy.c            | 10 ++++++++--
 3 files changed, 10 insertions(+), 3 deletions(-)
include/linux/mempolicy.h +1 -0
index 0fe96f3ab3ef0..65c732d440d2f 100644
@@ -55,6 +55,7 @@ struct mempolicy {
 		nodemask_t cpuset_mems_allowed;	/* relative to these nodes */
 		nodemask_t user_nodemask;	/* nodemask passed by user */
 	} w;
+	struct rcu_head rcu;
 };
 
 /*
kernel/futex/core.c +1 -1
index cf7e610eac429..31e83a09789e0 100644
@@ -342,7 +342,7 @@ static int __futex_key_to_node(struct mm_struct *mm, unsigned long addr)
 	if (!vma)
 		return FUTEX_NO_NODE;
 
-	mpol = vma_policy(vma);
+	mpol = READ_ONCE(vma->vm_policy);
 	if (!mpol)
 		return FUTEX_NO_NODE;
 
mm/mempolicy.c +8 -2
index 68a98ba578821..74ebf38a7db1a 100644
@@ -488,7 +488,13 @@ void __mpol_put(struct mempolicy *pol)
 {
 	if (!atomic_dec_and_test(&pol->refcnt))
 		return;
-	kmem_cache_free(policy_cache, pol);
+	/*
+	 * Required to allow mmap_lock_speculative*() access, see for example
+	 * futex_key_to_node_opt(). All accesses are serialized by mmap_lock,
+	 * however the speculative lock section unbound by the normal lock
+	 * boundaries, requiring RCU freeing.
+	 */
+	kfree_rcu(pol, rcu);
 }
 EXPORT_SYMBOL_FOR_MODULES(__mpol_put, "kvm");
 
@@ -1021,7 +1027,7 @@ static int vma_replace_policy(struct vm_area_struct *vma,
 	}
 
 	old = vma->vm_policy;
-	vma->vm_policy = new; /* protected by mmap_lock */
+	WRITE_ONCE(vma->vm_policy, new); /* protected by mmap_lock */
 	mpol_put(old);
 
 	return 0;
Signature · 1 line
2.53.0
author maintainer
#339 lore raw

PATCH 339/342 ext4: introduce EXPORT_SYMBOL_FOR_EXT4_TEST() helper

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Ye Bin <[email protected]>

[ Upstream commit 49504a512587147dd6da3b4b08832ccc157b97dc ]

Introduce EXPORT_SYMBOL_FOR_EXT4_TEST() helper for kuint test.

Stable-dep-of: 519b76ac0b31 ("ext4: fix mballoc-test.c is not compiled when EXT4_KUNIT_TESTS=M")

---
 fs/ext4/ext4.h | 5 +++++
 1 file changed, 5 insertions(+)
fs/ext4/ext4.h +5 -0
index d4a98ff58076f..f1c476303f3a9 100644
@@ -3953,6 +3953,11 @@ static inline bool ext4_inode_can_atomic_write(struct inode *inode)
 extern int ext4_block_write_begin(handle_t *handle, struct folio *folio,
 				  loff_t pos, unsigned len,
 				  get_block_t *get_block);
+
+#if IS_ENABLED(CONFIG_EXT4_KUNIT_TESTS)
+#define EXPORT_SYMBOL_FOR_EXT4_TEST(sym) \
+	EXPORT_SYMBOL_FOR_MODULES(sym, "ext4-test")
+#endif
 #endif	/* __KERNEL__ */
 
 #define EFSBADCRC	EBADMSG		/* Bad CRC detected */
Signature · 1 line
2.53.0
author maintainer
#340 lore raw

PATCH 340/342 ext4: fix mballoc-test.c is not compiled when EXT4_KUNIT_TESTS=M

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Ye Bin <[email protected]>

[ Upstream commit 519b76ac0b31d86b45784735d4ef964e8efdc56b ]

Now, only EXT4_KUNIT_TESTS=Y testcase will be compiled in 'mballoc.c'. To solve this issue, the ext4 test code needs to be decoupled. The ext4 test module is compiled into a separate module.

---
 fs/ext4/Makefile       |   4 +-
 fs/ext4/mballoc-test.c |  81 ++++++++++++++++----------------
 fs/ext4/mballoc.c      | 102 +++++++++++++++++++++++++++++++++++++++--
 fs/ext4/mballoc.h      |  30 ++++++++++++
 4 files changed, 172 insertions(+), 45 deletions(-)
fs/ext4/Makefile +2 -2
index 72206a2926765..d836c3fe311b5 100644
@@ -14,7 +14,7 @@ ext4-y	:= balloc.o bitmap.o block_validity.o dir.o ext4_jbd2.o extents.o \
 
 ext4-$(CONFIG_EXT4_FS_POSIX_ACL)	+= acl.o
 ext4-$(CONFIG_EXT4_FS_SECURITY)		+= xattr_security.o
-ext4-inode-test-objs			+= inode-test.o
-obj-$(CONFIG_EXT4_KUNIT_TESTS)		+= ext4-inode-test.o
+ext4-test-objs				+= inode-test.o mballoc-test.o
+obj-$(CONFIG_EXT4_KUNIT_TESTS)		+= ext4-test.o
 ext4-$(CONFIG_FS_VERITY)		+= verity.o
 ext4-$(CONFIG_FS_ENCRYPTION)		+= crypto.o
fs/ext4/mballoc-test.c +41 -40

281 lines not on this page · raw message

fs/ext4/mballoc.c +99 -3

112 lines not on this page · raw message

fs/ext4/mballoc.h +30 -0
index 15a049f05d04a..39333ce72cbd5 100644
@@ -270,4 +270,34 @@ ext4_mballoc_query_range(
 	ext4_mballoc_query_range_fn	formatter,
 	void				*priv);
 
+extern int ext4_mb_mark_context(handle_t *handle,
+		struct super_block *sb, bool state,
+		ext4_group_t group, ext4_grpblk_t blkoff,
+		ext4_grpblk_t len, int flags,
+		ext4_grpblk_t *ret_changed);
+#if IS_ENABLED(CONFIG_EXT4_KUNIT_TESTS)
+extern void mb_clear_bits_test(void *bm, int cur, int len);
+extern ext4_fsblk_t
+ext4_mb_new_blocks_simple_test(struct ext4_allocation_request *ar,
+			       int *errp);
+extern int mb_find_next_zero_bit_test(void *addr, int max, int start);
+extern int mb_find_next_bit_test(void *addr, int max, int start);
+extern void mb_clear_bit_test(int bit, void *addr);
+extern int mb_test_bit_test(int bit, void *addr);
+extern int
+ext4_mb_mark_diskspace_used_test(struct ext4_allocation_context *ac,
+				 handle_t *handle);
+extern int mb_mark_used_test(struct ext4_buddy *e4b,
+			     struct ext4_free_extent *ex);
+extern void ext4_mb_generate_buddy_test(struct super_block *sb,
+		void *buddy, void *bitmap, ext4_group_t group,
+		struct ext4_group_info *grp);
+extern int ext4_mb_load_buddy_test(struct super_block *sb,
+		ext4_group_t group, struct ext4_buddy *e4b);
+extern void ext4_mb_unload_buddy_test(struct ext4_buddy *e4b);
+extern void mb_free_blocks_test(struct inode *inode,
+		struct ext4_buddy *e4b, int first, int count);
+extern void ext4_free_blocks_simple_test(struct inode *inode,
+		ext4_fsblk_t block, unsigned long count);
+#endif
 #endif
Signature · 1 line
2.53.0
author maintainer
#341 lore raw

PATCH 341/342 bug: avoid format attribute warning for clang as well

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <[email protected]>

[ Upstream commit 2598ab9d63f41160c7081998857fef409182933d ]

Like gcc, clang-22 now also warns about a function that it incorrectly identifies as a printf-style format:

lib/bug.c:190:22: error: diagnostic behavior may be improved by adding the 'format(printf, 1, 0)' attribute to the declaration of '__warn_printf' [-Werror,-Wmissing-format-attribute]

  179 | static void __warn_printf(const char *fmt, struct pt_regs *regs)
      | __attribute__((format(printf, 1, 0)))
  180 | {
  181 |         if (!fmt)
  182 |                 return;
  183 |
  184 | #ifdef HAVE_ARCH_BUG_FORMAT_ARGS
  185 |         if (regs) {
  186 |                 struct arch_va_list _args;
  187 |                 va_list *args = __warn_args(&_args, regs);
  188 |
  189 |                 if (args) {
  190 |                         vprintk(fmt, *args);
      |                                           ^

Revert the change that added a gcc-specific workaround, and instead add the generic annotation that avoid the warning.

---
 lib/bug.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)
lib/bug.c +2 -5
index 623c467a8b76c..aab9e6a40c5f9 100644
@@ -173,10 +173,8 @@ struct bug_entry *find_bug(unsigned long bugaddr)
 	return module_find_bug(bugaddr);
 }
 
-__diag_push();
-__diag_ignore(GCC, all, "-Wsuggest-attribute=format",
-	      "Not a valid __printf() conversion candidate.");
-static void __warn_printf(const char *fmt, struct pt_regs *regs)
+static __printf(1, 0)
+void __warn_printf(const char *fmt, struct pt_regs *regs)
 {
 	if (!fmt)
 		return;
@@ -195,7 +193,6 @@ static void __warn_printf(const char *fmt, struct pt_regs *regs)
 
 	printk("%s", fmt);
 }
-__diag_pop();
 
 static enum bug_trap_type __report_bug(struct bug_entry *bug, unsigned long bugaddr, struct pt_regs *regs)
 {
Signature · 1 line
2.53.0
author maintainer
#342 lore raw

PATCH 342/342 Bluetooth: L2CAP: Fix regressions caused by reusing ident

In reply to Greg Kroah-Hartman

6.19-stable review patch. If anyone has any objections, please let me know.

------------------

From: Luiz Augusto von Dentz <[email protected]>

commit 761fb8ec8778f0caf2bba5a41e3cff1ea86974f3 upstream.

This attempt to fix regressions caused by reusing ident which apparently is not handled well on certain stacks causing the stack to not respond to requests, so instead of simple returning the first unallocated id this stores the last used tx_ident and then attempt to use the next until all available ids are exausted and then cycle starting over to 1.

---
 include/net/bluetooth/l2cap.h |    1 +
 net/bluetooth/l2cap_core.c    |   29 ++++++++++++++++++++++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)
include/net/bluetooth/l2cap.h +1 -0
@@ -658,6 +658,7 @@ struct l2cap_conn {
 	struct sk_buff		*rx_skb;
 	__u32			rx_len;
 	struct ida		tx_ida;
+	__u8			tx_ident;
 
 	struct sk_buff_head	pending_rx;
 	struct work_struct	pending_rx_work;
net/bluetooth/l2cap_core.c +26 -3
@@ -926,16 +926,39 @@ int l2cap_chan_check_security(struct l2c
 
 static int l2cap_get_ident(struct l2cap_conn *conn)
 {
+	u8 max;
+	int ident;
+
 	/* LE link does not support tools like l2ping so use the full range */
 	if (conn->hcon->type == LE_LINK)
-		return ida_alloc_range(&conn->tx_ida, 1, 255, GFP_ATOMIC);
-
+		max = 255;
 	/* Get next available identificator.
 	 *    1 - 128 are used by kernel.
 	 *  129 - 199 are reserved.
 	 *  200 - 254 are used by utilities like l2ping, etc.
 	 */
-	return ida_alloc_range(&conn->tx_ida, 1, 128, GFP_ATOMIC);
+	else
+		max = 128;
+
+	/* Allocate ident using min as last used + 1 (cyclic) */
+	ident = ida_alloc_range(&conn->tx_ida, READ_ONCE(conn->tx_ident) + 1,
+				max, GFP_ATOMIC);
+	/* Force min 1 to start over */
+	if (ident <= 0) {
+		ident = ida_alloc_range(&conn->tx_ida, 1, max, GFP_ATOMIC);
+		if (ident <= 0) {
+			/* If all idents are in use, log an error, this is
+			 * extremely unlikely to happen and would indicate a bug
+			 * in the code that idents are not being freed properly.
+			 */
+			BT_ERR("Unable to allocate ident: %d", ident);
+			return 0;
+		}
+	}
+
+	WRITE_ONCE(conn->tx_ident, ident);
+
+	return ident;
 }
 
 static void l2cap_send_acl(struct l2cap_conn *conn, struct sk_buff *skb,
Tested-by on the v1 series
#344 lore raw
In reply to Greg Kroah-Hartman
Quoted 15 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

        https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

Quoted 5 lines

thanks,

greg k-h

-------------

Build and Boot Report for 6.19.11-rc1

Build and boot testing was performed on version 6.19.11-rc1 using the default configuration on both x86_64 and arm64 architectures in a virtual environment. The kernel built and booted successfully, and no dmesg regressions were observed.

kernel version: 6.19.11-rc1
Configurations: x86_64_defconfig, defconfig
Architectures: arm64, x86_64
Kernel Source: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Commit: 411f8a553ae8d2f6aa5462b6dd5f1d6e9103fbac

Best regards,
Dileep Malepu

#345 lore raw
In reply to Greg Kroah-Hartman

Le 31/03/26 à 18:17, Greg Kroah-Hartman a écrit :

Quoted 1,397 lines

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <[email protected]>

     Linux 6.19.11-rc1

Luiz Augusto von Dentz <[email protected]>
Bluetooth: L2CAP: Fix regressions caused by reusing ident

Arnd Bergmann <[email protected]>
bug: avoid format attribute warning for clang as well

Ye Bin <[email protected]>
ext4: fix mballoc-test.c is not compiled when EXT4_KUNIT_TESTS=M

Ye Bin <[email protected]>
ext4: introduce EXPORT_SYMBOL_FOR_EXT4_TEST() helper

Hao-Yu Yang <[email protected]>
futex: Fix UaF between futex_key_to_node_opt() and vma_replace_policy()

Peter Zijlstra <[email protected]>
futex: Require sys_futex_requeue() to have identical flags

Biju Das <[email protected]>
irqchip/renesas-rzv2h: Fix error path in rzv2h_icu_probe_common()

David Howells <[email protected]>

     netfs: Fix the handling of stream->front by removing it

GuoHan Zhao <[email protected]>
xen/privcmd: unregister xenstore notifier on module exit

Filipe Manana <[email protected]>
btrfs: fix lost error when running device stats on multiple devices fs

Shin'ichiro Kawasaki <[email protected]>
btrfs: fix leak of kobject name for sub-group space_info

Mark Harmstone <[email protected]>
btrfs: fix super block offset in error message in btrfs_validate_super()

David Howells <[email protected]>
netfs: Fix read abandonment during retry

Christian Brauner <[email protected]>
selftests/mount_setattr: increase tmpfs size for idmapped mount tests

Tomi Valkeinen <[email protected]>
dmaengine: xilinx_dma: Fix reset related timeout with two-channel AXIDMA

Marek Vasut <[email protected]>
dmaengine: xilinx: xilinx_dma: Fix unmasked residue subtraction

Marek Vasut <[email protected]>
dmaengine: xilinx: xilinx_dma: Fix residue calculation for cyclic DMA

Marek Vasut <[email protected]>
dmaengine: xilinx: xilinx_dma: Fix dma_device directions

Tuo Li <[email protected]>
dmaengine: idxd: fix possible wrong descriptor completion in llist_abort_desc()

Deepanshu Kartikey <[email protected]>
netfs: Fix NULL pointer dereference in netfs_unbuffered_write() on retry

Deepanshu Kartikey <[email protected]>
netfs: Fix kernel BUG in netfs_limit_iter() for ITER_KVEC iterators

Alexander Stein <[email protected]>
dmaengine: xilinx: xdma: Fix regmap init error handling

LUO Haowen <[email protected]>
dmaengine: dw-edma: Fix multiple times setting of the CYCLE_STATE and CYCLE_BIT bits for HDMA.

Felix Gu <[email protected]>
phy: ti: j721e-wiz: Fix device node reference leak in wiz_get_lane_phy_types()

Vinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix leaking event log memory

Vinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix freeing the allocated ida too late

Vinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix memory leak when a wq is reset

Vinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix not releasing workqueue on .release()

Vinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix possible invalid memory access after FLR

Vinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix crash when the event log is disabled

Werner Kasselman <[email protected]>
ksmbd: fix use-after-free and NULL deref in smb_grant_oplock()

Benno Lossin <[email protected]>
rust: pin-init: internal: init: document load-bearing fact of field accessors

SeongJae Park <[email protected]>
mm/damon/core: avoid use of half-online-committed context

Hari Bathini <[email protected]>
powerpc64/bpf: do not increment tailcall count when prog is NULL

Markus Niebel <[email protected]>
arm64: dts: imx8mn-tqma8mqnl: fix LDO5 power off

Theodore Ts'o <[email protected]>
ext4: always drain queued discard work in ext4_mb_release()

Baokun Li <[email protected]>
ext4: fix iloc.bh leak in ext4_fc_replay_inode() error paths

Theodore Ts'o <[email protected]>
ext4: handle wraparound when searching for blocks for indirect mapped blocks

Zqiang <[email protected]>
ext4: fix the might_sleep() warnings in kvfree()

Jiayuan Chen <[email protected]>
ext4: fix use-after-free in update_super_work when racing with umount

Helen Koike <[email protected]>

     ext4: reject mount if bigalloc with s_first_data_block != 0

Ye Bin <[email protected]>
ext4: avoid allocate block from corrupted group in ext4_mb_find_by_goal()

Edward Adam Davis <[email protected]>
ext4: avoid infinite loops caused by residual data

Tejas Bharambe <[email protected]>
ext4: validate p_idx bounds in ext4_ext_correct_indexes

Ye Bin <[email protected]>
ext4: test if inode's all dirty pages are submitted to disk

Li Chen <[email protected]>
ext4: publish jinode after initialization

Yuto Ohnuki <[email protected]>
ext4: replace BUG_ON with proper error handling in ext4_read_inline_folio

Jan Kara <[email protected]>
ext4: make recently_deleted() properly work with lazy itable initialization

Jan Kara <[email protected]>
ext4: fix fsync(2) for nojournal mode

Zhang Yi <[email protected]>
ext4: do not check fast symlink during orphan recovery

Jan Kara <[email protected]>
ext4: fix stale xarray tags after writeback

Deepanshu Kartikey <[email protected]>
ext4: convert inline data to extents when truncate exceeds inline size

Simon Weber <[email protected]>
ext4: fix journal credit check when setting fscrypt context

Darrick J. Wong <[email protected]>
xfs: remove file_path tracepoint data

Darrick J. Wong <[email protected]>
xfs: don't irele after failing to iget in xfs_attri_recover_work

Long Li <[email protected]>
xfs: fix ri_total validation in xlog_recover_attri_commit_pass2

hongao <[email protected]>
xfs: scrub: unlock dquot before early return in quota scrub

Yuto Ohnuki <[email protected]>
xfs: avoid dereferencing log items after push callbacks

Yuto Ohnuki <[email protected]>
xfs: save ailp before dropping the AIL lock in push callbacks

Yuto Ohnuki <[email protected]>
xfs: stop reclaim before pushing AIL during unmount

Max Boone <[email protected]>
mm/pagewalk: fix race between concurrent split and refault

Josh Law <[email protected]>

     mm/damon/sysfs: check contexts->nr in repeat_call_fn

Josh Law <[email protected]>

     mm/damon/sysfs: check contexts->nr before accessing contexts_arr[0]

Josh Law <[email protected]>
mm/damon/sysfs: fix param_ctx leak on damon_sysfs_new_test_ctx() failure

Lorenzo Stoakes (Oracle) <[email protected]>
mm/mseal: update VMA end correctly on merge

David Hildenbrand (Arm) <[email protected]>
mm/memory: fix PMD/PUD checks in follow_pfnmap_start()

Asad Kamal <[email protected]>
drm/amd/pm: Return -EOPNOTSUPP for unsupported OD_MCLK on smu_v13_0_6

Huacai Chen <[email protected]>
LoongArch: KVM: Handle the case that EIOINTC's coremap is empty

Bibo Mao <[email protected]>
LoongArch: KVM: Fix base address calculation in kvm_eiointc_regs_access()

Huacai Chen <[email protected]>
LoongArch: KVM: Make kvm_get_vcpu_by_cpuid() more robust

Huacai Chen <[email protected]>
LoongArch: Workaround LS2K/LS7A GPU DMA hang bug

Xi Ruoyao <[email protected]>
LoongArch: vDSO: Emit GNU_EH_FRAME correctly

Li Jun <[email protected]>
LoongArch: Fix missing NULL checks for kstrdup()

Ville Syrjälä <[email protected]>
drm/i915: Unlink NV12 planes earlier

Ville Syrjälä <[email protected]>
drm/i915: Order OP vs. timeout correctly in __wait_for()

Imre Deak <[email protected]>
drm/i915/dp_tunnel: Fix error handling when clearing stream BW in atomic state

Alex Deucher <[email protected]>
drm/amd/display: check if ext_caps is valid in BL setup

Alex Hung <[email protected]>
drm/amd/display: Fix drm_edid leak in amdgpu_dm

Alex Deucher <[email protected]>
drm/amd/display: Fix DCE LVDS handling

Ruijing Dong <[email protected]>
drm/amdgpu: fix strsep() corrupting lockup_timeout on multi-GPU (v3)

Eric Huang <[email protected]>
drm/amdgpu: prevent immediate PASID reuse case

Claudiu Beznea <[email protected]>
dmaengine: sh: rz-dmac: Move CHCTRL updates under spinlock

Claudiu Beznea <[email protected]>
dmaengine: sh: rz-dmac: Protect the driver specific lists

Joy Zou <[email protected]>
dmaengine: fsl-edma: fix channel parameter config for fixed channel requests

Stefan Eichenberger <[email protected]>
i2c: imx: ensure no clock is generated after last read

Stefan Eichenberger <[email protected]>
i2c: imx: fix i2c issue when reading multiple messages

Davidlohr Bueso <[email protected]>
futex: Clear stale exiting pointer in futex_lock_pi() retry path

Pratap Nirujogi <[email protected]>
i2c: designware: amdisp: Fix resume-probe race condition issue

Joanne Koong <[email protected]>
iomap: fix invalid folio access when i_blkbits differs from I/O granularity

Jassi Brar <[email protected]>
irqchip/qcom-mpm: Add missing mailbox TX done acknowledgment

Milos Nikic <[email protected]>
jbd2: gracefully abort on checkpointing state corruptions

Sean Christopherson <[email protected]>
KVM: x86/mmu: Only WARN in direct MMUs when overwriting shadow-present SPTE

Sean Christopherson <[email protected]>
KVM: x86/mmu: Drop/zap existing present SPTE even when creating an MMIO SPTE

Kevin Hao <[email protected]>
net: macb: Use dev_consume_skb_any() to free TX SKBs

Kevin Hao <[email protected]>
net: macb: Protect access to net_device::ip_ptr with RCU lock

Kevin Hao <[email protected]>
net: macb: Move devm_{free,request}_irq() out of spin lock area

Greg Kroah-Hartman <[email protected]>
scsi: ses: Handle positive SCSI error from ses_recv_diag()

Tyllis Xu <[email protected]>
scsi: ibmvfc: Fix OOB access in ibmvfc_discover_targets_done()

Amir Goldstein <[email protected]>
ovl: fix wrong detection of 32bit inode numbers

Fei Lv <[email protected]>
ovl: make fsync after metadata copy-up opt-in mount option

Abel Vesa <[email protected]>
phy: qcom: qmp-ufs: Fix SM8650 PCS table for Gear 4

Nikunj A Dadhania <[email protected]>
x86/fred: Fix early boot failures on SEV-ES/SNP guests

Borislav Petkov (AMD) <[email protected]>
x86/cpu: Remove X86_CR4_FRED from the CR4 pinned bits mask

Nikunj A Dadhania <[email protected]>
x86/cpu: Enable FSGSBASE early in cpu_init_exception_handling()

Joanne Koong <[email protected]>
writeback: don't block sync for filesystems with no data integrity guarantees

Jinjiang Tu <[email protected]>
mm/huge_memory: fix folio isn't locked in softleaf_to_folio()

Zhan Xusheng <[email protected]>
alarmtimer: Fix argument order in alarm_timer_forward()

Jiucheng Xu <[email protected]>
erofs: add GFP_NOIO in the bio completion if needed

Alex Williamson <[email protected]>
vfio/pci: Fix double free in dma-buf feature

xietangxin <[email protected]>
virtio_net: Fix UAF on dst_ops when IFF_XMIT_DST_RELEASE is cleared and napi_tx is false

Zubin Mithra <[email protected]>
virt: tdx-guest: Fix handling of host controlled 'quote' buffer length

Paul Moses <[email protected]>
xfrm: iptfs: only publish mode_data after clone setup

Roshan Kumar <[email protected]>
xfrm: iptfs: validate inner IPv4 header length in IPTFS payload

Ming Qian <[email protected]>
media: verisilicon: Fix kernel panic due to __initconst misuse

Yuchan Nam <[email protected]>
media: mc, v4l2: serialize REINIT and REQBUFS with req_queue_mutex

Sanman Pradhan <[email protected]>
hwmon: (peci/cputemp) Fix off-by-one in cputemp_is_visible()

Sanman Pradhan <[email protected]>
hwmon: (peci/cputemp) Fix crit_hyst returning delta instead of absolute temperature

Sanman Pradhan <[email protected]>
hwmon: (pmbus/isl68137) Add mutex protection for AVS enable sysfs attributes

Sanman Pradhan <[email protected]>
hwmon: (pmbus/ina233) Fix error handling and sign extension in shunt voltage read

Zenghui Yu (Huawei) <[email protected]>
KVM: arm64: Fix the descriptor address in __kvm_at_swap_desc()

Marc Zyngier <[email protected]>
KVM: arm64: Discard PC update state on vcpu reset

Srinivas Pandruvada <[email protected]>
platform/x86: ISST: Correct locked bit width

Abhijit Gangurde <[email protected]>
RDMA/ionic: Preserve and set Ethernet source MAC after ib_ud_header_init()

Srinivas Pandruvada <[email protected]>

     thermal: intel: int340x: soc_slider: Set offset only for balanced mode

SeongJae Park <[email protected]>
mm/damon/stat: monitor all System RAM resources

Charles Mirabile <[email protected]>
kbuild: Delete .builtin-dtbs.S when running make clean

Viresh Kumar <[email protected]>
cpufreq: conservative: Reset requested_freq on limits change

Viresh Kumar <[email protected]>
cpufreq: Don't skip cpufreq_frequency_table_cpuinfo()

Marc Kleine-Budde <[email protected]>
can: netlink: can_changelink(): add missing error handling to call can_ctrlmode_changelink()

Oliver Hartkopp <[email protected]>
can: isotp: fix tx.buf use-after-free in isotp_sendmsg()

Ali Norouzi <[email protected]>
can: gw: fix OOB heap access in cgw_csum_crc8_rel()

Peter Ujfalusi <[email protected]>
ASoC: SOF: ipc4-topology: Allow bytes controls without initial payload

Guangshuo Li <[email protected]>
ASoC: sma1307: fix double free of devm_kzalloc() memory

Srinivas Kandagatla <[email protected]>
ASoC: codecs: wcd934x: fix typo in dt parsing

Karol Wachowski <[email protected]>
accel/ivpu: Add disable clock relinquish workaround for NVL-A0

Alexey Nepomnyashih <[email protected]>
ALSA: firewire-lib: fix uninitialized local variable

Zhang Heng <[email protected]>
ALSA: hda/realtek: add quirk for ASUS Strix G16 G615JMR

Mario Limonciello <[email protected]>
Revert "ALSA: hda/intel: Add MSI X870E Tomahawk to denylist"

Hyunwoo Kim <[email protected]>
ksmbd: do not expire session on binding failure

Werner Kasselman <[email protected]>
ksmbd: fix memory leaks and NULL deref in smb2_lock()

Namjae Jeon <[email protected]>
ksmbd: fix potencial OOB in get_file_all_info() for compound requests

Namjae Jeon <[email protected]>
ksmbd: replace hardcoded hdr2_len with offsetof() in smb2_calc_max_out_buf_len()

Matthew Auld <[email protected]>
drm/xe: always keep track of remap prev/next

Luo Haiyang <[email protected]>
tracing: Fix potential deadlock in cpu hotplug with osnoise

Wesley Atwell <[email protected]>
tracing: Drain deferred trigger frees if kthread creation fails

Vasily Gorbik <[email protected]>
s390/entry: Scrub r12 register on kernel entry

Vasily Gorbik <[email protected]>
s390/barrier: Make array_index_mask_nospec() __always_inline

Greg Kroah-Hartman <[email protected]>
s390/syscalls: Add spectre boundary for syscall dispatch table

Geoffrey D. Bennett <[email protected]>
ALSA: usb-audio: Exclude Scarlett 2i4 1st Gen from SKIP_IFACE_SETUP

Nicholas Carlini <[email protected]>
io_uring/fdinfo: fix OOB read in SQE_MIXED wrap check

Jens Axboe <[email protected]>
io_uring/fdinfo: fix SQE_MIXED SQE displaying

Marc Kleine-Budde <[email protected]>
spi: spi-fsl-lpspi: fix teardown order issue (UAF)

Jihed Chaibi <[email protected]>
ASoC: adau1372: Fix clock leak on PLL lock failure

Jihed Chaibi <[email protected]>
ASoC: adau1372: Fix unchecked clk_prepare_enable() return value

Marc Buerg <[email protected]>
sysctl: fix uninitialized variable in proc_do_large_bitmap

Guenter Roeck <[email protected]>
hwmon: (pmbus/core) Protect regulator operations with mutex

Guenter Roeck <[email protected]>
hwmon: (pmbus) Introduce the concept of "write-only" attributes

Guenter Roeck <[email protected]>
hwmon: (pmbus) Mark lowest/average/highest/rated attributes as read-only

Shuming Fan <[email protected]>
ASoC: SDCA: fix finding wrong entity

Sanman Pradhan <[email protected]>
hwmon: (adm1177) fix sysfs ABI violation and current unit conversion

Srinivasan Shanmugam <[email protected]>
drm/amdgpu: Fix fence put before wait in amdgpu_amdkfd_submit_ib

Weiming Shi <[email protected]>
ACPI: EC: clean up handlers on probe failure in acpi_ec_setup()

Danilo Krummrich <[email protected]>
spi: use generic driver_override infrastructure

Matt Roper <[email protected]>

     drm/xe: Implement recent spec updates to Wa_16025250150

Alice Ryhl <[email protected]>
rust: regulator: do not assume that regulator_get() returns non-null

Jihed Chaibi <[email protected]>
ASoC: dt-bindings: stm32: Fix incorrect compatible string in stm32h7-sai match

Yussuf Khalil <[email protected]>
drm/amd/display: Do not skip unrelated mode changes in DSC validation

Felix Gu <[email protected]>
spi: meson-spicc: Fix double-put in remove path

Cezary Rojewski <[email protected]>
ASoC: Intel: catpt: Fix the device initialization

Felix Gu <[email protected]>
spi: sn-f-ospi: Fix resource leak in f_ospi_probe()

Michał Winiarski <[email protected]>
drm/xe/pf: Fix use-after-free in migration restore

Youngjun Park <[email protected]>
PM: sleep: Drop spurious WARN_ON() from pm_restore_gfp_mask()

Alberto Garcia <[email protected]>
PM: hibernate: Drain trailing zero pages on userspace restore

Samasth Norway Ananda <[email protected]>
drm/i915/gmbus: fix spurious timeout on 512-byte burst reads

Luca Leonardo Scorcia <[email protected]>
drm/mediatek: dsi: Store driver data before invoking mipi_dsi_host_register

Mike Rapoport (Microsoft) <[email protected]>
x86/efi: efi_unmap_boot_services: fix calculation of ranges_to_free size

Yihang Li <[email protected]>
scsi: scsi_transport_sas: Fix the maximum channel scanning issue

Shengjiu Wang <[email protected]>
ASoC: fsl: imx-card: initialize playback_only and capture_only

Shengjiu Wang <[email protected]>
ASoC: simple-card-utils: Check value of is_playback_only and is_capture_only

Shiraz Saleem <[email protected]>
RDMA/irdma: Harden depth calculation functions

Tatyana Nikolova <[email protected]>
RDMA/irdma: Return EINVAL for invalid arp index error

Anil Samal <[email protected]>
RDMA/irdma: Fix deadlock during netdev reset with active connections

Tatyana Nikolova <[email protected]>
RDMA/irdma: Remove reset check from irdma_modify_qp_to_err()

Ivan Barrera <[email protected]>

     RDMA/irdma: Clean up unnecessary dereference of event->cm_node

Tatyana Nikolova <[email protected]>
RDMA/irdma: Remove a NOP wait_event() in irdma_modify_qp_roce()

Tatyana Nikolova <[email protected]>
RDMA/irdma: Update ibqp state to error if QP is already in error state

Jacob Moroni <[email protected]>
RDMA/irdma: Initialize free_qp completion before using it

Geoffrey D. Bennett <[email protected]>
ALSA: usb-audio: Exclude Scarlett 2i2 1st Gen from SKIP_IFACE_SETUP

Ethan Tidmore <[email protected]>
RDMA/efa: Fix possible deadlock

Chuck Lever <[email protected]>
RDMA/rw: Fall back to direct SGE on MR pool exhaustion

Sean Rhodes <[email protected]>
ALSA: hda/realtek: Sequence GPIO2 on Star Labs StarFighter

Andy Shevchenko <[email protected]>
regmap: Synchronize cache for the page selector

Yonatan Nachum <[email protected]>
RDMA/efa: Fix use of completion ctx after free

Yonatan Nachum <[email protected]>
RDMA/efa: Improve admin completion context state machine

Yonatan Nachum <[email protected]>
RDMA/efa: Check stored completion CTX command ID with received one

Kamal Heib <[email protected]>
RDMA/bng_re: Fix silent failure in HWRM version query

Paolo Valerio <[email protected]>
net: macb: use the current queue number for stats

David Carlier <[email protected]>
netfilter: ctnetlink: use netlink policy range checks

Weiming Shi <[email protected]>
netfilter: nf_conntrack_sip: fix use of uninitialized rtp_addr in process_sdp

Pablo Neira Ayuso <[email protected]>
netfilter: nf_conntrack_expect: skip expectations in other netns via proc

Pablo Neira Ayuso <[email protected]>
netfilter: nft_set_rbtree: revisit array resize logic

Ren Wei <[email protected]>
netfilter: ip6t_rt: reject oversized addrnr in rt_mt6_check()

Weiming Shi <[email protected]>
netfilter: nfnetlink_log: fix uninitialized padding leak in NFULA_PAYLOAD

Chuck Lever <[email protected]>
tls: Purge async_hold in tls_decrypt_async_wait()

Pengpeng Hou <[email protected]>
Bluetooth: btusb: clamp SCO altsetting table indices

Hyunwoo Kim <[email protected]>
Bluetooth: L2CAP: Fix ERTM re-init and zero pdu_len infinite loop

Hyunwoo Kim <[email protected]>
Bluetooth: L2CAP: Fix deadlock in l2cap_conn_del()

Luiz Augusto von Dentz <[email protected]>
Bluetooth: L2CAP: Fix not tracking outstanding TX ident

Cen Zhang <[email protected]>
Bluetooth: btintel: serialize btintel_hw_error() with hci_req_sync_lock

Zhang Chen <[email protected]>
Bluetooth: L2CAP: Fix send LE flow credits in ACL link

Miguel Ojeda <[email protected]>
dma-mapping: add missing inline for dma_free_attrs

Jonas Köppeler <[email protected]>
net_sched: codel: fix stale state for empty flows in fq_codel

Sabrina Dubroca <[email protected]>
rtnetlink: fix leak of SRCU struct in rtnl_link_register

Thangaraj Samynathan <[email protected]>
net: lan743x: fix duplex configuration in mac_link_up

David Carlier <[email protected]>
net: ti: icssg-prueth: fix use-after-free of CPPI descriptor in RX path

Jiayuan Chen <[email protected]>
team: fix header_ops type confusion with non-Ethernet ports

Xuan Zhuo <[email protected]>
virtio-net: correct hdr_len handling for tunnel gso

Xuan Zhuo <[email protected]>
virtio-net: correct hdr_len handling for VIRTIO_NET_F_GUEST_HDRLEN

Wei Fang <[email protected]>
net: enetc: fix the output issue of 'ethtool --show-ring'

Martin KaFai Lau <[email protected]>
udp: Fix wildcard bind conflict check when using hash2

Arnd Bergmann <[email protected]>
net: b44: always select CONFIG_FIXED_PHY

Qingfang Deng <[email protected]>
net: airoha: add RCU lock around dev_fill_forward_path

Yochai Eisenrich <[email protected]>
net: fix fanout UAF in packet_release() via NETDEV_UP race

Kuniyuki Iwashima <[email protected]>
ipv6: Don't remove permanent routes with exceptions from tb6_gc_hlist.

Kuniyuki Iwashima <[email protected]>
ipv6: Remove permanent routes from tb6_gc_hlist when all exceptions expire.

Kohei Enju <[email protected]>
iavf: fix out-of-bounds writes in iavf_get_ethtool_stats()

Petr Oros <[email protected]>
ice: use ice_update_eth_stats() for representor stats

Petr Oros <[email protected]>
ice: fix inverted ready check for VF representors

David McFarland <[email protected]>
platform/x86: intel-hid: disable wakeup_mode during hibernation

Alok Tiwari <[email protected]>
platform/olpc: olpc-xo175-ec: Fix overflow error message to print inlen

Nathan Chancellor <[email protected]>
platform/x86: lenovo: wmi-gamezone: Drop gz_chain_head

Li RongQing <[email protected]>
platform/x86: ISST: Check HWP support before MSR access

Justin Chen <[email protected]>
net: bcmasp: fix double disable of clk

Justin Chen <[email protected]>
net: bcmasp: fix double free of WoL irq

Justin Chen <[email protected]>
net: bcmasp: streamline early exit in probe

Sabrina Dubroca <[email protected]>
rtnetlink: count IFLA_INFO_SLAVE_KIND in if_nlmsg_size

Sabrina Dubroca <[email protected]>
rtnetlink: count IFLA_PARENT_DEV_{NAME,BUS_NAME} in if_nlmsg_size

Qi Tang <[email protected]>
net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer

Yang Yang <[email protected]>
openvswitch: validate MPLS set/set_masked payload length

Yang Yang <[email protected]>
openvswitch: defer tunnel netdev_put to RCU release

Toke Høiland-Jørgensen <[email protected]>
net: openvswitch: Avoid releasing netdev before teardown completes

Jakub Kicinski <[email protected]>
nfc: nci: fix circular locking dependency in nci_close_device

Mohammad Heib <[email protected]>
ionic: fix persistent MAC address override on PF

Luca Leonardo Scorcia <[email protected]>
pinctrl: mediatek: common: Fix probe failure for devices without EINT

Helen Koike <[email protected]>
Bluetooth: L2CAP: Fix null-ptr-deref on l2cap_sock_ready_cb

Anas Iqbal <[email protected]>
Bluetooth: hci_ll: Fix firmware leak on error path

Luiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix dangling pointer on mgmt_add_adv_patterns_monitor_complete

Hyunwoo Kim <[email protected]>
Bluetooth: SCO: Fix use-after-free in sco_recv_frame() due to missing sock_hold

Hyunwoo Kim <[email protected]>
Bluetooth: L2CAP: Validate PDU length before reading SDU length in l2cap_ecred_data_rcv()

Minseo Park <[email protected]>
Bluetooth: L2CAP: Fix stack-out-of-bounds read in l2cap_ecred_conn_req

Amelie Delaunay <[email protected]>
pinctrl: stm32: fix HDP driver dependency on GPIO_GENERIC

Oliver Hartkopp <[email protected]>
can: statistics: add missing atomic access in hot path

Sheng Yong <[email protected]>
erofs: set fileio bio failed in short read case

Shigeru Yoshida <[email protected]>
dma: swiotlb: add KMSAN annotations to swiotlb_bounce()

Eric Dumazet <[email protected]>
af_key: validate families in pfkey_send_migrate()

Minwoo Ra <[email protected]>
xfrm: prevent policy_hthresh.work from racing with netns teardown

Hyunwoo Kim <[email protected]>
xfrm: Fix work re-schedule after cancel in xfrm_nat_keepalive_net_fini()

Dmitry Torokhov <[email protected]>
pinctrl: renesas: rza1: Normalize return value of gpio_get()

Neil Armstrong <[email protected]>
pinctrl: qcom: spmi-gpio: implement .get_direction()

Fernando Fernandez Mancera <[email protected]>
xfrm: iptfs: fix skb_put() panic on non-linear skb during reassembly

Felix Gu <[email protected]>
pinctrl: renesas: rzt2h: Fix device node leak in rzt2h_gpio_register()

Sabrina Dubroca <[email protected]>
esp: fix skb leak with espintcp and async crypto

Sabrina Dubroca <[email protected]>
xfrm: call xdo_dev_state_delete during state update

Sabrina Dubroca <[email protected]>

     xfrm: fix the condition on x->pcpu_num in xfrm_sa_len

Sabrina Dubroca <[email protected]>
xfrm: add missing extack for XFRMA_SA_PCPU in add_acquire and allocspi

Peter Yin <[email protected]>
i3c: master: dw-i3c: Fix missing of_node for virtual I2C adapter

Zhang Heng <[email protected]>
ALSA: hda/realtek: add quirk for ASUS UM6702RC

Lianqin Hu <[email protected]>
ALSA: usb-audio: Add iface reset and delay quirk for SPACETOUCH USB Audio

Alan Borzeszkowski <[email protected]>
spi: intel-pci: Add support for Nova Lake mobile SPI flash

Jie Deng <[email protected]>
usb: core: new quirk to handle devices with zero configurations

Yang Wang <[email protected]>
drm/amdgpu: fix gpu idle power consumption issue for gfx v12

Chaitanya Kulkarni <[email protected]>
nvmet: move async event work off nvmet-wq

Josh Poimboeuf <[email protected]>
objtool: Handle Clang RSP musical chairs

Uzair Mughal <[email protected]>
ALSA: hda/realtek: Add headset jack quirk for Thinkpad X390

Zhang Heng <[email protected]>
ALSA: hda/realtek: Add quirk for Gigabyte Technology to fix headphone

Josh Poimboeuf <[email protected]>
objtool/klp: Disable unsupported pr_debug() usage

Liucheng Lu <[email protected]>
ALSA: hda/realtek: add HP Laptop 14s-dr5xxx mute LED quirk

Hari Bathini <[email protected]>
powerpc64/ftrace: fix OOL stub count with clang

HONG Yifan <[email protected]>
objtool: Use HOSTCFLAGS for HAVE_XXHASH test

Boris Burkov <[email protected]>
btrfs: set BTRFS_ROOT_ORPHAN_CLEANUP during subvol create

zhidao su <[email protected]>

     sched_ext: Use WRITE_ONCE() for the write side of dsq->seq update

Günther Noack <[email protected]>
HID: apple: avoid memory leak in apple_report_fixup()

Eduard Zingerman <[email protected]>
bpf: Fix u32/s32 bounds when ranges cross min/max boundary

Simon Trimmer <[email protected]>
ASoC: amd: acp: Add ACP6.3 match entries for Cirrus Logic parts

Maarten Lankhorst <[email protected]>
drm/ttm/tests: Fix build failure on PREEMPT_RT

wangdicheng <[email protected]>
ALSA: hda/senary: Ensure EAPD is enabled during init

Nilay Shroff <[email protected]>
block: break pcpu_alloc_mutex dependency on freeze_lock

Isaac J. Manjarres <[email protected]>
dma-buf: Include ioctl.h in UAPI header

Vladimir Yakovlev <[email protected]>
spi: spi-dw-dma: fix print error log when wait finish transaction

Richard Fitzgerald <[email protected]>
ASoC: cs35l56: Only patch ASP registers if the DAI is part of a DAIlink

Mark Brown <[email protected]>
ASoC: fsl_easrc: Fix event generation in fsl_easrc_iec958_put_bits()

Sheetal <[email protected]>
ALSA: hda/hdmi: Add Tegra238 HDA codec device ID

Oliver Freyermuth <[email protected]>
ASoC: Intel: sof_sdw: Add quirk for Alienware Area 51 (2025) 0CCD SKU

Florian Fuchs <[email protected]>
scsi: devinfo: Add BLIST_SKIP_IO_HINTS for Iomega ZIP

Shuming Fan <[email protected]>
ASoC: rt1321: fix DMIC ch2/3 mask issue

Ranjan Kumar <[email protected]>
scsi: mpi3mr: Clear reset history on ready and recheck state after timeout

Mark Brown <[email protected]>
ASoC: fsl_easrc: Fix event generation in fsl_easrc_iec958_set_reg()

Ihor Solodrai <[email protected]>
module: Fix kernel panic when a symbol st_shndx is out of bounds

Denis Benato <[email protected]>
HID: asus: add xg mobile 2023 external hardware support

Romain Sioen <[email protected]>
HID: mcp2221: cancel last I2C command on read error

Antheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for OneXPlayer X1 Air

Antheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for Aokzoe A2 Pro

Thomas Weißschuh <[email protected]>
kbuild: install-extmod-build: Package resolve_btfids if necessary

Valentin Spreckels <[email protected]>
net: usb: r8152: add TRENDnet TUC-ET2G

Antheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for OneXPlayer X1z

Takashi Iwai <[email protected]>
HID: apple: Add EPOMAKER TH87 to the non-apple keyboards list

Antheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for OneXPlayer APEX

Zhang Lixu <[email protected]>
HID: intel-ish-hid: ipc: Add Nova Lake-H/S PCI device IDs

Victor Lattaro Volpini <[email protected]>

     platform/x86: hp-wmi: Add Victus 16-d0xxx support

Günther Noack <[email protected]>
HID: magicmouse: avoid memory leak in magicmouse_report_fixup()

Julius Lehmann <[email protected]>
HID: magicmouse: fix battery reporting for Apple Magic Trackpad 2

Keith Busch <[email protected]>
nvme-pci: ensure we're polling a polled queue

Anton Plotnikov <[email protected]>
platform/x86: hp-wmi: add Omen 14-fb1xxx (board 8E41) support

Hans de Goede <[email protected]>
platform/x86: touchscreen_dmi: Add quirk for y-inverted Goodix touchscreen on SUPI S10

Leif Skunberg <[email protected]>
platform/x86: intel-hid: Enable 5-button array on ThinkPad X1 Fold 16 Gen 1

Krishna Chomal <[email protected]>

     platform/x86: hp-wmi: Add Omen 16-xd0xxx fan and thermal support

Daniel Hodges <[email protected]>
nvme-fabrics: use kfree_sensitive() for DHCHAP secrets

Keith Busch <[email protected]>
nvme-pci: cap queue creation to used queues

Peter Metz <[email protected]>
platform/x86: intel-hid: Add Dell 14 Plus 2-in-1 to dmi_vgbs_allow_list

Günther Noack <[email protected]>
HID: asus: avoid memory leak in asus_report_fixup()

Krishna Chomal <[email protected]>

     platform/x86: hp-wmi: Add Omen 16-wf0xxx fan and thermal support

Xuewen Yan <[email protected]>
tracing: Revert "tracing: Remove pid in task_rename tracing output"

Daniel Wade <[email protected]>
bpf: Fix unsound scalar forking in maybe_fork_scalars() for BPF_OR

Jenny Guanni Qu <[email protected]>
bpf: Fix undefined behavior in interpreter sdiv/smod for INT_MIN

Ihor Solodrai <[email protected]>
bpf: Fix exception exit lock checking for subprogs

Cui Chao <[email protected]>
cxl: Adjust the startup priority of cxl_pmem to be higher than that of cxl_acpi

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Release module BTF IDR before module unload

Ian Rogers <[email protected]>
perf metricgroup: Fix metricgroup__has_metric_or_groups()

Danilo Krummrich <[email protected]>
driver core: platform: use generic driver_override infrastructure

Danilo Krummrich <[email protected]>
driver core: generalize driver_override in struct device

Danilo Krummrich <[email protected]>

     sh: platform_early: remove pdev->driver_override check

Danilo Krummrich <[email protected]>
hwmon: axi-fan: don't use driver_override as IRQ name

Smita Koralahalli <[email protected]>
cxl/hdm: Avoid incorrect DVSEC fallback when HDM decoders are enabled

Josh Poimboeuf <[email protected]>
livepatch/klp-build: Fix inconsistent kernel version

Joe Lawrence <[email protected]>
objtool/klp: fix data alignment in __clone_symbol()

Janosch Frank <[email protected]>
s390/mm: Add missing secure storage access fixups for donated memory

Peter Zijlstra <[email protected]>

     perf: Make sure to use pmu_ctx->pmu for groups

Peter Zijlstra <[email protected]>
x86/perf: Make sure to program the counter value for stopped events on migration

Sachin Kumar <[email protected]>
bpf: Fix constant blinding for PROBE_MEM32 stores

Yazhou Tang <[email protected]>
bpf: Reset register ID for BPF_END value tracking

Davidlohr Bueso <[email protected]>
cxl/region: Fix leakage in __construct_region()

Alison Schofield <[email protected]>
cxl/port: Fix use after free of parent_port in cxl_detach_ep()

-------------

Diffstat:

  Documentation/admin-guide/kernel-parameters.txt    |   3 +
  .../devicetree/bindings/sound/st,stm32-sai.yaml    |   2 +-
  Documentation/filesystems/overlayfs.rst            |  50 +++
  Documentation/hwmon/adm1177.rst                    |   8 +-
  Documentation/hwmon/peci-cputemp.rst               |  10 +-
  Makefile                                           |   6 +-
  .../boot/dts/freescale/imx8mn-tqma8mqnl-mba8mx.dts |  13 +-
  .../arm64/boot/dts/freescale/imx8mn-tqma8mqnl.dtsi |  22 ++
  arch/arm64/kvm/at.c                                |   2 +-
  arch/arm64/kvm/reset.c                             |  14 +
  arch/loongarch/include/asm/linkage.h               |  36 ++
  arch/loongarch/include/asm/sigframe.h              |   9 +
  arch/loongarch/kernel/asm-offsets.c                |   2 +
  arch/loongarch/kernel/env.c                        |   7 +-
  arch/loongarch/kernel/signal.c                     |   6 +-
  arch/loongarch/kvm/intc/eiointc.c                  |  16 +-
  arch/loongarch/kvm/vcpu.c                          |   3 +
  arch/loongarch/pci/pci.c                           |  80 ++++
  arch/loongarch/vdso/Makefile                       |   4 +-
  arch/loongarch/vdso/sigreturn.S                    |   6 +-
  arch/powerpc/net/bpf_jit_comp64.c                  |  23 +-
  arch/powerpc/tools/ftrace-gen-ool-stubs.sh         |   4 +-
  arch/s390/include/asm/barrier.h                    |   4 +-
  arch/s390/kernel/entry.S                           |   3 +
  arch/s390/kernel/syscall.c                         |   5 +-
  arch/s390/mm/fault.c                               |  11 +-
  arch/sh/drivers/platform_early.c                   |   4 -
  arch/x86/coco/sev/noinstr.c                        |   6 +
  arch/x86/entry/entry_fred.c                        |  14 +
  arch/x86/events/core.c                             |   4 +-
  arch/x86/kernel/cpu/common.c                       |  20 +-
  arch/x86/kvm/mmu/mmu.c                             |  17 +-
  arch/x86/platform/efi/quirks.c                     |   2 +-
  block/blk-mq.c                                     |  45 ++-
  drivers/accel/ivpu/ivpu_drv.h                      |   1 +
  drivers/accel/ivpu/ivpu_hw.c                       |   6 +-
  drivers/acpi/ec.c                                  |   2 +
  drivers/base/bus.c                                 |  43 ++-
  drivers/base/core.c                                |   2 +
  drivers/base/dd.c                                  |  60 +++
  drivers/base/platform.c                            |  37 +-
  drivers/base/regmap/regmap.c                       |  30 +-
  drivers/bluetooth/btintel.c                        |  11 +-
  drivers/bluetooth/btusb.c                          |   5 +-
  drivers/bluetooth/hci_ll.c                         |   2 +
  drivers/bus/simple-pm-bus.c                        |   4 +-
  drivers/clk/imx/clk-scu.c                          |   3 +-
  drivers/cpufreq/cpufreq.c                          |   9 +-
  drivers/cpufreq/cpufreq_conservative.c             |  12 +
  drivers/cpufreq/cpufreq_governor.c                 |   3 +
  drivers/cpufreq/cpufreq_governor.h                 |   1 +
  drivers/cpufreq/freq_table.c                       |   4 +
  drivers/cxl/core/hdm.c                             |  25 +-
  drivers/cxl/core/port.c                            |   8 +-
  drivers/cxl/core/region.c                          |   4 +-
  drivers/cxl/pmem.c                                 |   2 +-
  drivers/dma/dw-edma/dw-hdma-v0-core.c              |   6 +-
  drivers/dma/fsl-edma-main.c                        |  26 +-
  drivers/dma/idxd/cdev.c                            |   8 +-
  drivers/dma/idxd/device.c                          |   6 +-
  drivers/dma/idxd/init.c                            |   4 +-
  drivers/dma/idxd/submit.c                          |   2 +-
  drivers/dma/idxd/sysfs.c                           |   1 +
  drivers/dma/sh/rz-dmac.c                           |  68 ++--
  drivers/dma/xilinx/xdma.c                          |   4 +-
  drivers/dma/xilinx/xilinx_dma.c                    |  46 ++-
  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c         |   4 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c         |  13 +-
  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c            |  45 ++-
  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h            |   1 +
  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c             |   1 +
  drivers/gpu/drm/amd/amdgpu/mes_v12_0.c             |   5 +-
  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  |  10 +-
  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h  |   1 +
  .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c    |   4 +-
  .../display/dc/resource/dce100/dce100_resource.c   |   6 +-
  .../display/dc/resource/dce110/dce110_resource.c   |   5 +-
  .../display/dc/resource/dce112/dce112_resource.c   |   5 +-
  .../display/dc/resource/dce120/dce120_resource.c   |   5 +-
  .../amd/display/dc/resource/dce60/dce60_resource.c |  14 +-
  .../amd/display/dc/resource/dce80/dce80_resource.c |   6 +-
  .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c   |   2 +-
  drivers/gpu/drm/i915/display/intel_display.c       |   8 +-
  drivers/gpu/drm/i915/display/intel_dp_tunnel.c     |  20 +-
  drivers/gpu/drm/i915/display/intel_dp_tunnel.h     |  11 +-
  drivers/gpu/drm/i915/display/intel_gmbus.c         |   4 +-
  drivers/gpu/drm/i915/display/intel_plane.c         |  11 +-
  drivers/gpu/drm/i915/i915_wait_util.h              |   2 +-
  drivers/gpu/drm/mediatek/mtk_dsi.c                 |   9 +-
  drivers/gpu/drm/ttm/tests/ttm_bo_test.c            |   4 +-
  drivers/gpu/drm/xe/regs/xe_gt_regs.h               |   1 +
  drivers/gpu/drm/xe/xe_pt.c                         |  12 +-
  drivers/gpu/drm/xe/xe_sriov_packet.c               |   2 +
  drivers/gpu/drm/xe/xe_vm.c                         |  22 +-
  drivers/gpu/drm/xe/xe_vm_types.h                   |   4 +
  drivers/gpu/drm/xe/xe_wa.c                         |   3 +-
  drivers/hid/hid-apple.c                            |   7 +-
  drivers/hid/hid-asus.c                             |  18 +-
  drivers/hid/hid-ids.h                              |   1 +
  drivers/hid/hid-magicmouse.c                       |   6 +-
  drivers/hid/hid-mcp2221.c                          |   2 +
  drivers/hid/intel-ish-hid/ipc/hw-ish.h             |   2 +
  drivers/hid/intel-ish-hid/ipc/pci-ish.c            |  12 +
  drivers/hwmon/adm1177.c                            |  54 +--
  drivers/hwmon/axi-fan-control.c                    |   2 +-
  drivers/hwmon/peci/cputemp.c                       |   4 +-
  drivers/hwmon/pmbus/ina233.c                       |   3 +-
  drivers/hwmon/pmbus/isl68137.c                     |  21 +-
  drivers/hwmon/pmbus/pmbus_core.c                   | 192 ++++++++--
  drivers/i2c/busses/i2c-designware-amdisp.c         |  11 +-
  drivers/i2c/busses/i2c-imx.c                       |  51 ++-
  drivers/i3c/master/dw-i3c-master.c                 |   2 +
  drivers/infiniband/core/rw.c                       |  27 +-
  drivers/infiniband/hw/bng_re/bng_dev.c             |  14 +-
  drivers/infiniband/hw/efa/efa_com.c                | 175 ++++-----
  drivers/infiniband/hw/ionic/ionic_controlpath.c    |   4 +-
  drivers/infiniband/hw/irdma/cm.c                   |  29 +-
  drivers/infiniband/hw/irdma/uk.c                   |  39 +-
  drivers/infiniband/hw/irdma/utils.c                |   2 -
  drivers/infiniband/hw/irdma/verbs.c                |   9 +-
  drivers/irqchip/irq-qcom-mpm.c                     |   3 +
  drivers/irqchip/irq-renesas-rzv2h.c                |   2 +-
  drivers/media/mc/mc-request.c                      |   5 +
  drivers/media/platform/verisilicon/imx8m_vpu_hw.c  |   2 +-
  drivers/media/v4l2-core/v4l2-ioctl.c               |   5 +-
  drivers/net/can/dev/netlink.c                      |   4 +-
  drivers/net/ethernet/airoha/airoha_ppe.c           |   2 +
  drivers/net/ethernet/broadcom/Kconfig              |   2 +-
  drivers/net/ethernet/broadcom/asp2/bcmasp.c        |  66 ++--
  drivers/net/ethernet/cadence/macb_main.c           |  41 +-
  .../net/ethernet/freescale/enetc/enetc_ethtool.c   |   2 +
  drivers/net/ethernet/intel/iavf/iavf_ethtool.c     |  31 +-
  drivers/net/ethernet/intel/ice/ice_ethtool.c       |  14 +-
  drivers/net/ethernet/intel/ice/ice_repr.c          |   5 +-
  drivers/net/ethernet/microchip/lan743x_main.c      |   5 +
  drivers/net/ethernet/pensando/ionic/ionic_lif.c    |  17 +-
  drivers/net/ethernet/ti/icssg/icssg_common.c       |   4 +-
  drivers/net/team/team_core.c                       |  65 +++-
  drivers/net/tun_vnet.h                             |   2 +-
  drivers/net/usb/r8152.c                            |   1 +
  drivers/net/virtio_net.c                           |   7 +-
  drivers/nvme/host/fabrics.c                        |   4 +-
  drivers/nvme/host/pci.c                            |  11 +-
  drivers/nvme/target/admin-cmd.c                    |   2 +-
  drivers/nvme/target/core.c                         |  14 +-
  drivers/nvme/target/nvmet.h                        |   1 +
  drivers/nvme/target/rdma.c                         |   1 +
  drivers/phy/qualcomm/phy-qcom-qmp-ufs.c            |   3 +-
  drivers/phy/ti/phy-j721e-wiz.c                     |   2 +
  drivers/pinctrl/mediatek/pinctrl-mtk-common.c      |   9 +-
  drivers/pinctrl/qcom/pinctrl-spmi-gpio.c           |  16 +
  drivers/pinctrl/renesas/pinctrl-rza1.c             |   2 +-
  drivers/pinctrl/renesas/pinctrl-rzt2h.c            |   1 +
  drivers/pinctrl/stm32/Kconfig                      |   1 +
  drivers/platform/olpc/olpc-xo175-ec.c              |   2 +-
  drivers/platform/x86/hp/hp-wmi.c                   |  12 +-
  drivers/platform/x86/intel/hid.c                   |  23 +-
  .../x86/intel/speed_select_if/isst_tpmi_core.c     |   5 +-
  drivers/platform/x86/lenovo/wmi-gamezone.c         |   2 -
  drivers/platform/x86/oxpec.c                       |  30 +-
  drivers/platform/x86/touchscreen_dmi.c             |  18 +
  drivers/scsi/ibmvscsi/ibmvfc.c                     |   3 +-
  drivers/scsi/mpi3mr/mpi3mr_fw.c                    |  10 +
  drivers/scsi/scsi_devinfo.c                        |   2 +-
  drivers/scsi/scsi_transport_sas.c                  |   2 +-
  drivers/scsi/ses.c                                 |   2 +-
  drivers/slimbus/qcom-ngd-ctrl.c                    |   6 +-
  drivers/spi/spi-dw-dma.c                           |   2 +-
  drivers/spi/spi-fsl-lpspi.c                        |   3 +-
  drivers/spi/spi-intel-pci.c                        |   1 +
  drivers/spi/spi-meson-spicc.c                      |   2 -
  drivers/spi/spi-sn-f-ospi.c                        |  17 +-
  drivers/spi/spi.c                                  |  19 +-
  .../int340x_thermal/processor_thermal_soc_slider.c |   8 +-
  drivers/usb/core/config.c                          |   6 +-
  drivers/usb/core/quirks.c                          |   5 +
  drivers/vfio/pci/vfio_pci_dmabuf.c                 |   5 +-
  drivers/virt/coco/tdx-guest/tdx-guest.c            |  12 +-
  drivers/xen/privcmd.c                              |   3 +
  fs/btrfs/block-group.c                             |   2 +-
  fs/btrfs/disk-io.c                                 |   4 +-
  fs/btrfs/ioctl.c                                   |   7 +
  fs/btrfs/volumes.c                                 |   5 +-
  fs/erofs/fileio.c                                  |   6 +-
  fs/erofs/zdata.c                                   |   3 +
  fs/ext4/Makefile                                   |   4 +-
  fs/ext4/crypto.c                                   |   9 +-
  fs/ext4/ext4.h                                     |   6 +
  fs/ext4/extents.c                                  |  23 +-
  fs/ext4/fast_commit.c                              |  17 +-
  fs/ext4/fsync.c                                    |  16 +-
  fs/ext4/ialloc.c                                   |   6 +
  fs/ext4/inline.c                                   |  10 +-
  fs/ext4/inode.c                                    |  75 +++-
  fs/ext4/mballoc-test.c                             |  81 ++--
  fs/ext4/mballoc.c                                  | 132 ++++++-
  fs/ext4/mballoc.h                                  |  30 ++
  fs/ext4/page-io.c                                  |  10 +-
  fs/ext4/super.c                                    |  16 +-
  fs/ext4/sysfs.c                                    |  10 +-
  fs/fs-writeback.c                                  |  18 +-
  fs/fuse/file.c                                     |   4 +-
  fs/fuse/inode.c                                    |   1 +
  fs/iomap/buffered-io.c                             |  15 +-
  fs/jbd2/checkpoint.c                               |  15 +-
  fs/netfs/buffered_read.c                           |   3 +-
  fs/netfs/direct_read.c                             |   3 +-
  fs/netfs/direct_write.c                            |  15 +-
  fs/netfs/iterator.c                                |  43 +++
  fs/netfs/read_collect.c                            |   4 +-
  fs/netfs/read_retry.c                              |   5 +-
  fs/netfs/read_single.c                             |   1 -
  fs/netfs/write_collect.c                           |   4 +-
  fs/netfs/write_issue.c                             |   3 +-
  fs/overlayfs/copy_up.c                             |   6 +-
  fs/overlayfs/overlayfs.h                           |  21 ++
  fs/overlayfs/ovl_entry.h                           |   7 +-
  fs/overlayfs/params.c                              |  33 +-
  fs/overlayfs/super.c                               |   2 +-
  fs/overlayfs/util.c                                |   5 +-
  fs/smb/server/oplock.c                             |  72 ++--
  fs/smb/server/smb2pdu.c                            |  73 ++--
  fs/xfs/scrub/quota.c                               |   4 +-
  fs/xfs/scrub/trace.h                               |  12 +-
  fs/xfs/xfs_attr_item.c                             |   5 +-
  fs/xfs/xfs_dquot_item.c                            |   9 +-
  fs/xfs/xfs_inode_item.c                            |   9 +-
  fs/xfs/xfs_mount.c                                 |   7 +-
  fs/xfs/xfs_trace.h                                 |  47 ++-
  fs/xfs/xfs_trans_ail.c                             |  26 +-
  include/linux/damon.h                              |   7 +
  include/linux/device.h                             |  54 +++
  include/linux/device/bus.h                         |   4 +
  include/linux/dma-mapping.h                        |   4 +-
  include/linux/fs/super_types.h                     |   1 +
  include/linux/leafops.h                            |  32 +-
  include/linux/mempolicy.h                          |   1 +
  include/linux/netfs.h                              |   1 -
  include/linux/pagemap.h                            |  11 -
  include/linux/platform_device.h                    |   5 -
  include/linux/spi/spi.h                            |   5 -
  include/linux/usb/quirks.h                         |   3 +
  include/linux/usb/r8152.h                          |   1 +
  include/linux/virtio_net.h                         |  53 ++-
  include/net/bluetooth/l2cap.h                      |   2 +-
  include/net/codel_impl.h                           |   1 +
  include/net/inet_hashtables.h                      |  14 +
  include/net/ip6_fib.h                              |  21 +-
  include/sound/cs35l56.h                            |   1 +
  include/trace/events/netfs.h                       |   8 +-
  include/trace/events/task.h                        |   7 +-
  include/uapi/linux/dma-buf.h                       |   1 +
  include/uapi/linux/netfilter/nf_conntrack_common.h |   4 +
  io_uring/fdinfo.c                                  |   4 +-
  kernel/bpf/btf.c                                   |  24 +-
  kernel/bpf/core.c                                  |  43 ++-
  kernel/bpf/verifier.c                              |  36 +-
  kernel/dma/swiotlb.c                               |  21 +-
  kernel/events/core.c                               |  19 +-
  kernel/futex/core.c                                |   2 +-
  kernel/futex/pi.c                                  |   3 +-
  kernel/futex/syscalls.c                            |   8 +
  kernel/module/main.c                               |   7 +
  kernel/power/main.c                                |   2 +-
  kernel/power/snapshot.c                            |  11 +
  kernel/sched/ext.c                                 |   2 +-
  kernel/sysctl.c                                    |   2 +-
  kernel/time/alarmtimer.c                           |   2 +-
  kernel/trace/trace_events_trigger.c                |  85 ++++-
  kernel/trace/trace_osnoise.c                       |  10 +-
  lib/bug.c                                          |   7 +-
  mm/damon/core.c                                    |   9 +-
  mm/damon/stat.c                                    |  53 ++-
  mm/damon/sysfs.c                                   |  10 +-
  mm/memory.c                                        |  18 +-
  mm/mempolicy.c                                     |  10 +-
  mm/mseal.c                                         |   3 +-
  mm/pagewalk.c                                      |  25 +-
  net/bluetooth/l2cap_core.c                         | 103 +++--
  net/bluetooth/l2cap_sock.c                         |   3 +
  net/bluetooth/mgmt.c                               |   2 +-
  net/bluetooth/sco.c                                |  10 +-
  net/can/af_can.c                                   |   4 +-
  net/can/af_can.h                                   |   2 +-
  net/can/gw.c                                       |   6 +-
  net/can/isotp.c                                    |  24 +-
  net/can/proc.c                                     |   3 +-
  net/core/rtnetlink.c                               |  28 +-
  net/ipv4/esp4.c                                    |   9 +-
  net/ipv4/inet_connection_sock.c                    |  20 +-
  net/ipv4/udp.c                                     |   2 +-
  net/ipv6/addrconf.c                                |   4 +-
  net/ipv6/esp6.c                                    |   9 +-
  net/ipv6/ip6_fib.c                                 |  15 +-
  net/ipv6/netfilter/ip6t_rt.c                       |   4 +
  net/ipv6/route.c                                   |   2 +-
  net/key/af_key.c                                   |  19 +-
  net/netfilter/nf_conntrack_expect.c                |   4 +
  net/netfilter/nf_conntrack_netlink.c               |  16 +-
  net/netfilter/nf_conntrack_proto_tcp.c             |  10 +-
  net/netfilter/nf_conntrack_sip.c                   |  14 +-
  net/netfilter/nfnetlink_log.c                      |   8 +-
  net/netfilter/nft_set_rbtree.c                     |  92 ++++-
  net/nfc/nci/core.c                                 |  10 +-
  net/openvswitch/flow_netlink.c                     |   2 +
  net/openvswitch/vport-netdev.c                     |  11 +-
  net/packet/af_packet.c                             |   1 +
  net/smc/smc_rx.c                                   |   9 +-
  net/tls/tls_sw.c                                   |   2 +-
  net/xfrm/xfrm_iptfs.c                              |  17 +-
  net/xfrm/xfrm_nat_keepalive.c                      |   2 +-
  net/xfrm/xfrm_policy.c                             |   2 +
  net/xfrm/xfrm_state.c                              |   1 +
  net/xfrm/xfrm_user.c                               |   7 +-
  rust/kernel/regulator.rs                           |  33 +-
  rust/pin-init/src/macros.rs                        |  16 +
  scripts/livepatch/klp-build                        |   9 +-
  scripts/package/install-extmod-build               |   4 +
  sound/firewire/amdtp-stream.c                      |   2 +-
  sound/hda/codecs/hdmi/tegrahdmi.c                  |   1 +
  sound/hda/codecs/realtek/alc269.c                  |  42 ++-
  sound/hda/codecs/realtek/alc662.c                  |   9 +
  sound/hda/codecs/senarytech.c                      |   5 +
  sound/hda/controllers/intel.c                      |   1 -
  sound/soc/amd/acp/amd-acp63-acpi-match.c           | 413 +++++++++++++++++++++
  sound/soc/codecs/adau1372.c                        |  34 +-
  sound/soc/codecs/cs35l56-shared.c                  |  16 +-
  sound/soc/codecs/cs35l56.c                         |   8 +
  sound/soc/codecs/rt1320-sdw.c                      |   5 +-
  sound/soc/codecs/sma1307.c                         |   6 +-
  sound/soc/codecs/wcd934x.c                         |   2 +-
  sound/soc/fsl/fsl_easrc.c                          |  14 +-
  sound/soc/fsl/imx-card.c                           |   2 +
  sound/soc/generic/simple-card-utils.c              |   4 +-
  sound/soc/intel/boards/sof_sdw.c                   |   8 +
  sound/soc/intel/catpt/device.c                     |  10 +-
  sound/soc/intel/catpt/dsp.c                        |   3 -
  sound/soc/samsung/i2s.c                            |   6 +-
  sound/soc/sdca/sdca_functions.c                    |  11 +-
  sound/soc/sof/ipc4-topology.c                      |   2 +-
  sound/usb/quirks.c                                 |   4 +
  tools/objtool/Makefile                             |   2 +-
Quoted 10 lines
  tools/objtool/arch/x86/decode.c                    |  68 ++--
  tools/objtool/check.c                              |  14 +
  tools/objtool/klp-diff.c                           |  26 +-
  tools/perf/util/metricgroup.c                      |   6 +-
  .../testing/selftests/bpf/prog_tests/reg_bounds.c  |  62 +++-
  .../testing/selftests/bpf/progs/exceptions_fail.c  |   9 +-
  .../selftests/mount_setattr/mount_setattr_test.c   |   2 +-
  349 files changed, 3991 insertions(+), 1331 deletions(-)

For me it does not work. systemd fail to start the virtual console setup. I am using luks to encrypt the root partition. When I type the password, it is always rejected almost I am 99,9% I type the correct password. I will try to bisect it tomorrow.

Best regards,

François Valenduc

#346 lore raw
Quoted 7 lines
Quoted 2 lines

For me it does not work. systemd fail to start the virtual console setup. I am using luks to encrypt the root partition. When I type the password, it is always rejected almost I am 99,9% I type the correct password. I will try to bisect it tomorrow.

Best regards,

François Valenduc

I tried git bisect, but it is quite inconclusive. All commits where bad until the end. So the first bad commit is this one:

commit 43ee946d8339fb35944b67f598f940814ec139d3 (HEAD)

Author: Alison Schofield <[email protected]>
Date:   Thu Feb 26 10:44:36 2026 -0800

cxl/port: Fix use after free of parent_port in cxl_detach_ep()

However, reverting it does not solve the problem. 6.18.21-rc1 fails in the same way.

Any ideas on this ?

Thanks in advance,
Best regards.

François Valenduc

A message that is not in the archive (sent off-list or not yet received): 2026040220-sincere-undaunted-65b5@gregkh

A message that is not in the archive (sent off-list or not yet received): CACU-xRtcWU=RKOfhL+8B2YmYnPN-fxc+TYc4rjaQEFc5qAk1+g@mail.gmail.com

A message that is not in the archive (sent off-list or not yet received): 2026040243-dwelled-overdrive-51b3@gregkh

#350 lore raw

Le 2/04/26 à 15:38, Greg Kroah-Hartman a écrit :

Quoted 11 lines · François Valenduc
Quoted 5 lines

It seems there is no difference between the final stable versions and what was posted for review.
So I guess I will have the problem in 6.18.21 and 6.19.11. I will try later today.
6.19.10 and 6.18.20 worked just fine.

If you can track it down to a specific commit, please let us know.

thanks,

greg k-h

In fact this has nothing to do with a kernel problem. This was caused by a strange change in dracut which happened at the same time and some keyboard layout files were not included anymore. I would never have noticed if I didn't need an azerty keyboard 🙂 No wonder that git bisect was inconclusive.

Sorry for the noise.

François Valenduc

author maintainer
#351 lore raw
Quoted 14 lines · François Valenduc

Le 2/04/26 à 15:38, Greg Kroah-Hartman a écrit :

Quoted 11 lines · François Valenduc
Quoted 5 lines

It seems there is no difference between the final stable versions and what was posted for review.
So I guess I will have the problem in 6.18.21 and 6.19.11. I will try later today.
6.19.10 and 6.18.20 worked just fine.

If you can track it down to a specific commit, please let us know.

thanks,

greg k-h

Quoted 7 lines

In fact this has nothing to do with a kernel problem. This was caused by a strange change in dracut which happened at the same time and some keyboard layout files were not included anymore.
I would never have noticed if I didn't need an azerty keyboard 🙂 No wonder that git bisect was inconclusive.

Sorry for the noise.

Hey, the number of times I've been "bitten" by the French keyboard layout is way too many :)

Thanks for letting us know, glad it's not a kernel issue.

greg k-h

#352 lore raw
In reply to François Valenduc
Quoted 7 lines · François Valenduc

Le 31/03/26 à 18:17, Greg Kroah-Hartman a écrit :

Quoted 4 lines

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one.  If anyone has any issues with these being applied, please let me know.

[...]

Quoted 1 line
  349 files changed, 3991 insertions(+), 1331 deletions(-)

Side note: please trim replies.

Quoted 4 lines

For me it does not work. systemd fail to start the virtual console setup. I am using luks to encrypt the root partition. When I type the password, it is always rejected almost I am 99,9% I type the correct password. I will try to bisect it tomorrow.

Shot in the dark: Does it work with 6.19.10? If not, I wonder if it might be this issue:

https://lore.kernel.org/lkml/[email protected]/

Ciao, Thorsten

Tested-by on the v1 series
#353 lore raw
In reply to Greg Kroah-Hartman
Quoted 9 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 8 lines
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

Tested rc1 against the Fedora build system (aarch64, ppc64le, s390x, x86_64), and boot tested x86_64. No regressions noted.

#354 lore raw
In reply to Greg Kroah-Hartman
Quoted 9 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 8 lines
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

perf still fails to build for arm64 this was reported bck in 6.19.7. Can you revert b56111d7a4642ea7ef776ae97ecb1dd2724a1503 ("perf jevents: Handle deleted JSONS in out of source builds")?

Thanks!

Signature · 1 line
Florian
author maintainer
#355 lore raw
Quoted 15 lines · Florian Fainelli
Quoted 14 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

Quoted 7 lines
Quoted 3 lines

thanks,

greg k-h

perf still fails to build for arm64 this was reported bck in 6.19.7. Can you revert b56111d7a4642ea7ef776ae97ecb1dd2724a1503 ("perf jevents: Handle deleted JSONS in out of source builds")?

Now reverted, sorry for missing that before.

greg k-h

Tested-by on the v1 series
#356 lore raw
In reply to Greg Kroah-Hartman

Am 31.03.2026 um 18:17 schrieb Greg Kroah-Hartman:

Quoted 4 lines

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Builds, boots and works on my 2-socket Ivy Bridge Xeon E5-2697 v2 server. No dmesg oddities or regressions found.

Beste Grüße,
Peter Schneider

Signature · 8 lines
Climb the mountain not to plant your flag, but to embrace the challenge,
enjoy the air and behold the view. Climb it so you can see the world,
not so the world can see you.                    -- David McCullough Jr.

OpenPGP:  0xA3828BD796CCE11A8CADE8866E3A92C92C3FF244
Download: https://www.peters-netzplatz.de/download/pschneider1968_pub.asc
https://keys.mailvelope.com/pks/lookup?op=get&[email protected]
https://keys.mailvelope.com/pks/lookup?op=get&[email protected]
Tested-by on the v1 series
#357 lore raw
In reply to Greg Kroah-Hartman
Quoted 4 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

test_progs, test_progs-no_alu32, test_progs-cpuv4, test_maps, test_verifier in BPF selftests all passes[1] on x86_64.

1: https://github.com/shunghsiyu/libbpf/actions/runs/23814574909/job/69410511598

[...]

Tested-by on the v1 series
#359 lore raw
In reply to Greg Kroah-Hartman
Quoted 9 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 8 lines
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

Built and booted successfully on RISC-V RV64 (HiFive Unmatched).

maintainer Tested-by on the v1 series
#360 lore raw
In reply to Greg Kroah-Hartman
Quoted 9 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 8 lines
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

All tests passing for Tegra ...

Test results for stable-v6.19:

    11 builds:	11 pass, 0 fail
    28 boots:	28 pass, 0 fail
    133 tests:	133 pass, 0 fail

Linux version: 6.19.11-rc1-g411f8a553ae8
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,

                tegra186-p3509-0000+p3636-0001, tegra194-p2972-0000,
                tegra194-p3509-0000+p3668-0000, tegra20-ventana,
                tegra210-p2371-2180, tegra210-p3450-0000,
                tegra234-p3737-0000+p3701-0000,
                tegra234-p3768-0000+p3767-0005, tegra30-cardhu-a04

Jon

Tested-by
#361 lore raw

AMD Ryzen 5 5600 6-Core Processor:
https://www.inet.se/produkt/5304697/amd-ryzen-5-5600-3-5-ghz-35mb on a
https://www.gigabyte.com/Motherboard/B550-AORUS-ELITE-V2-rev-12
https://www.inet.se/produkt/1903406/gigabyte-b550-aorus-elite-v2
motherboard :)

running Arch Linux with the testing repos enabled:
https://archlinux.org/ https://archboot.com/
https://wiki.archlinux.org/title/Arch_Testing_Team

Den ons 1 apr. 2026 kl 11:25 skrev Jon Hunter <[email protected]>:

Quoted 39 lines · Greg Kroah-Hartman
Quoted 9 lines

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 8 lines
      https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

All tests passing for Tegra ...

Test results for stable-v6.19:

    11 builds:  11 pass, 0 fail
    28 boots:   28 pass, 0 fail
    133 tests:  133 pass, 0 fail
Linux version:  6.19.11-rc1-g411f8a553ae8
Boards tested:  tegra124-jetson-tk1, tegra186-p2771-0000,
                tegra186-p3509-0000+p3636-0001, tegra194-p2972-0000,
                tegra194-p3509-0000+p3668-0000, tegra20-ventana,
                tegra210-p2371-2180, tegra210-p3450-0000,
                tegra234-p3737-0000+p3701-0000,
                tegra234-p3768-0000+p3767-0005, tegra30-cardhu-a04

Jon

Tested-by on the v1 series
#362 lore raw
In reply to Greg Kroah-Hartman

Hi Greg

Quoted 10 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 8 lines
        https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

6.19.11-rc1 tested.

Build successfully completed.
Boot successfully completed.
No dmesg regressions.
Video output normal.
Sound output normal.

Lenovo ThinkPad X1 Carbon Gen10(Intel i7-1260P(x86_64) arch linux)

[    0.000000] Linux version 6.19.11-rc1rv-g411f8a553ae8

(takeshi@ThinkPadX1Gen10J0764) (gcc (GCC) 15.2.1 20260209, GNU ld (GNU Binutils) 2.46) #1 SMP PREEMPT_DYNAMIC Wed Apr 1 19:21:05 JST 2026

Thanks

Tested-by on the v1 series
#363 lore raw
In reply to Greg Kroah-Hartman

hello,

$sudo dmesg -l err
[sudo] password for jeffrin:

[   11.985734] nouveau 0000:01:00.0: drm: failed to create ce channel, -22
[   33.336996] nouveau 0000:01:00.0: msvld: unable to load firmware data
[   33.337001] nouveau 0000:01:00.0: msvld: init failed, -19
[   33.366460] nouveau 0000:01:00.0: gr: TRAP ch 3 [007fb90000
gst-plugin-scan[1242]]
[   33.366485] nouveau 0000:01:00.0: gr: GPC0/PROP trap: 00000020
[RT_HEIGHT_OVERRUN] x = 48, y = 16, format = 37, storage type = 0
[   43.524931] nouveau 0000:01:00.0: msvld: unable to load firmware data
[   43.524937] nouveau 0000:01:00.0: msvld: init failed, -19

$

--
software engineer
rajagiri school of engineering and technology

Tested-by on the v1 series
#364 lore raw
In reply to Greg Kroah-Hartman
Quoted 9 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 9 lines
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

Compiled and booted on my test system. No dmesg regressions.

thanks,
-- Shuah

Tested-by on the v1 series
#366 lore raw
In reply to Greg Kroah-Hartman
Quoted 9 lines · Greg Kroah-Hartman

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

The whole patch series can be found in one patch at:

Quoted 8 lines
	https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.19.11-rc1.gz

or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-6.19.y
and the diffstat can be found below.

thanks,

greg k-h

Tested on 4 systems (3 amd64, 1 arm64). Working well, no regressions observed.

Signature · 1 line
-Barry K. Nathan  <[email protected]>
Tested-by on the v1 series
#367 lore raw
In reply to Greg Kroah-Hartman
Quoted 8 lines · On Tue, 31 Mar 2026 18:17:13 +0200 Greg Kroah-Hartman…

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

Responses should be made by Thu, 02 Apr 2026 16:16:56 +0000. Anything received after that time might be too late.

Boot-tested under QEMU for Rust x86_64, arm64 and riscv64; built-tested for loongarch64 and arm32:

Thanks!

Cheers,
Miguel

Tested-by on the v1 series
#368 lore raw
In reply to Greg Kroah-Hartman

Hi!

Quoted 4 lines

This is the start of the stable review cycle for the 6.19.11 release. There are 342 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.

CIP testing did not find any problems here:

https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-6.19.y

Best regards,
Pavel