• Peter Feiner's avatar
    block: fix backing file segfault · d80ac658
    Peter Feiner authored
    When a backing file is opened such that (1) a protocol is directly
    used as the block driver and (2) the block driver has bdrv_file_open,
    bdrv_open_backing_file segfaults. The problem arises because
    bdrv_open_common returns without setting bd->backing_hd->file.
    
    To effect (1), you seem to have to use the -F flag in qemu-img. There
    are several block drivers that satisfy (2), such as "file" and "nbd".
    Here are some concrete examples:
    
        #!/bin/bash
    
        echo Test file format
        ./qemu-img create -f file base.file 1m
        ./qemu-img create -f qcow2 -F file -o backing_file=base.file\
            file-overlay.qcow2
        ./qemu-img convert -O raw file-overlay.qcow2 file-convert.raw
    
        echo Test nbd format
        SOCK=$PWD/nbd.sock
        ./qemu-img create -f raw base.raw 1m
        ./qemu-nbd -t -k $SOCK base.raw &
        trap "kill $!" EXIT
        while ! test -e $SOCK; do sleep 1; done
        ./qemu-img create -f qcow2 -F nbd -o backing_file=nbd:unix:$SOCK\
            nbd-overlay.qcow2
        ./qemu-img convert -O raw nbd-overlay.qcow2 nbd-convert.raw
    
    Without this patch, the two qemu-img convert commands segfault.
    
    This is a regression that was introduced in v1.7 by
    dbecebdd.
    Signed-off-by: default avatarPeter Feiner <peter@gridcentric.ca>
    Reviewed-by: default avatarMax Reitz <mreitz@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    d80ac658
block.c 139 KB