diff --git a/block/qcow2.c b/block/qcow2.c index 0e53a4d..f8f388f 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -1118,9 +1118,8 @@ static int qcow2_open(BlockDriverState *bs, QDict *options, int flags, len = header.backing_file_size; if (len > MIN(1023, s->cluster_size - header.backing_file_offset) || len >= sizeof(bs->backing_file)) { - error_setg(errp, "Backing file name too long"); - ret = -EINVAL; - goto fail; + error_report("Backing file too long... truncating for unsafe rebase\n"); + len = 1023; } ret = bdrv_pread(bs->file, header.backing_file_offset, bs->backing_file, len); diff --git a/qemu-img.c b/qemu-img.c index 02c07b9..69de2e6 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -2879,6 +2879,9 @@ static int img_rebase(int argc, char **argv) } } + if (unsafe != 1) + error_exit("This version of qemu-img only supports unsafe rebase (-u)\n"); + if (quiet) { progress = 0; } @@ -4217,6 +4220,13 @@ int main(int argc, char **argv) trace_init_file(trace_file); qemu_set_log(LOG_TRACE); + error_report("WARNING: This is a modified qemu-img to be used for fixing images\n" + "with backing files that are too long. Do NOT use for any other\n" + "purpose.\n"); + + if (strcmp(cmdname, "rebase")) + error_exit("This patched version of qemu-img only supports 'rebase'"); + /* find the command */ for (cmd = img_cmds; cmd->name != NULL; cmd++) { if (!strcmp(cmdname, cmd->name)) {