mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	ext4: verify orphan file size is not too big
In principle orphan file can be arbitrarily large. However orphan replay
needs to traverse it all and we also pin all its buffers in memory. Thus
filesystems with absurdly large orphan files can lead to big amounts of
memory consumed. Limit orphan file size to a sane value and also use
kvmalloc() for allocating array of block descriptor structures to avoid
large order allocations for sane but large orphan files.
Reported-by: syzbot+0b92850d68d9b12934f5@syzkaller.appspotmail.com
Fixes: 02f310fcf4 ("ext4: Speedup ext4 orphan inode handling")
Cc: stable@kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Message-ID: <20250909112206.10459-2-jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
			
			
This commit is contained in:
		
							parent
							
								
									963845748f
								
							
						
					
					
						commit
						0a6ce20c15
					
				
					 1 changed files with 12 additions and 1 deletions
				
			
		|  | @ -587,9 +587,20 @@ int ext4_init_orphan_info(struct super_block *sb) | |||
| 		ext4_msg(sb, KERN_ERR, "get orphan inode failed"); | ||||
| 		return PTR_ERR(inode); | ||||
| 	} | ||||
| 	/*
 | ||||
| 	 * This is just an artificial limit to prevent corrupted fs from | ||||
| 	 * consuming absurd amounts of memory when pinning blocks of orphan | ||||
| 	 * file in memory. | ||||
| 	 */ | ||||
| 	if (inode->i_size > 8 << 20) { | ||||
| 		ext4_msg(sb, KERN_ERR, "orphan file too big: %llu", | ||||
| 			 (unsigned long long)inode->i_size); | ||||
| 		ret = -EFSCORRUPTED; | ||||
| 		goto out_put; | ||||
| 	} | ||||
| 	oi->of_blocks = inode->i_size >> sb->s_blocksize_bits; | ||||
| 	oi->of_csum_seed = EXT4_I(inode)->i_csum_seed; | ||||
| 	oi->of_binfo = kmalloc_array(oi->of_blocks, | ||||
| 	oi->of_binfo = kvmalloc_array(oi->of_blocks, | ||||
| 				     sizeof(struct ext4_orphan_block), | ||||
| 				     GFP_KERNEL); | ||||
| 	if (!oi->of_binfo) { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Jan Kara
						Jan Kara