From: Xu Wang <cngesa...@gmail.com> Backing file loop should be checked before calling change_backing_ file(). If loop appeared, this calling should be stopped and an error was printed.
Signed-off-by: Xu Wang <cngesa...@gmail.com> --- block.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/block.c b/block.c index 8bb63c2..a14488f 100644 --- a/block.c +++ b/block.c @@ -1963,6 +1963,13 @@ int bdrv_change_backing_file(BlockDriverState *bs, return -EINVAL; } + /* Check if loop exists in backing files chain after changed */ + if (bdrv_backing_file_loop_check(bs->filename, + bs->drv ? bs->drv->format_name : NULL, + backing_file, backing_fmt)) { + return -EIO; + } + if (drv->bdrv_change_backing_file != NULL) { ret = drv->bdrv_change_backing_file(bs, backing_file, backing_fmt); } else { -- 1.8.1.4