diff options
author | Max Reitz <mreitz@redhat.com> | 2013-10-26 15:44:43 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2013-10-28 17:35:52 +0100 |
commit | 61ed2684539f7f31304e193d7c0e68d57ce6be88 (patch) | |
tree | 611df1028c679cdfc23e4d40dd8acf918c05ae6e /block.c | |
parent | d1f3a23bfac4fe38056ab5e07186939b7be8852b (diff) | |
download | hqemu-61ed2684539f7f31304e193d7c0e68d57ce6be88.zip hqemu-61ed2684539f7f31304e193d7c0e68d57ce6be88.tar.gz |
block: Don't copy backing file name on error
bdrv_open_backing_file() tries to copy the backing file name using
pstrcpy directly after calling bdrv_open() to open the backing file
without checking whether that was actually successful. If it was not,
ps->backing_hd->file will probably be NULL and qemu will crash.
Fix this by moving pstrcpy after checking whether bdrv_open() succeeded.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
Reviewed-by: Amos Kong <kongjianjun@gmail.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block.c')
-rw-r--r-- | block.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -1004,8 +1004,6 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) ret = bdrv_open(bs->backing_hd, *backing_filename ? backing_filename : NULL, options, back_flags, back_drv, &local_err); - pstrcpy(bs->backing_file, sizeof(bs->backing_file), - bs->backing_hd->file->filename); if (ret < 0) { bdrv_unref(bs->backing_hd); bs->backing_hd = NULL; @@ -1013,6 +1011,8 @@ int bdrv_open_backing_file(BlockDriverState *bs, QDict *options, Error **errp) error_propagate(errp, local_err); return ret; } + pstrcpy(bs->backing_file, sizeof(bs->backing_file), + bs->backing_hd->file->filename); return 0; } |