• E
    block: Guarantee that *file is set on bdrv_get_block_status() · 81c219ac
    Eric Blake 提交于
    We document that *file is valid if the return is not an error and
    includes BDRV_BLOCK_OFFSET_VALID, but forgot to obey this contract
    when a driver (such as blkdebug) lacks a callback.  Messed up in
    commit 67a0fd2a (v2.6), when we added the file parameter.
    
    Enhance qemu-iotest 177 to cover this, using a sequence that would
    print garbage or even SEGV, because it was dererefencing through
    uninitialized memory.  [The resulting test output shows that we
    have less-than-ideal block status from the blkdebug driver, but
    that's a separate fix coming up soon.]
    
    Setting *file on all paths that return BDRV_BLOCK_OFFSET_VALID is
    enough to fix the crash, but we can go one step further: always
    setting *file, even on error, means that a broken caller that
    blindly dereferences file without checking for error is now more
    likely to get a reliable SEGV instead of randomly acting on garbage,
    making it easier to diagnose such buggy callers.  Adding an
    assertion that file is set where expected doesn't hurt either.
    
    CC: qemu-stable@nongnu.org
    Signed-off-by: NEric Blake <eblake@redhat.com>
    Reviewed-by: NFam Zheng <famz@redhat.com>
    Reviewed-by: NMax Reitz <mreitz@redhat.com>
    Reviewed-by: NJohn Snow <jsnow@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    81c219ac
177.out 2.2 KB