From: Paolo Bonzini Date: Tue, 26 Jun 2018 13:39:18 +0000 (+0200) Subject: pr-manager-helper: avoid SIGSEGV when writing to the socket fail X-Git-Tag: v3.0.0-rc0~48^2~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aad10040d411d21542dc9ae58a2854c89ccedd78;p=thirdparty%2Fqemu.git pr-manager-helper: avoid SIGSEGV when writing to the socket fail When writing to the qemu-pr-helper socket failed, the persistent reservation manager was correctly disconnecting the socket, but it did not clear pr_mgr->ioc. So the rest of the code did not know that the socket had been disconnected, accessed pr_mgr->ioc and happily caused a crash. To reproduce, it is enough to stop qemu-pr-helper between QEMU startup and executing e.g. sg_persist -k /dev/sdb. Reviewed-by: Michal Privoznik Signed-off-by: Paolo Bonzini --- diff --git a/scsi/pr-manager-helper.c b/scsi/pr-manager-helper.c index 82ff6b6123c..0c0fe389b75 100644 --- a/scsi/pr-manager-helper.c +++ b/scsi/pr-manager-helper.c @@ -71,6 +71,7 @@ static int pr_manager_helper_write(PRManagerHelper *pr_mgr, if (n_written <= 0) { assert(n_written != QIO_CHANNEL_ERR_BLOCK); object_unref(OBJECT(pr_mgr->ioc)); + pr_mgr->ioc = NULL; return n_written < 0 ? -EINVAL : 0; }