From nobody Fri May 17 05:00:07 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=suse.de ARC-Seal: i=1; a=rsa-sha256; t=1690835655; cv=none; d=zohomail.com; s=zohoarc; b=LBBUpJESCQanC2APWFGb1GPb51A5+DiWHm+LLPZApsDwYjUzjQNjJoUQDUJWV6w2e1CLzS7rW/2mL/0WkOF/deZQfJB68LJf1zV28yTnFVghBTszURFJkw6g+Dpd5bVqlElzkFGHFu4sOCc5fLz/oPn9QjV+WIyYWt1A2I5TqJQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1690835655; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=20eFLenmoW0+o661qoG3HDBmX3kqoKWYYb2zPqPTErs=; b=oCXwShGu6U3zc2WXTflsZUpriBpILB3ZHF6Y6Ccmq7m+qOA0YwvZr/9GOjYA21Ti8Zo4Z77cOvMfWlGONOxg++zH0FPhui3A2gm9FBz3taoi3f7cnPl9eLrGPjS9z0KH/MnJba8fKmJHUHQJjWVqn24NpfGQtbYogFFjAoIwir8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1690835655513979.1715148906237; Mon, 31 Jul 2023 13:34:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qQZaO-0000OZ-Es; Mon, 31 Jul 2023 16:33:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qQZaM-0000OC-FX; Mon, 31 Jul 2023 16:33:46 -0400 Received: from smtp-out2.suse.de ([195.135.220.29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qQZaK-0007U7-QD; Mon, 31 Jul 2023 16:33:46 -0400 Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id A52451FD66; Mon, 31 Jul 2023 20:33:42 +0000 (UTC) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id AF6C21322C; Mon, 31 Jul 2023 20:33:40 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id HaABHqQayGSFegAAMHmgww (envelope-from ); Mon, 31 Jul 2023 20:33:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1690835622; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=20eFLenmoW0+o661qoG3HDBmX3kqoKWYYb2zPqPTErs=; b=fGyp4eHLX/qQIu+oXpN8NwSN4h7j0jG6PuA84BLyeeC1oMWVSXqu8wmwcyTdKzRATQfpmA nhu/f77cfQyl/d2xALd0XdurksyQ0cN3T72ubMdMLMbzz6ssavLYPO1/mAlFOA75shbXlv 7aILUxJsqa7MOO35oz6N0zOvhZzOIBc= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1690835622; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=20eFLenmoW0+o661qoG3HDBmX3kqoKWYYb2zPqPTErs=; b=4gw3novSFPrRmT8xu+IQ/3K/AJ5FoDn8+vjjza9nqiW5O4XAedgj6fG7orEtzlRh3yA/Qb b3WQMINiRxEskhBQ== From: Fabiano Rosas To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, Stefan Hajnoczi , Fam Zheng , Juan Quintela , Peter Xu , Leonardo Bras Subject: [PATCH] block-migration: Ensure we don't crash during migration cleanup Date: Mon, 31 Jul 2023 17:33:38 -0300 Message-Id: <20230731203338.27581-1-farosas@suse.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=195.135.220.29; envelope-from=farosas@suse.de; helo=smtp-out2.suse.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @suse.de) X-ZM-MESSAGEID: 1690835657089100001 Content-Type: text/plain; charset="utf-8" We can fail the blk_insert_bs() at init_blk_migration(), leaving the BlkMigDevState without a dirty_bitmap and BlockDriverState. Account for the possibly missing elements when doing cleanup. Fix the following crashes: Thread 1 "qemu-system-x86" received signal SIGSEGV, Segmentation fault. 0x0000555555ec83ef in bdrv_release_dirty_bitmap (bitmap=3D0x0) at ../block/= dirty-bitmap.c:359 359 BlockDriverState *bs =3D bitmap->bs; #0 0x0000555555ec83ef in bdrv_release_dirty_bitmap (bitmap=3D0x0) at ../b= lock/dirty-bitmap.c:359 #1 0x0000555555bba331 in unset_dirty_tracking () at ../migration/block.c:= 371 #2 0x0000555555bbad98 in block_migration_cleanup_bmds () at ../migration/= block.c:681 Thread 1 "qemu-system-x86" received signal SIGSEGV, Segmentation fault. 0x0000555555e971ff in bdrv_op_unblock (bs=3D0x0, op=3DBLOCK_OP_TYPE_BACKUP_= SOURCE, reason=3D0x0) at ../block.c:7073 7073 QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) { #0 0x0000555555e971ff in bdrv_op_unblock (bs=3D0x0, op=3DBLOCK_OP_TYPE_BA= CKUP_SOURCE, reason=3D0x0) at ../block.c:7073 #1 0x0000555555e9734a in bdrv_op_unblock_all (bs=3D0x0, reason=3D0x0) at = ../block.c:7095 #2 0x0000555555bbae13 in block_migration_cleanup_bmds () at ../migration/= block.c:690 Signed-off-by: Fabiano Rosas --- migration/block.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/migration/block.c b/migration/block.c index b9580a6c7e..86c2256a2b 100644 --- a/migration/block.c +++ b/migration/block.c @@ -368,7 +368,9 @@ static void unset_dirty_tracking(void) BlkMigDevState *bmds; =20 QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) { - bdrv_release_dirty_bitmap(bmds->dirty_bitmap); + if (bmds->dirty_bitmap) { + bdrv_release_dirty_bitmap(bmds->dirty_bitmap); + } } } =20 @@ -676,13 +678,18 @@ static int64_t get_remaining_dirty(void) static void block_migration_cleanup_bmds(void) { BlkMigDevState *bmds; + BlockDriverState *bs; AioContext *ctx; =20 unset_dirty_tracking(); =20 while ((bmds =3D QSIMPLEQ_FIRST(&block_mig_state.bmds_list)) !=3D NULL= ) { QSIMPLEQ_REMOVE_HEAD(&block_mig_state.bmds_list, entry); - bdrv_op_unblock_all(blk_bs(bmds->blk), bmds->blocker); + + bs =3D blk_bs(bmds->blk); + if (bs) { + bdrv_op_unblock_all(bs, bmds->blocker); + } error_free(bmds->blocker); =20 /* Save ctx, because bmds->blk can disappear during blk_unref. */ --=20 2.35.3