[U-Boot] [PATCH 3/3] ext4: Do not crash when trying to grow a directory using extents

Lukasz Majewski l.majewski at samsung.com
Thu Aug 18 16:48:53 CEST 2016


Hi Stefan,

> The following command crashes u-boot:
> ./sandbox/u-boot -c 'i=0; host bind 0 ./sandbox/test/fs/3GB.ext4.img ;
>   while test $i -lt 200 ; do echo $i; setexpr i $i + 1;
>   ext4write host 0 0 /foobar${i} 0; done'
> 
> Previously, the code updated the direct_block even for extents, and
> fortunately crashed before pushing garbage to the disk.
> 
> Signed-off-by: Stefan Brüns <stefan.bruens at rwth-aachen.de>
> ---
>  fs/ext4/ext4_common.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
> index b8c37cf..6432104 100644
> --- a/fs/ext4/ext4_common.c
> +++ b/fs/ext4/ext4_common.c
> @@ -431,8 +431,13 @@ restart:
>  			    sizeof(struct ext2_dirent) +
> padding_factor; if ((fs->blksz - totalbytes - last_entry_dirlen) <
>  				new_entry_byte_reqd) {
> -				printf("1st Block Full:Allocate new
> block\n");
> +				printf("Last Block Full:Allocate new
> block\n"); 
> +				if
> (le32_to_cpu(g_parent_inode->flags) &
> +						EXT4_EXTENTS_FL) {
> +					printf("Directory uses
> extents\n");
> +					goto fail;
> +				}
>  				if (direct_blk_idx ==
> INDIRECT_BLOCKS - 1) { printf("Directory exceeds limit\n");
>  					goto fail;

Reviewed-by: Lukasz Majewski <l.majewski at samsung.com>

-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group


More information about the U-Boot mailing list