• Jan Kara's avatar
    ext2: Fix fs corruption in ext2_get_xip_mem() · 4b808fd2
    Jan Kara authored
    commit 7ba3ec57 upstream.
    
    Commit 8e3dffc6 "Ext2: mark inode dirty after the function
    dquot_free_block_nodirty is called" unveiled a bug in __ext2_get_block()
    called from ext2_get_xip_mem(). That function called ext2_get_block()
    mistakenly asking it to map 0 blocks while 1 was intended. Before the
    above mentioned commit things worked out fine by luck but after that commit
    we started returning that we allocated 0 blocks while we in fact
    allocated 1 block and thus allocation was looping until all blocks in
    the filesystem were exhausted.
    
    Fix the problem by properly asking for one block and also add assertion
    in ext2_get_blocks() to catch similar problems.
    Reported-and-tested-by: default avatarAndiry Xu <andiry.xu@gmail.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    4b808fd2
inode.c 44.5 KB