6.19.11-rc1 review
Subsystems (4)
Greg Kroah-Hartman
maintainerPATCH 291/342 ext4: convert inline data to extents when truncate exceeds inline size
In reply to Greg Kroah-Hartman6.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 *idmapif (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,
Greg Kroah-Hartman
maintainerPATCH 292/342 ext4: fix stale xarray tags after writeback
In reply to Greg Kroah-Hartman6.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);
Greg Kroah-Hartman
maintainerPATCH 293/342 ext4: do not check fast symlink during orphan recovery
In reply to Greg Kroah-Hartman6.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; }
Greg Kroah-Hartman
maintainerPATCH 294/342 ext4: fix fsync(2) for nojournal mode
In reply to Greg Kroah-Hartman6.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;
Greg Kroah-Hartman
maintainerPATCH 295/342 ext4: make recently_deleted() properly work with lazy itable initialization
In reply to Greg Kroah-Hartman6.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 superif (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))
Greg Kroah-Hartman
maintainerPATCH 296/342 ext4: replace BUG_ON with proper error handling in ext4_read_inline_folio
In reply to Greg Kroah-Hartman6.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);
Greg Kroah-Hartman
maintainerPATCH 297/342 ext4: publish jinode after initialization
In reply to Greg Kroah-Hartman6.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_tint 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 *istatic 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 inodspin_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);
Greg Kroah-Hartman
maintainerPATCH 298/342 ext4: test if inodes all dirty pages are submitted to disk
In reply to Greg Kroah-Hartman6.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 *inodif (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;
Greg Kroah-Hartman
maintainerPATCH 299/342 ext4: validate p_idx bounds in ext4_ext_correct_indexes
In reply to Greg Kroah-Hartman6.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)
Greg Kroah-Hartman
maintainerPATCH 300/342 ext4: avoid infinite loops caused by residual data
In reply to Greg Kroah-Hartman6.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,
Greg Kroah-Hartman
maintainerPATCH 301/342 ext4: avoid allocate block from corrupted group in ext4_mb_find_by_goal()
In reply to Greg Kroah-Hartman6.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 errorext4_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.
--- 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_allreturn 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)))
Greg Kroah-Hartman
maintainerPATCH 302/342 ext4: reject mount if bigalloc with s_first_data_block != 0
In reply to Greg Kroah-Hartman6.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) ||
Greg Kroah-Hartman
maintainerPATCH 303/342 ext4: fix use-after-free in update_super_work when racing with umount
In reply to Greg Kroah-Hartman6.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_ctimer_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_bloint 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 )
Greg Kroah-Hartman
maintainerPATCH 304/342 ext4: fix the might_sleep() warnings in kvfree()
In reply to Greg Kroah-Hartman6.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.
--- 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_blockWARN_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(structstruct 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(structstruct 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)
Greg Kroah-Hartman
maintainerPATCH 305/342 ext4: handle wraparound when searching for blocks for indirect mapped blocks
In reply to Greg Kroah-Hartman6.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().
--- 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 ;
Greg Kroah-Hartman
maintainerPATCH 306/342 ext4: fix iloc.bh leak in ext4_fc_replay_inode() error paths
In reply to Greg Kroah-Hartman6.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 sext4_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; }/*
Greg Kroah-Hartman
maintainerPATCH 307/342 ext4: always drain queued discard work in ext4_mb_release()
In reply to Greg Kroah-Hartman6.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_listand queues_discard_work. If it is then remounted with nodiscard, theEXT4_MOUNT_DISCARDflag is cleared, but the pendings_discard_workis 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.
--- 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_blockstruct 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) {
Greg Kroah-Hartman
maintainerPATCH 308/342 arm64: dts: imx8mn-tqma8mqnl: fix LDO5 power off
In reply to Greg Kroah-Hartman6.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>; }; +®_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 = <®_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>,
Greg Kroah-Hartman
maintainerPATCH 309/342 powerpc64/bpf: do not increment tailcall count when prog is NULL
In reply to Greg Kroah-Hartman6.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);
Greg Kroah-Hartman
maintainerPATCH 310/342 mm/damon/core: avoid use of half-online-committed context
In reply to Greg Kroah-Hartman6.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_ctcomplete (&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(struckdamond_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
Greg Kroah-Hartman
maintainerPATCH 311/342 rust: pin-init: internal: init: document load-bearing fact of field accessors
In reply to Greg Kroah-Hartman6.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.
[ 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,
Greg Kroah-Hartman
maintainerPATCH 312/342 ksmbd: fix use-after-free and NULL deref in smb_grant_oplock()
In reply to Greg Kroah-Hartman6.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.
--- 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 oplockspin_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; }
Greg Kroah-Hartman
maintainerPATCH 313/342 dmaengine: idxd: Fix crash when the event log is disabled
In reply to Greg Kroah-Hartman6.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.
--- 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
@@ -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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 314/342 dmaengine: idxd: Fix possible invalid memory access after FLR
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 315/342 dmaengine: idxd: Fix not releasing workqueue on .release()
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 316/342 dmaengine: idxd: Fix memory leak when a wq is reset
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 317/342 dmaengine: idxd: Fix freeing the allocated ida too late
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 318/342 dmaengine: idxd: Fix leaking event log memory
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 319/342 phy: ti: j721e-wiz: Fix device node reference leak in wiz_get_lane_phy_types()
In reply to Greg Kroah-Hartman6.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.
--- drivers/phy/ti/phy-j721e-wiz.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/phy/ti/phy-j721e-wiz.c +2 -0
@@ -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
Greg Kroah-Hartman
maintainerPATCH 320/342 dmaengine: dw-edma: Fix multiple times setting of the CYCLE_STATE and CYCLE_BIT bits for HDMA.
In reply to Greg Kroah-Hartman6.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.
--- 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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 321/342 dmaengine: xilinx: xdma: Fix regmap init error handling
In reply to Greg Kroah-Hartman6.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.
--- drivers/dma/xilinx/xdma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/dma/xilinx/xdma.c +2 -2
@@ -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
Greg Kroah-Hartman
maintainerPATCH 322/342 netfs: Fix kernel BUG in netfs_limit_iter() for ITER_KVEC iterators
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 323/342 netfs: Fix NULL pointer dereference in netfs_unbuffered_write() on retry
In reply to Greg Kroah-Hartman6.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.
--- fs/netfs/direct_write.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
fs/netfs/direct_write.c +11 -3
@@ -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
Greg Kroah-Hartman
maintainerPATCH 324/342 dmaengine: idxd: fix possible wrong descriptor completion in llist_abort_desc()
In reply to Greg Kroah-Hartman6.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.
--- drivers/dma/idxd/submit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/idxd/submit.c +1 -1
@@ -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
Greg Kroah-Hartman
maintainerPATCH 325/342 dmaengine: xilinx: xilinx_dma: Fix dma_device directions
In reply to Greg Kroah-Hartman6.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 .
--- drivers/dma/xilinx/xilinx_dma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/xilinx/xilinx_dma.c +1 -1
@@ -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
Greg Kroah-Hartman
maintainerPATCH 326/342 dmaengine: xilinx: xilinx_dma: Fix residue calculation for cyclic DMA
In reply to Greg Kroah-Hartman6.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.
--- drivers/dma/xilinx/xilinx_dma.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)
drivers/dma/xilinx/xilinx_dma.c +22 -1
@@ -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
Greg Kroah-Hartman
maintainerPATCH 327/342 dmaengine: xilinx: xilinx_dma: Fix unmasked residue subtraction
In reply to Greg Kroah-Hartman6.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.
--- drivers/dma/xilinx/xilinx_dma.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/dma/xilinx/xilinx_dma.c +6 -6
@@ -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
Greg Kroah-Hartman
maintainerPATCH 328/342 dmaengine: xilinx_dma: Fix reset related timeout with two-channel AXIDMA
In reply to Greg Kroah-Hartman6.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.
--- drivers/dma/xilinx/xilinx_dma.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)
drivers/dma/xilinx/xilinx_dma.c +1 -8
@@ -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
Greg Kroah-Hartman
maintainerPATCH 329/342 selftests/mount_setattr: increase tmpfs size for idmapped mount tests
In reply to Greg Kroah-Hartman6.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.
--- 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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 330/342 netfs: Fix read abandonment during retry
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 331/342 btrfs: fix super block offset in error message in btrfs_validate_super()
In reply to Greg Kroah-Hartman6.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.
--- fs/btrfs/disk-io.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/btrfs/disk-io.c +2 -2
@@ -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
Greg Kroah-Hartman
maintainerPATCH 332/342 btrfs: fix leak of kobject name for sub-group space_info
In reply to Greg Kroah-Hartman6.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/0x7eTo 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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 333/342 btrfs: fix lost error when running device stats on multiple devices fs
In reply to Greg Kroah-Hartman6.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.
--- fs/btrfs/volumes.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
fs/btrfs/volumes.c +3 -2
@@ -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
Greg Kroah-Hartman
maintainerPATCH 334/342 xen/privcmd: unregister xenstore notifier on module exit
In reply to Greg Kroah-Hartman6.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.
Message-ID: <[email protected]>
--- drivers/xen/privcmd.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/xen/privcmd.c +3 -0
@@ -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
Greg Kroah-Hartman
maintainerPATCH 335/342 netfs: Fix the handling of stream->front by removing it
In reply to Greg Kroah-Hartman6.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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 336/342 irqchip/renesas-rzv2h: Fix error path in rzv2h_icu_probe_common()
In reply to Greg Kroah-Hartman6.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().
--- drivers/irqchip/irq-renesas-rzv2h.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/irqchip/irq-renesas-rzv2h.c +1 -1
@@ -567,7 +567,7 @@ static int rzv2h_icu_probe_common(struct platform_device *pdev, struct device_noreturn 0 ; pm_put: -pm_runtime_put (&pdev->dev); +pm_runtime_put_sync (&pdev->dev);return ret; }
Signature · 1 line
2.53.0
Greg Kroah-Hartman
maintainerPATCH 337/342 futex: Require sys_futex_requeue() to have identical flags
In reply to Greg Kroah-Hartman6.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.
--- kernel/futex/syscalls.c | 8 ++++++++ 1 file changed, 8 insertions(+)
kernel/futex/syscalls.c +8 -0
@@ -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
Greg Kroah-Hartman
maintainerPATCH 338/342 futex: Fix UaF between futex_key_to_node_opt() and vma_replace_policy()
In reply to Greg Kroah-Hartman6.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
@@ -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
@@ -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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 339/342 ext4: introduce EXPORT_SYMBOL_FOR_EXT4_TEST() helper
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 340/342 ext4: fix mballoc-test.c is not compiled when EXT4_KUNIT_TESTS=M
In reply to Greg Kroah-Hartman6.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
@@ -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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 341/342 bug: avoid format attribute warning for clang as well
In reply to Greg Kroah-Hartman6.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
@@ -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
Greg Kroah-Hartman
maintainerPATCH 342/342 Bluetooth: L2CAP: Fix regressions caused by reusing ident
In reply to Greg Kroah-Hartman6.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 l2cstatic 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,
Hi
no regressions here on x86_64 (Intel 11th Gen. CPU)
Thanks
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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-rc1Luiz Augusto von Dentz <[email protected]>
Bluetooth: L2CAP: Fix regressions caused by reusing identArnd Bergmann <[email protected]>
bug: avoid format attribute warning for clang as wellYe Bin <[email protected]>
ext4: fixmballoc-test.cis not compiled when EXT4_KUNIT_TESTS=MYe Bin <[email protected]>
ext4: introduceEXPORT_SYMBOL_FOR_EXT4_TEST()helperHao-Yu Yang <[email protected]>
futex: Fix UaF betweenfutex_key_to_node_opt()andvma_replace_policy()Peter Zijlstra <[email protected]>
futex: Requiresys_futex_requeue()to have identical flagsBiju Das <[email protected]>
irqchip/renesas-rzv2h: Fix error path inrzv2h_icu_probe_common()David Howells <[email protected]>
netfs: Fix the handling of stream->front by removing itGuoHan Zhao <[email protected]>
xen/privcmd: unregister xenstore notifier on module exitFilipe Manana <[email protected]>
btrfs: fix lost error when running device stats on multiple devices fsShin'ichiro Kawasaki <[email protected]>
btrfs: fix leak of kobject name for sub-groupspace_infoMark Harmstone <[email protected]>
btrfs: fix super block offset in error message inbtrfs_validate_super()David Howells <[email protected]>
netfs: Fix read abandonment during retryChristian Brauner <[email protected]>
selftests/mount_setattr: increase tmpfs size for idmapped mount testsTomi Valkeinen <[email protected]>
dmaengine:xilinx_dma: Fix reset related timeout with two-channel AXIDMAMarek Vasut <[email protected]>
dmaengine: xilinx:xilinx_dma: Fix unmasked residue subtractionMarek Vasut <[email protected]>
dmaengine: xilinx:xilinx_dma: Fix residue calculation for cyclic DMAMarek Vasut <[email protected]>
dmaengine: xilinx:xilinx_dma: Fixdma_devicedirectionsTuo Li <[email protected]>
dmaengine: idxd: fix possible wrong descriptor completion inllist_abort_desc()Deepanshu Kartikey <[email protected]>
netfs: Fix NULL pointer dereference innetfs_unbuffered_write()on retryDeepanshu Kartikey <[email protected]>
netfs: Fix kernel BUG innetfs_limit_iter()forITER_KVECiteratorsAlexander Stein <[email protected]>
dmaengine: xilinx: xdma: Fix regmap init error handlingLUO Haowen <[email protected]>
dmaengine: dw-edma: Fix multiple times setting of theCYCLE_STATEandCYCLE_BITbits for HDMA.Felix Gu <[email protected]>
phy: ti: j721e-wiz: Fix device node reference leak inwiz_get_lane_phy_types()Vinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix leaking event log memoryVinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix freeing the allocated ida too lateVinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix memory leak when a wq is resetVinicius 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 FLRVinicius Costa Gomes <[email protected]>
dmaengine: idxd: Fix crash when the event log is disabledWerner Kasselman <[email protected]>
ksmbd: fix use-after-free and NULL deref insmb_grant_oplock()Benno Lossin <[email protected]>
rust: pin-init: internal: init: document load-bearing fact of field accessorsSeongJae Park <[email protected]>
mm/damon/core: avoid use of half-online-committed contextHari Bathini <[email protected]>
powerpc64/bpf: do not increment tailcall count when prog is NULLMarkus Niebel <[email protected]>
arm64: dts: imx8mn-tqma8mqnl: fix LDO5 power offTheodore Ts'o <[email protected]>
ext4: always drain queued discard work inext4_mb_release()Baokun Li <[email protected]>
ext4: fix iloc.bh leak inext4_fc_replay_inode()error pathsTheodore Ts'o <[email protected]>
ext4: handle wraparound when searching for blocks for indirect mapped blocksZqiang <[email protected]>
ext4: fix themight_sleep()warnings inkvfree()Jiayuan Chen <[email protected]>
ext4: fix use-after-free inupdate_super_workwhen racing with umountHelen Koike <[email protected]>
ext4: reject mount if bigalloc with s_first_data_block != 0Ye Bin <[email protected]>
ext4: avoid allocate block from corrupted group inext4_mb_find_by_goal()Edward Adam Davis <[email protected]>
ext4: avoid infinite loops caused by residual dataTejas Bharambe <[email protected]>
ext4: validatep_idxbounds inext4_ext_correct_indexesYe Bin <[email protected]>
ext4: test if inode's all dirty pages are submitted to diskLi Chen <[email protected]>
ext4: publish jinode after initializationYuto Ohnuki <[email protected]>
ext4: replaceBUG_ONwith proper error handling inext4_read_inline_folioJan Kara <[email protected]>
ext4: makerecently_deleted()properly work with lazy itable initializationJan Kara <[email protected]>
ext4: fix fsync(2) for nojournal modeZhang Yi <[email protected]>
ext4: do not check fast symlink during orphan recoveryJan Kara <[email protected]>
ext4: fix stale xarray tags after writebackDeepanshu Kartikey <[email protected]>
ext4: convert inline data to extents when truncate exceeds inline sizeSimon Weber <[email protected]>
ext4: fix journal credit check when setting fscrypt contextDarrick J. Wong <[email protected]>
xfs: removefile_pathtracepoint dataDarrick J. Wong <[email protected]>
xfs: don't irele after failing to iget inxfs_attri_recover_workLong Li <[email protected]>
xfs: fixri_totalvalidation inxlog_recover_attri_commit_pass2hongao <[email protected]>
xfs: scrub: unlock dquot before early return in quota scrubYuto Ohnuki <[email protected]>
xfs: avoid dereferencing log items after push callbacksYuto Ohnuki <[email protected]>
xfs: save ailp before dropping the AIL lock in push callbacksYuto Ohnuki <[email protected]>
xfs: stop reclaim before pushing AIL during unmountMax Boone <[email protected]>
mm/pagewalk: fix race between concurrent split and refaultJosh Law <[email protected]>
mm/damon/sysfs: check contexts->nr in repeat_call_fnJosh Law <[email protected]>
mm/damon/sysfs: check contexts->nr before accessing contexts_arr[0]Josh Law <[email protected]>
mm/damon/sysfs: fixparam_ctxleak ondamon_sysfs_new_test_ctx()failureLorenzo Stoakes (Oracle) <[email protected]>
mm/mseal: update VMA end correctly on mergeDavid Hildenbrand (Arm) <[email protected]>
mm/memory: fix PMD/PUD checks infollow_pfnmap_start()Asad Kamal <[email protected]>
drm/amd/pm: Return-EOPNOTSUPPfor unsupportedOD_MCLKonsmu_v13_0_6Huacai Chen <[email protected]>
LoongArch: KVM: Handle the case that EIOINTC's coremap is emptyBibo Mao <[email protected]>
LoongArch: KVM: Fix base address calculation inkvm_eiointc_regs_access()Huacai Chen <[email protected]>
LoongArch: KVM: Makekvm_get_vcpu_by_cpuid()more robustHuacai Chen <[email protected]>
LoongArch: Workaround LS2K/LS7A GPU DMA hang bugXi Ruoyao <[email protected]>
LoongArch: vDSO: EmitGNU_EH_FRAMEcorrectlyLi Jun <[email protected]>
LoongArch: Fix missing NULL checks forkstrdup()Ville Syrjälä <[email protected]>
drm/i915: Unlink NV12 planes earlierVille 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 stateAlex Deucher <[email protected]>
drm/amd/display: check ifext_capsis valid in BL setupAlex Hung <[email protected]>
drm/amd/display: Fixdrm_edidleak inamdgpu_dmAlex Deucher <[email protected]>
drm/amd/display: Fix DCE LVDS handlingRuijing Dong <[email protected]>
drm/amdgpu: fixstrsep()corruptinglockup_timeouton multi-GPU (v3)Eric Huang <[email protected]>
drm/amdgpu: prevent immediate PASID reuse caseClaudiu Beznea <[email protected]>
dmaengine: sh: rz-dmac: Move CHCTRL updates under spinlockClaudiu Beznea <[email protected]>
dmaengine: sh: rz-dmac: Protect the driver specific listsJoy Zou <[email protected]>
dmaengine: fsl-edma: fix channel parameter config for fixed channel requestsStefan Eichenberger <[email protected]>
i2c: imx: ensure no clock is generated after last readStefan Eichenberger <[email protected]>
i2c: imx: fix i2c issue when reading multiple messagesDavidlohr Bueso <[email protected]>
futex: Clear stale exiting pointer infutex_lock_pi()retry pathPratap Nirujogi <[email protected]>
i2c: designware: amdisp: Fix resume-probe race condition issueJoanne Koong <[email protected]>
iomap: fix invalid folio access wheni_blkbitsdiffers from I/O granularityJassi Brar <[email protected]>
irqchip/qcom-mpm: Add missing mailbox TX done acknowledgmentMilos Nikic <[email protected]>
jbd2: gracefully abort on checkpointing state corruptionsSean Christopherson <[email protected]>
KVM: x86/mmu: Only WARN in direct MMUs when overwriting shadow-present SPTESean Christopherson <[email protected]>
KVM: x86/mmu: Drop/zap existing present SPTE even when creating an MMIO SPTEKevin Hao <[email protected]>
net: macb: Usedev_consume_skb_any()to free TX SKBsKevin Hao <[email protected]>
net: macb: Protect access tonet_device::ip_ptrwith RCU lockKevin Hao <[email protected]>
net: macb: Move devm_{free,request}_irq() out of spin lock areaGreg Kroah-Hartman <[email protected]>
scsi: ses: Handle positive SCSI error fromses_recv_diag()Tyllis Xu <[email protected]>
scsi: ibmvfc: Fix OOB access inibmvfc_discover_targets_done()Amir Goldstein <[email protected]>
ovl: fix wrong detection of 32bit inode numbersFei Lv <[email protected]>
ovl: make fsync after metadata copy-up opt-in mount optionAbel Vesa <[email protected]>
phy: qcom: qmp-ufs: Fix SM8650 PCS table for Gear 4Nikunj A Dadhania <[email protected]>
x86/fred: Fix early boot failures on SEV-ES/SNP guestsBorislav Petkov (AMD) <[email protected]>
x86/cpu: RemoveX86_CR4_FREDfrom the CR4 pinned bits maskNikunj A Dadhania <[email protected]>
x86/cpu: Enable FSGSBASE early incpu_init_exception_handling()Joanne Koong <[email protected]>
writeback: don't block sync for filesystems with no data integrity guaranteesJinjiang Tu <[email protected]>
mm/huge_memory: fix folio isn't locked insoftleaf_to_folio()Zhan Xusheng <[email protected]>
alarmtimer: Fix argument order inalarm_timer_forward()Jiucheng Xu <[email protected]>
erofs: addGFP_NOIOin the bio completion if neededAlex Williamson <[email protected]>
vfio/pci: Fix double free in dma-buf featurexietangxin <[email protected]>
virtio_net: Fix UAF ondst_opswhenIFF_XMIT_DST_RELEASEis cleared andnapi_txis falseZubin Mithra <[email protected]>
virt: tdx-guest: Fix handling of host controlled 'quote' buffer lengthPaul Moses <[email protected]>
xfrm: iptfs: only publishmode_dataafter clone setupRoshan Kumar <[email protected]>
xfrm: iptfs: validate inner IPv4 header length in IPTFS payloadMing Qian <[email protected]>
media: verisilicon: Fix kernel panic due to__initconstmisuseYuchan Nam <[email protected]>
media: mc, v4l2: serialize REINIT and REQBUFS withreq_queue_mutexSanman Pradhan <[email protected]>
hwmon: (peci/cputemp) Fix off-by-one incputemp_is_visible()Sanman Pradhan <[email protected]>
hwmon: (peci/cputemp) Fixcrit_hystreturning delta instead of absolute temperatureSanman Pradhan <[email protected]>
hwmon: (pmbus/isl68137) Add mutex protection for AVS enable sysfs attributesSanman Pradhan <[email protected]>
hwmon: (pmbus/ina233) Fix error handling and sign extension in shunt voltage readZenghui 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 resetSrinivas Pandruvada <[email protected]>
platform/x86: ISST: Correct locked bit widthAbhijit Gangurde <[email protected]>
RDMA/ionic: Preserve and set Ethernet source MAC afterib_ud_header_init()Srinivas Pandruvada <[email protected]>
thermal: intel: int340x: soc_slider: Set offset only for balanced modeSeongJae Park <[email protected]>
mm/damon/stat: monitor all System RAM resourcesCharles Mirabile <[email protected]>
kbuild: Delete.builtin-dtbs.Swhen running make cleanViresh Kumar <[email protected]>
cpufreq: conservative: Resetrequested_freqon limits changeViresh Kumar <[email protected]>
cpufreq: Don't skipcpufreq_frequency_table_cpuinfo()Marc Kleine-Budde <[email protected]>
can: netlink:can_changelink(): add missing error handling to callcan_ctrlmode_changelink()Oliver Hartkopp <[email protected]>
can: isotp: fix tx.buf use-after-free inisotp_sendmsg()Ali Norouzi <[email protected]>
can: gw: fix OOB heap access incgw_csum_crc8_rel()Peter Ujfalusi <[email protected]>
ASoC: SOF: ipc4-topology: Allow bytes controls without initial payloadGuangshuo Li <[email protected]>
ASoC: sma1307: fix double free ofdevm_kzalloc()memorySrinivas Kandagatla <[email protected]>
ASoC: codecs: wcd934x: fix typo in dt parsingKarol Wachowski <[email protected]>
accel/ivpu: Add disable clock relinquish workaround for NVL-A0Alexey Nepomnyashih <[email protected]>
ALSA: firewire-lib: fix uninitialized local variableZhang Heng <[email protected]>
ALSA: hda/realtek: add quirk for ASUS Strix G16 G615JMRMario Limonciello <[email protected]>
Revert "ALSA: hda/intel: Add MSI X870E Tomahawk to denylist"Hyunwoo Kim <[email protected]>
ksmbd: do not expire session on binding failureWerner Kasselman <[email protected]>
ksmbd: fix memory leaks and NULL deref insmb2_lock()Namjae Jeon <[email protected]>
ksmbd: fix potencial OOB inget_file_all_info()for compound requestsNamjae Jeon <[email protected]>
ksmbd: replace hardcodedhdr2_lenwithoffsetof()insmb2_calc_max_out_buf_len()Matthew Auld <[email protected]>
drm/xe: always keep track of remap prev/nextLuo Haiyang <[email protected]>
tracing: Fix potential deadlock in cpu hotplug with osnoiseWesley Atwell <[email protected]>
tracing: Drain deferred trigger frees if kthread creation failsVasily Gorbik <[email protected]>
s390/entry: Scrub r12 register on kernel entryVasily Gorbik <[email protected]>
s390/barrier: Makearray_index_mask_nospec()__always_inlineGreg Kroah-Hartman <[email protected]>
s390/syscalls: Add spectre boundary for syscall dispatch tableGeoffrey D. Bennett <[email protected]>
ALSA: usb-audio: Exclude Scarlett 2i4 1st Gen fromSKIP_IFACE_SETUPNicholas Carlini <[email protected]>
io_uring/fdinfo: fix OOB read inSQE_MIXEDwrap checkJens Axboe <[email protected]>
io_uring/fdinfo: fixSQE_MIXEDSQE displayingMarc 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 failureJihed Chaibi <[email protected]>
ASoC: adau1372: Fix uncheckedclk_prepare_enable()return valueMarc Buerg <[email protected]>
sysctl: fix uninitialized variable inproc_do_large_bitmapGuenter Roeck <[email protected]>
hwmon: (pmbus/core) Protect regulator operations with mutexGuenter Roeck <[email protected]>
hwmon: (pmbus) Introduce the concept of "write-only" attributesGuenter Roeck <[email protected]>
hwmon: (pmbus) Mark lowest/average/highest/rated attributes as read-onlyShuming Fan <[email protected]>
ASoC: SDCA: fix finding wrong entitySanman Pradhan <[email protected]>
hwmon: (adm1177) fix sysfs ABI violation and current unit conversionSrinivasan Shanmugam <[email protected]>
drm/amdgpu: Fix fence put before wait inamdgpu_amdkfd_submit_ibWeiming Shi <[email protected]>
ACPI: EC: clean up handlers on probe failure inacpi_ec_setup()Danilo Krummrich <[email protected]>
spi: use genericdriver_overrideinfrastructureMatt Roper <[email protected]>
drm/xe: Implement recent spec updates to Wa_16025250150Alice Ryhl <[email protected]>
rust: regulator: do not assume thatregulator_get()returns non-nullJihed Chaibi <[email protected]>
ASoC: dt-bindings: stm32: Fix incorrect compatible string in stm32h7-sai matchYussuf Khalil <[email protected]>
drm/amd/display: Do not skip unrelated mode changes in DSC validationFelix Gu <[email protected]>
spi: meson-spicc: Fix double-put in remove pathCezary Rojewski <[email protected]>
ASoC: Intel: catpt: Fix the device initializationFelix Gu <[email protected]>
spi: sn-f-ospi: Fix resource leak inf_ospi_probe()Michał Winiarski <[email protected]>
drm/xe/pf: Fix use-after-free in migration restoreYoungjun Park <[email protected]>
PM: sleep: Drop spuriousWARN_ON()frompm_restore_gfp_mask()Alberto Garcia <[email protected]>
PM: hibernate: Drain trailing zero pages on userspace restoreSamasth Norway Ananda <[email protected]>
drm/i915/gmbus: fix spurious timeout on 512-byte burst readsLuca Leonardo Scorcia <[email protected]>
drm/mediatek: dsi: Store driver data before invokingmipi_dsi_host_registerMike Rapoport (Microsoft) <[email protected]>
x86/efi:efi_unmap_boot_services: fix calculation ofranges_to_freesizeYihang Li <[email protected]>
scsi:scsi_transport_sas: Fix the maximum channel scanning issueShengjiu Wang <[email protected]>
ASoC: fsl: imx-card: initializeplayback_onlyandcapture_onlyShengjiu Wang <[email protected]>
ASoC: simple-card-utils: Check value ofis_playback_onlyandis_capture_onlyShiraz Saleem <[email protected]>
RDMA/irdma: Harden depth calculation functionsTatyana Nikolova <[email protected]>
RDMA/irdma: Return EINVAL for invalid arp index errorAnil Samal <[email protected]>
RDMA/irdma: Fix deadlock during netdev reset with active connectionsTatyana Nikolova <[email protected]>
RDMA/irdma: Remove reset check fromirdma_modify_qp_to_err()Ivan Barrera <[email protected]>
RDMA/irdma: Clean up unnecessary dereference of event->cm_nodeTatyana Nikolova <[email protected]>
RDMA/irdma: Remove a NOPwait_event()inirdma_modify_qp_roce()Tatyana Nikolova <[email protected]>
RDMA/irdma: Update ibqp state to error if QP is already in error stateJacob Moroni <[email protected]>
RDMA/irdma: Initializefree_qpcompletion before using itGeoffrey D. Bennett <[email protected]>
ALSA: usb-audio: Exclude Scarlett 2i2 1st Gen fromSKIP_IFACE_SETUPEthan Tidmore <[email protected]>
RDMA/efa: Fix possible deadlockChuck Lever <[email protected]>
RDMA/rw: Fall back to direct SGE on MR pool exhaustionSean Rhodes <[email protected]>
ALSA: hda/realtek: Sequence GPIO2 on Star Labs StarFighterAndy Shevchenko <[email protected]>
regmap: Synchronize cache for the page selectorYonatan Nachum <[email protected]>
RDMA/efa: Fix use of completion ctx after freeYonatan Nachum <[email protected]>
RDMA/efa: Improve admin completion context state machineYonatan Nachum <[email protected]>
RDMA/efa: Check stored completion CTX command ID with received oneKamal Heib <[email protected]>
RDMA/bng_re: Fix silent failure in HWRM version queryPaolo Valerio <[email protected]>
net: macb: use the current queue number for statsDavid Carlier <[email protected]>
netfilter: ctnetlink: use netlink policy range checksWeiming Shi <[email protected]>
netfilter:nf_conntrack_sip: fix use of uninitializedrtp_addrinprocess_sdpPablo Neira Ayuso <[email protected]>
netfilter:nf_conntrack_expect: skip expectations in other netns via procPablo Neira Ayuso <[email protected]>
netfilter:nft_set_rbtree: revisit array resize logicRen Wei <[email protected]>
netfilter:ip6t_rt: reject oversized addrnr inrt_mt6_check()Weiming Shi <[email protected]>
netfilter:nfnetlink_log: fix uninitialized padding leak inNFULA_PAYLOADChuck Lever <[email protected]>
tls: Purgeasync_holdintls_decrypt_async_wait()Pengpeng Hou <[email protected]>
Bluetooth: btusb: clamp SCO altsetting table indicesHyunwoo Kim <[email protected]>
Bluetooth: L2CAP: Fix ERTM re-init and zeropdu_leninfinite loopHyunwoo Kim <[email protected]>
Bluetooth: L2CAP: Fix deadlock inl2cap_conn_del()Luiz Augusto von Dentz <[email protected]>
Bluetooth: L2CAP: Fix not tracking outstanding TX identCen Zhang <[email protected]>
Bluetooth: btintel: serializebtintel_hw_error()withhci_req_sync_lockZhang Chen <[email protected]>
Bluetooth: L2CAP: Fix send LE flow credits in ACL linkMiguel Ojeda <[email protected]>
dma-mapping: add missinginlinefordma_free_attrsJonas Köppeler <[email protected]>
net_sched: codel: fix stale state for empty flows infq_codelSabrina Dubroca <[email protected]>
rtnetlink: fix leak of SRCU struct inrtnl_link_registerThangaraj Samynathan <[email protected]>
net: lan743x: fix duplex configuration inmac_link_upDavid Carlier <[email protected]>
net: ti: icssg-prueth: fix use-after-free of CPPI descriptor in RX pathJiayuan Chen <[email protected]>
team: fixheader_opstype confusion with non-Ethernet portsXuan Zhuo <[email protected]>
virtio-net: correcthdr_lenhandling for tunnel gsoXuan Zhuo <[email protected]>
virtio-net: correcthdr_lenhandling forVIRTIO_NET_F_GUEST_HDRLENWei 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 hash2Arnd Bergmann <[email protected]>
net: b44: always selectCONFIG_FIXED_PHYQingfang Deng <[email protected]>
net: airoha: add RCU lock arounddev_fill_forward_pathYochai Eisenrich <[email protected]>
net: fix fanout UAF inpacket_release()viaNETDEV_UPraceKuniyuki Iwashima <[email protected]>
ipv6: Don't remove permanent routes with exceptions fromtb6_gc_hlist.Kuniyuki Iwashima <[email protected]>
ipv6: Remove permanent routes fromtb6_gc_hlistwhen all exceptions expire.Kohei Enju <[email protected]>
iavf: fix out-of-bounds writes iniavf_get_ethtool_stats()Petr Oros <[email protected]>
ice: useice_update_eth_stats()for representor statsPetr Oros <[email protected]>
ice: fix inverted ready check for VF representorsDavid McFarland <[email protected]>
platform/x86: intel-hid: disablewakeup_modeduring hibernationAlok Tiwari <[email protected]>
platform/olpc: olpc-xo175-ec: Fix overflow error message to print inlenNathan Chancellor <[email protected]>
platform/x86: lenovo: wmi-gamezone: Dropgz_chain_headLi RongQing <[email protected]>
platform/x86: ISST: Check HWP support before MSR accessJustin Chen <[email protected]>
net: bcmasp: fix double disable of clkJustin Chen <[email protected]>
net: bcmasp: fix double free of WoL irqJustin Chen <[email protected]>
net: bcmasp: streamline early exit in probeSabrina Dubroca <[email protected]>
rtnetlink: countIFLA_INFO_SLAVE_KINDinif_nlmsg_sizeSabrina Dubroca <[email protected]>
rtnetlink: count IFLA_PARENT_DEV_{NAME,BUS_NAME} inif_nlmsg_sizeQi Tang <[email protected]>
net/smc: fix double-free ofsmc_spd_privwhentee()duplicates splice pipe bufferYang Yang <[email protected]>
openvswitch: validate MPLS set/set_masked payload lengthYang Yang <[email protected]>
openvswitch: defer tunnelnetdev_putto RCU releaseToke Høiland-Jørgensen <[email protected]>
net: openvswitch: Avoid releasing netdev before teardown completesJakub Kicinski <[email protected]>
nfc: nci: fix circular locking dependency innci_close_deviceMohammad Heib <[email protected]>
ionic: fix persistent MAC address override on PFLuca Leonardo Scorcia <[email protected]>
pinctrl: mediatek: common: Fix probe failure for devices without EINTHelen Koike <[email protected]>
Bluetooth: L2CAP: Fix null-ptr-deref onl2cap_sock_ready_cbAnas Iqbal <[email protected]>
Bluetooth:hci_ll: Fix firmware leak on error pathLuiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix dangling pointer onmgmt_add_adv_patterns_monitor_completeHyunwoo Kim <[email protected]>
Bluetooth: SCO: Fix use-after-free insco_recv_frame()due to missingsock_holdHyunwoo Kim <[email protected]>
Bluetooth: L2CAP: Validate PDU length before reading SDU length inl2cap_ecred_data_rcv()Minseo Park <[email protected]>
Bluetooth: L2CAP: Fix stack-out-of-bounds read inl2cap_ecred_conn_reqAmelie Delaunay <[email protected]>
pinctrl: stm32: fix HDP driver dependency onGPIO_GENERICOliver Hartkopp <[email protected]>
can: statistics: add missing atomic access in hot pathSheng Yong <[email protected]>
erofs: set fileio bio failed in short read caseShigeru Yoshida <[email protected]>
dma: swiotlb: add KMSAN annotations toswiotlb_bounce()Eric Dumazet <[email protected]>
af_key: validate families inpfkey_send_migrate()Minwoo Ra <[email protected]>
xfrm: prevent policy_hthresh.work from racing with netns teardownHyunwoo Kim <[email protected]>
xfrm: Fix work re-schedule after cancel inxfrm_nat_keepalive_net_fini()Dmitry Torokhov <[email protected]>
pinctrl: renesas: rza1: Normalize return value ofgpio_get()Neil Armstrong <[email protected]>
pinctrl: qcom: spmi-gpio: implement .get_direction()Fernando Fernandez Mancera <[email protected]>
xfrm: iptfs: fixskb_put()panic on non-linear skb during reassemblyFelix Gu <[email protected]>
pinctrl: renesas: rzt2h: Fix device node leak inrzt2h_gpio_register()Sabrina Dubroca <[email protected]>
esp: fix skb leak with espintcp and async cryptoSabrina Dubroca <[email protected]>
xfrm: callxdo_dev_state_deleteduring state updateSabrina Dubroca <[email protected]>
xfrm: fix the condition on x->pcpu_num in xfrm_sa_lenSabrina Dubroca <[email protected]>
xfrm: add missing extack forXFRMA_SA_PCPUinadd_acquireand allocspiPeter Yin <[email protected]>
i3c: master: dw-i3c: Fix missingof_nodefor virtual I2C adapterZhang Heng <[email protected]>
ALSA: hda/realtek: add quirk for ASUS UM6702RCLianqin Hu <[email protected]>
ALSA: usb-audio: Add iface reset and delay quirk for SPACETOUCH USB AudioAlan Borzeszkowski <[email protected]>
spi: intel-pci: Add support for Nova Lake mobile SPI flashJie Deng <[email protected]>
usb: core: new quirk to handle devices with zero configurationsYang Wang <[email protected]>
drm/amdgpu: fix gpu idle power consumption issue for gfx v12Chaitanya Kulkarni <[email protected]>
nvmet: move async event work off nvmet-wqJosh Poimboeuf <[email protected]>
objtool: Handle Clang RSP musical chairsUzair Mughal <[email protected]>
ALSA: hda/realtek: Add headset jack quirk for Thinkpad X390Zhang Heng <[email protected]>
ALSA: hda/realtek: Add quirk for Gigabyte Technology to fix headphoneJosh Poimboeuf <[email protected]>
objtool/klp: Disable unsupportedpr_debug()usageLiucheng Lu <[email protected]>
ALSA: hda/realtek: add HP Laptop 14s-dr5xxx mute LED quirkHari Bathini <[email protected]>
powerpc64/ftrace: fix OOL stub count with clangHONG Yifan <[email protected]>
objtool: Use HOSTCFLAGS forHAVE_XXHASHtestBoris Burkov <[email protected]>
btrfs: setBTRFS_ROOT_ORPHAN_CLEANUPduring subvol createzhidao su <[email protected]>
sched_ext: Use WRITE_ONCE() for the write side of dsq->seq updateGünther Noack <[email protected]>
HID: apple: avoid memory leak inapple_report_fixup()Eduard Zingerman <[email protected]>
bpf: Fix u32/s32 bounds when ranges cross min/max boundarySimon Trimmer <[email protected]>
ASoC: amd: acp: Add ACP6.3 match entries for Cirrus Logic partsMaarten Lankhorst <[email protected]>
drm/ttm/tests: Fix build failure onPREEMPT_RTwangdicheng <[email protected]>
ALSA: hda/senary: Ensure EAPD is enabled during initNilay Shroff <[email protected]>
block: breakpcpu_alloc_mutexdependency onfreeze_lockIsaac J. Manjarres <[email protected]>
dma-buf: Includeioctl.hin UAPI headerVladimir Yakovlev <[email protected]>
spi: spi-dw-dma: fix print error log when wait finish transactionRichard Fitzgerald <[email protected]>
ASoC: cs35l56: Only patch ASP registers if the DAI is part of a DAIlinkMark Brown <[email protected]>
ASoC:fsl_easrc: Fix event generation infsl_easrc_iec958_put_bits()Sheetal <[email protected]>
ALSA: hda/hdmi: Add Tegra238 HDA codec device IDOliver Freyermuth <[email protected]>
ASoC: Intel:sof_sdw: Add quirk for Alienware Area 51 (2025) 0CCD SKUFlorian Fuchs <[email protected]>
scsi: devinfo: AddBLIST_SKIP_IO_HINTSfor Iomega ZIPShuming Fan <[email protected]>
ASoC: rt1321: fix DMIC ch2/3 mask issueRanjan Kumar <[email protected]>
scsi: mpi3mr: Clear reset history on ready and recheck state after timeoutMark Brown <[email protected]>
ASoC:fsl_easrc: Fix event generation infsl_easrc_iec958_set_reg()Ihor Solodrai <[email protected]>
module: Fix kernel panic when a symbolst_shndxis out of boundsDenis Benato <[email protected]>
HID: asus: add xg mobile 2023 external hardware supportRomain Sioen <[email protected]>
HID: mcp2221: cancel last I2C command on read errorAntheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for OneXPlayer X1 AirAntheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for Aokzoe A2 ProThomas Weißschuh <[email protected]>
kbuild: install-extmod-build: Packageresolve_btfidsif necessaryValentin Spreckels <[email protected]>
net: usb: r8152: add TRENDnet TUC-ET2GAntheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for OneXPlayer X1zTakashi Iwai <[email protected]>
HID: apple: Add EPOMAKER TH87 to the non-apple keyboards listAntheas Kapenekakis <[email protected]>
platform/x86: oxpec: Add support for OneXPlayer APEXZhang Lixu <[email protected]>
HID: intel-ish-hid: ipc: Add Nova Lake-H/S PCI device IDsVictor Lattaro Volpini <[email protected]>
platform/x86: hp-wmi: Add Victus 16-d0xxx supportGünther Noack <[email protected]>
HID: magicmouse: avoid memory leak inmagicmouse_report_fixup()Julius Lehmann <[email protected]>
HID: magicmouse: fix battery reporting for Apple Magic Trackpad 2Keith Busch <[email protected]>
nvme-pci: ensure we're polling a polled queueAnton Plotnikov <[email protected]>
platform/x86: hp-wmi: add Omen 14-fb1xxx (board 8E41) supportHans de Goede <[email protected]>
platform/x86:touchscreen_dmi: Add quirk for y-inverted Goodix touchscreen on SUPI S10Leif Skunberg <[email protected]>
platform/x86: intel-hid: Enable 5-button array on ThinkPad X1 Fold 16 Gen 1Krishna Chomal <[email protected]>
platform/x86: hp-wmi: Add Omen 16-xd0xxx fan and thermal supportDaniel Hodges <[email protected]>
nvme-fabrics: usekfree_sensitive()for DHCHAP secretsKeith Busch <[email protected]>
nvme-pci: cap queue creation to used queuesPeter Metz <[email protected]>
platform/x86: intel-hid: Add Dell 14 Plus 2-in-1 todmi_vgbs_allow_listGünther Noack <[email protected]>
HID: asus: avoid memory leak inasus_report_fixup()Krishna Chomal <[email protected]>
platform/x86: hp-wmi: Add Omen 16-wf0xxx fan and thermal supportXuewen Yan <[email protected]>
tracing: Revert "tracing: Remove pid intask_renametracing output"Daniel Wade <[email protected]>
bpf: Fix unsound scalar forking inmaybe_fork_scalars()forBPF_ORJenny Guanni Qu <[email protected]>
bpf: Fix undefined behavior in interpreter sdiv/smod forINT_MINIhor Solodrai <[email protected]>
bpf: Fix exception exit lock checking for subprogsCui Chao <[email protected]>
cxl: Adjust the startup priority ofcxl_pmemto be higher than that ofcxl_acpiKumar Kartikeya Dwivedi <[email protected]>
bpf: Release module BTF IDR before module unloadIan Rogers <[email protected]>
perf metricgroup: Fixmetricgroup__has_metric_or_groups()Danilo Krummrich <[email protected]>
driver core: platform: use genericdriver_overrideinfrastructureDanilo Krummrich <[email protected]>
driver core: generalizedriver_overridein struct deviceDanilo Krummrich <[email protected]>
sh: platform_early: remove pdev->driver_override checkDanilo Krummrich <[email protected]>
hwmon: axi-fan: don't usedriver_overrideas IRQ nameSmita Koralahalli <[email protected]>
cxl/hdm: Avoid incorrect DVSEC fallback when HDM decoders are enabledJosh Poimboeuf <[email protected]>
livepatch/klp-build: Fix inconsistent kernel versionJoe 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 memoryPeter Zijlstra <[email protected]>
perf: Make sure to use pmu_ctx->pmu for groupsPeter Zijlstra <[email protected]>
x86/perf: Make sure to program the counter value for stopped events on migrationSachin Kumar <[email protected]>
bpf: Fix constant blinding forPROBE_MEM32storesYazhou Tang <[email protected]>
bpf: Reset register ID forBPF_ENDvalue trackingDavidlohr Bueso <[email protected]>
cxl/region: Fix leakage in__construct_region()Alison Schofield <[email protected]>
cxl/port: Fix use after free ofparent_portincxl_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
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
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
Greg Kroah-Hartman
maintainerQuoted 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
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
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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.
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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
Greg Kroah-Hartman
maintainerQuoted 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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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
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]
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
[...]
# Librecast Test Results
020/020 [ OK ] liblcrq
010/010 [ OK ] libmld
120/120 [ OK ] liblibrecast
CPU/kernel: Linux auntie 6.19.11-rc1-g411f8a553ae8 #1 SMP PREEMPT_DYNAMIC Wed Apr 1 07:19:19 -00 2026 x86_64 AMD Ryzen 9 9950X 16-Core Processor AuthenticAMD GNU/Linux
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.19.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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 failLinux 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-a04Jon
Luna Jernberg
Tested-byAMD 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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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 failLinux 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-a04Tested-by Jon Hunter <[email protected]>Jon
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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
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
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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
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.
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.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-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]>
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
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