Skip to content
Snippets Groups Projects
Forked from Reform / reform-boundary-uboot
Source project has a limited visibility.
  • Thomas Fitzsimmons's avatar
    54d68e93
    fs: ext4: Prevent infinite loop in ext4fs_iterate_dir · 54d68e93
    Thomas Fitzsimmons authored
    
    If the ext3 journal gets out of sync with what is written on disk, for
    example because of an unexpected power cut, ext4fs_read_file can
    return an all-zero directory entry.  In that case, ext4fs_iterate_dir
    would infinite loop.
    
    This patch detects when a directory entry's direntlen member is 0 and
    returns a failure status, which breaks out of the infinite loop.  As a
    result, U-Boot will not find files that may subsequently be recovered
    when the journal is replayed.
    
    This is better behaviour than hanging in an infinite loop, but as a
    further improvement maybe U-Boot could interpret the ext3 journal and
    actually find the unsynced entries.
    
    Signed-off-by: default avatarThomas Fitzsimmons <fitzsim@cisco.com>
    Reviewed-by: default avatarStefan Roese <sr@denx.de>
    54d68e93
    History
    fs: ext4: Prevent infinite loop in ext4fs_iterate_dir
    Thomas Fitzsimmons authored
    
    If the ext3 journal gets out of sync with what is written on disk, for
    example because of an unexpected power cut, ext4fs_read_file can
    return an all-zero directory entry.  In that case, ext4fs_iterate_dir
    would infinite loop.
    
    This patch detects when a directory entry's direntlen member is 0 and
    returns a failure status, which breaks out of the infinite loop.  As a
    result, U-Boot will not find files that may subsequently be recovered
    when the journal is replayed.
    
    This is better behaviour than hanging in an infinite loop, but as a
    further improvement maybe U-Boot could interpret the ext3 journal and
    actually find the unsynced entries.
    
    Signed-off-by: default avatarThomas Fitzsimmons <fitzsim@cisco.com>
    Reviewed-by: default avatarStefan Roese <sr@denx.de>