The code that tries to reopen a BlockDriverState in stream_start()
when the creation of a new block job fails crashes because it attempts
to dereference a pointer that is known to be NULL.
This is a regression introduced in a170a91fd3eab6155da39e740381867e,
likely because the code was copied from stream_complete().
Signed-off-by: Alberto Garcia <berto@igalia.com>
---
block/stream.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/block/stream.c b/block/stream.c
index 0113710845..52d329f5c6 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -280,6 +280,6 @@ void stream_start(const char *job_id, BlockDriverState *bs,
fail:
if (orig_bs_flags != bdrv_get_flags(bs)) {
- bdrv_reopen(bs, s->bs_flags, NULL);
+ bdrv_reopen(bs, orig_bs_flags, NULL);
}
}
--
2.11.0
Am 15.05.2017 um 11:34 hat Alberto Garcia geschrieben: > The code that tries to reopen a BlockDriverState in stream_start() > when the creation of a new block job fails crashes because it attempts > to dereference a pointer that is known to be NULL. > > This is a regression introduced in a170a91fd3eab6155da39e740381867e, > likely because the code was copied from stream_complete(). > > Signed-off-by: Alberto Garcia <berto@igalia.com> Cc: qemu-stable@nongnu.org Thanks, applied to the block branch. Kevin
On Mon, May 15, 2017 at 12:34:24PM +0300, Alberto Garcia wrote: > The code that tries to reopen a BlockDriverState in stream_start() > when the creation of a new block job fails crashes because it attempts > to dereference a pointer that is known to be NULL. > > This is a regression introduced in a170a91fd3eab6155da39e740381867e, > likely because the code was copied from stream_complete(). > > Signed-off-by: Alberto Garcia <berto@igalia.com> > --- > block/stream.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/block/stream.c b/block/stream.c > index 0113710845..52d329f5c6 100644 > --- a/block/stream.c > +++ b/block/stream.c > @@ -280,6 +280,6 @@ void stream_start(const char *job_id, BlockDriverState *bs, > > fail: > if (orig_bs_flags != bdrv_get_flags(bs)) { > - bdrv_reopen(bs, s->bs_flags, NULL); > + bdrv_reopen(bs, orig_bs_flags, NULL); Tested-by: Kashyap Chamarthy <kchamart@redhat.com> Yep, this fixes it. It gracefully throws an error when a 'job-id' was not specified: ----------------------------------------------------------------------- (QEMU) block-stream device=#block890 base=disk1.qcow2 { "execute": "block-stream", "arguments": { "device": "#block890", "base": "disk1.qcow2" } } { "error": { "class": "GenericError", "desc": "An explicit job ID is required for this node" } } (QEMU) block-stream device=#block890 base=disk1.qcow2 job-id=job0 { "execute": "block-stream", "arguments": { "device": "#block890", "job-id": "job0", "base": "disk1.qcow2" } } { "return": {} } (QEMU) ----------------------------------------------------------------------- [...] -- /kashyap
© 2016 - 2024 Red Hat, Inc.