Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ext2simg: Fix off-by-one errors causing corruption #116

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Jun 8, 2022

  1. ext2simg: Fix off-by-one errors causing corruption

    If your filesystem is contiguously used from block 0 to block 524286
    with a 4096 byte block size, block 524286 did not end up in the sparse
    image and was thus restored as zeros when unsparsing.
    
    Additionally, if the last block of the image is used, this block also
    ended up being 0:
    
    $> dd if=/dev/zero of=test.ext4 bs=4096 count=10240
    $> mkfs.ext4 test.ext4
    $> mkdir test
    $> sudo mount -t ext4 -o loop test.ext4 test
    $> sudo dd if=/dev/urandom of=test/contents
    $> sudo umount test
    $> ext2simg test.ext4 test.ext4.simg
    $> simg2img test.ext4.simg test.ext4.restored
    $> vimdiff <(debugfs -R 'bd 10239' test.ext4) <(debugfs -R 'bd 10239' test.ext4.restored)
    
    This seems to have happened because it was not clear that add_chunk()
    treats the given end block as exclusive, since the different invocations
    of add_chunk() seem to make different assumptions on whether the end
    block is included in the sparse image or not. Add documentation to both
    the add_chunk function as well as the invocations to clarify this.
    
    This may or may not be the same issue that was reported a few years ago
    in https://www.spinics.net/lists/linux-ext4/msg58483.html.
    
    Signed-off-by: Clemens Lang <clemens.lang@xxxxxx>
    Mauro Queiros authored and Mauro Queiros committed Jun 8, 2022
    Configuration menu
    Copy the full SHA
    0f45729 View commit details
    Browse the repository at this point in the history