|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1] libxl: fix crash in helper_done due to uninitialized data
Olaf Hering writes ("[PATCH v1] libxl: fix crash in helper_done due to
uninitialized data"):
> A crash in helper_done, called from libxl_domain_suspend, was reported,
> triggered by 'virsh migrate --live xen+ssh://host':
...
> This is triggered by a failed poll, the actual error was:
>
> libxl_aoutils.c:328:datacopier_writable: unexpected poll event 0x1c on fd 37
> (should be POLLOUT) writing libxc header during copy of save v2 stream
>
> In this case revents in datacopier_writable is POLLHUP|POLLERR|POLLOUT,
> which triggers datacopier_callback. In helper_done,
> shs->completion_callback is still zero. libxl__xc_domain_save fills
> dss.sws.shs. But that function is only called after stream_header_done.
> Any error before that will leave dss partly uninitialized.
Thanks for the diagnosis. And sorry for the inconvenience of this
bug.
> Fix this crash by checking if ->completion_callback is valid.
But I don't think this fix is right. The bug is that
libxl__save_helper_abort is called on a blank shs. (You say
"uninitialised" but actually this is all zeroed at some point, so it
it's not reading uninitialised memory.)
I think it is in fact a bug that this error path
if (!stream->rc && rc) {
/* First reported failure. Tear everything down. */
stream->rc = rc;
stream->sync_teardown = true;
libxl__stream_read_abort(egc, stream, rc);
libxl__save_helper_abort(egc, &stream->shs);
libxl__conversion_helper_abort(egc, &stream->chs, rc);
stream->sync_teardown = false;
}
calls libxl__save_helper_abort when it hasn't ever called anything
other than libxl__save_helper_init. Because _abort naturally wants to
call the failure callback.
I suggest that we add a check for _inuse to this bit of
check_all_finished.
Ross and Andrew, you wrote much of this stream read stuff, what do you
think ?
Part of the difficulty is that the possible states and transitions of
a libxl__save_helper_state are not formatlly documented. That's my
fault - sorry.
Thanks,
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |