[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