From nobody Sun May 5 19:51:29 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616745019; cv=none; d=zohomail.com; s=zohoarc; b=OsrDGYzJ8zPg3cjiOm90BfFzCO92TTpYd1ZShcWillzJOjEm84NHN1yJoLX6lLdbGCqre4oJoAf7aJO51+pCEPaDz0y1KMf4Asrmbz0QsKMNM31hBHGlThKIf03AwYJPCbFS/jWuL9CrOl4MbF0t0UBHs+FMdNdl3HFlOxtM7tY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616745019; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TY+K2Z6UQGEQnrSZ/O8MP/AGcvjwSuqRJTajs92tYy0=; b=icyDf/jKlSKK8GmX6jGepWGmsTX7qMIZ0jhqFi/bpNjVueql49iOC9z70x06fOO2b0fmjukEmnmPWRYliuz95b6Pz+xDcCgOqUG5C/x8nvXFJ4t/XbkCmyaeQWSm3HKv1xICoGc+xFjNgm/xXnZAPMbDzHaKnBhdCkv2d9CNOBI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161674501981918.596037792280185; Fri, 26 Mar 2021 00:50:19 -0700 (PDT) Received: from localhost ([::1]:44126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lPhEY-0003v3-Qi for importer@patchew.org; Fri, 26 Mar 2021 03:50:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53896) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhDF-0002cR-1Z for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:48:57 -0400 Received: from mout.web.de ([212.227.15.3]:39735) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhD8-0002WP-Rj for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:48:56 -0400 Received: from gecko.fritz.box ([89.247.255.242]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MeUbo-1lxeyv41hs-00aXha; Fri, 26 Mar 2021 08:48:46 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616744926; bh=dn5JnxLD03A1MjGbpLQHn5ts0L4MXedl8j8wX6j74LA=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=AGtjUAfX/PGKmfY/Kyrmi409LKaHufQUUvcdP9iRm6SGqNEluhL8/4HTtFKHiPu3l kCju/nHdHQc7PJMEEYneefMFUXfvAs0lqESNg80Wd/4O5hma5fyM7A/LxMUduO5fMn D1vh8qPWuK9FnIJlttWcTHB8/cuPSzNQ4x7biSmE= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Fri, 26 Mar 2021 08:48:44 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v4 1/4] chardev/char.c: Move object_property_try_add_child out of chardev_new Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/WJKqvMtKKuUFIjgy.xfvcxc"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:AU2Rgykes3wSvIiBmIVH62grL5Wq+sRy75PwqFtai42H82ywmzA IMVhHsWvGJD2jj7eo/IQo/9GA7wIxfsWjIztVD0zhblOeA+qs47iLeL18Qc/nSNYUlBpCX3 +PPb5JfxsxFsp/qn7E66WG7z3Eq51nhH8unbS6klH/sSBi+ycKGhbAkGF8U4kEjBcCU0pbl NaPOPIJRKEotvd5EMj2Uw== X-UI-Out-Filterresults: notjunk:1;V03:K0:SkUsXfJL4k0=:YHzGQgB0dlUDlHQDn1kZCn ZRtsRr46QCHXq6VmGYapiMC5XwRd7ZArLYdiC2/pnaS6+dywRtA3mww7MWdnWYAzW3za6Io1z KI+yNzdB4w3ALMSJiBgb0Z3X5tPVHNMjHwkIbiCxfOy5KFbcK6ucWdOz00M5EuUxesINZvJzu CSevNahWJd6grlWa3R36Mih3okPXQpjuSePdPCcz3BNkDMYf39t2An/uHt0dmpGa4sGwuUs0r u6fGyR6YYD/MnpD50683TnTA0ZhfNma69Tsi+pi2+ekNgCN1qCSW8un04S8m/KYcEMDP58o/I 341dOoyeYd1N1IlvLWp30voeyCehZMgQCQdByq/DY93KBW3QiB/HPhk0I1vAa4ySedbvT7CW5 ScgNx7kTj+kb7y6lY7U4eIr/cUQO4r5NndGRCfCWuoAYgvDx0a28WpNKPvwwiu/Neftlharbu +YR/yFyZSNs02vEuHtOEHd2rgj/FuxIzYj5t6d56O/z5CIyJrOslwwT1UDUgdhaPcmSsIHFqg 0uiQ/5zfdkdscmwXgYOoUjjGght5BJ3KCYsgMfQ8jyklWvqQhZoIw0adRYQhLpWeF0IaTrVqM FMXotRHNkmjihRYvzS+QHPp57FfRgBenBtWOkHOzikAGQBzc5hTOrPREGpW7i+IQF2588R7rZ 6ZKlXF+PeXWrbFJZdUzkCmUvqQMFoG2Jaolz5mK8KYQHlGYXtuzOc3RRGwhe0dJEYJ4ebiyOr youWNY4mKkWn1hTLUz/TQqazCOJ3h7GXOfDkJvJkfKnKOYATSgxpObW6+qR9PsCFan0ndA66X 9ZcZClFQGZcPg9tfFkecodN2xKKWwIfAJw62JID2o8uByM2xOBf7UF2xsSfA2p71pVfws0b8D Y6Ef543vQr9x/qwJFgO+4W9w5WUl2aFRJsJfa1cj+gHitCUHG2b19d5vPAlvb3nUzyFyXXGER 1NjWVKDlSVFYC85KROTgpUiGYbrE6v+cTI0XoceZQuktQSwFzBNXZS9YVtI7Xr58IHaldwbRy XTpGXTTZwwkxM5zpp3why/ao4LAdUnuCXCGlpxfXlKVlOD0UrBQuUye/3d1O+UVEYkFegXGLG eQzGj4aCjU6Ksh3AMSGOB85tPLyq7jjR7b71FAgBDxxJqGkIxHwIfOkIhx0KqBTUlJ78ohDlL Kr13g+jvUTYxMN3qAxJvPNEat8PsH3oE8KwzIgmWnz7lfd7lqh3BfcvDr9/ldKVgX2OB4= 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=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/WJKqvMtKKuUFIjgy.xfvcxc Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Move object_property_try_add_child out of chardev_new into it's callers. This is a preparation for the next patches to fix yank with the chardev-change case. Signed-off-by: Lukas Straub Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Li Zhang --- chardev/char.c | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 140d6d9d36..48f321b3e1 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -975,7 +975,9 @@ static Chardev *chardev_new(const char *id, const char = *typename, qemu_char_open(chr, backend, &be_opened, &local_err); if (local_err) { - goto end; + error_propagate(errp, local_err); + object_unref(obj); + return NULL; } if (!chr->filename) { @@ -985,22 +987,6 @@ static Chardev *chardev_new(const char *id, const char= *typename, qemu_chr_be_event(chr, CHR_EVENT_OPENED); } - if (id) { - object_property_try_add_child(get_chardevs_root(), id, obj, - &local_err); - if (local_err) { - goto end; - } - object_unref(obj); - } - -end: - if (local_err) { - error_propagate(errp, local_err); - object_unref(obj); - return NULL; - } - return chr; } @@ -1009,6 +995,7 @@ Chardev *qemu_chardev_new(const char *id, const char *= typename, GMainContext *gcontext, Error **errp) { + Chardev *chr; g_autofree char *genid =3D NULL; if (!id) { @@ -1016,7 +1003,19 @@ Chardev *qemu_chardev_new(const char *id, const char= *typename, id =3D genid; } - return chardev_new(id, typename, backend, gcontext, errp); + chr =3D chardev_new(id, typename, backend, gcontext, errp); + if (!chr) { + return NULL; + } + + if (!object_property_try_add_child(get_chardevs_root(), id, OBJECT(chr= ), + errp)) { + object_unref(OBJECT(chr)); + return NULL; + } + object_unref(OBJECT(chr)); + + return chr; } ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend, @@ -1037,6 +1036,13 @@ ChardevReturn *qmp_chardev_add(const char *id, Chard= evBackend *backend, return NULL; } + if (!object_property_try_add_child(get_chardevs_root(), id, OBJECT(chr= ), + errp)) { + object_unref(OBJECT(chr)); + return NULL; + } + object_unref(OBJECT(chr)); + ret =3D g_new0(ChardevReturn, 1); if (CHARDEV_IS_PTY(chr)) { ret->pty =3D g_strdup(chr->filename + 4); -- 2.30.2 --Sig_/WJKqvMtKKuUFIjgy.xfvcxc Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBdkdwACgkQNasLKJxd slgybxAAoJNgJmM0TQjJsq/qWPEYXrmfo8/sPWYtn1mgM3Pr0UIqakhrMzlMZ2I+ TcFW0KdUNnLbdyqL8SnAPinyKBabu6ZSSr5A+vYhmUu41GX9l0mshAc2drWWGudj HMCRCjL6CGL1Pbe5+AyUrhE+mHj+6VM+zHlXfJTSySCfeJsxWg6yvX5KwUHvCq8B V9zHvsqX216WWT/uCKwCDGkLUYJGTxyn9bmd8MkuxRqmR+DkHFlCR0upLaoRWngZ PjJrY6p37jsNacXJXUHgjCyQmmT/OtUzkhkJPzHJ7A16pInpI8leK9Sopc13XRVf sU+ruI0C8Z66+HLoWTHnt6anKl8aMZZjBSU1CjZkQ/89p7T94VW3r2ydzXJs6pM8 WxlJc4Va3lw82NIXATrXDlu0ABcEMU7DewGkGbiF0tUTeqezB+vXSOdBxSzXqNOj wfCrTO8jMDG9DJIO4FqScLgLKk4UKQ3DFXAgRdyetkaPVMOsDtSHbDiUgYCWkXo7 5GkHvzNlK5lYIYSDJzgaq/iZ7e1s8+7Cp7/58WORytYf+kEbN6hZ/q9J0e8tlySK /52VQCVGTnBQtPPBsrkAzdMUPnUG2FkSRKA12N3NcX9aTMa+BNlgMJ+uMylnKvR7 NMYYzX8Xc0AJVi9WWEHUXxaleLmde06liWAKMtwrTX9fTQp3hKk= =VW/2 -----END PGP SIGNATURE----- --Sig_/WJKqvMtKKuUFIjgy.xfvcxc-- From nobody Sun May 5 19:51:29 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616745020; cv=none; d=zohomail.com; s=zohoarc; b=Nz1JvquBWz+xgae5fE5DVmqbfzqFgC4rrmc2LWwTPaa1nua8KMzdA+tYgP47KFDyTkYjzzXeM+y7fdzpmyghd/MaE51vfiWsVTVyq0ncCL9d3XM3UEyfArBXH0DWODc+6E9fiCExuSk7Ylkig9OU/ew3XSTxZF1W9ti/2uFUY78= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616745020; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=V7X/X8BmnIZ0h3WIdOXgDbdcmc9rQTuNS02sMdoBp1c=; b=SOldnRLEyGsajtxQG1b51PFHsZ4HcesObgiFqGFIv6XtHB+o+/cGoEmjCnqojpHV01AcgKuY7vH2GGeVmcs3z92yMS1eLkIWbR1pzRFzfVTSK0yxJhrxykAopRLSdKK2Kwp/lDRoRy4GllWXmtzUAWQ9j+MU8zS4VEOZIqaN0Cw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616745020364258.691100574042; Fri, 26 Mar 2021 00:50:20 -0700 (PDT) Received: from localhost ([::1]:44162 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lPhEZ-0003vq-B8 for importer@patchew.org; Fri, 26 Mar 2021 03:50:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhDF-0002dU-Us for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:48:57 -0400 Received: from mout.web.de ([212.227.15.3]:50581) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhDE-0002Y5-7x for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:48:57 -0400 Received: from gecko.fritz.box ([89.247.255.242]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N2jWK-1lmlvp2JRc-013OFD; Fri, 26 Mar 2021 08:48:49 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616744929; bh=4vX8JCGCMY7S2JtCPus/wvHvOi2j74VvUfJZWFN3jWg=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=hHmu9iJHuyGCRdRtebyNu6Ejf4YXHqCBguuWX76yY87Y1yEbbTRQvAGHF5JtoE/W4 cy/otl+o9fmcE6L4eZJWw2TbiUJrTeTOVdhwLE8pJiGVtRH3TKBD6W3skqsXaZEYOq x7dQyAbBoaV3BSWwhbpzK+QYx8mPjIxBM04or6PI= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Fri, 26 Mar 2021 08:48:48 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v4 2/4] chardev/char.c: Always pass id to chardev_new Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/jME3=8t/cYJO41nAuLhwJR6"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:wgzPgc5fHJSuoXxxAYRfFfrBsWYGAUo6ceF/vpu5fA10ucmdGdx QM/xy58hzfTecIQaIcqJ9QEjRJfEa4MExpcmn6IoJdBoRU9Qsw4HrqJ4oepAALq/OfWD/ZD +V9SIF04Zq2uImX4BCx9P9ITjL27k/MxC1CG6H7tb1fjhQH//TOQpzpFg+7D+004QGlh+hy CxFS3ixANi1DEeBW8vkXw== X-UI-Out-Filterresults: notjunk:1;V03:K0:87sKQuITj8w=:R5UUYHBMWf8pdG0G1uYwWT UL6WuORD7a9fT4wpOiI9T/tKVp5GYTg9x8Ou6+ktxWFaB9urSh9cNCxUBZcN7iF7Rr/e1baV5 TFkGm7ebuX5E2yDm2UnMuZN7IeB++VoWHfAfc1jt5s3VlfBR2TVJG+YLN0kiROl8Fgww8CmgT naRkoYxf7/oATrJzeeI+UqiMrMfBPJz9OSQcHmQJEsfPrzmSWgYnxFCGg/ZaTmmcjD+5B2YgV SC90lypaqRCUgLgDPlywGZcCi9Mle6fcRgr3Jky/WdcwvfmSeEvqJmzFP839LpgcSlhj/7Q3o gG3ac9GAPFIXwNxbcJK6LXqfC9xlkfjNSeQ/JKDXMZe0V0lFUb+PoiFaJ2d9gZmlQxRYBs8rc P6bchzPjdFw+J+PV2i3K7neU/QkAHCux9oflQ8p+LnQNe9Eul7kunO/sgcJBOUCrMW4PTICYK YmDyCM/GFuDsEalE0OEr5xb+IccrX5PYFtoaCjvLMjDBljxi5De58/C33dhqjXZlnJr2P2OO8 XsKd0jCfZ/Nx5nXH7mFGmnx5a/0NHs02cLrOSwbRN3NOVbD8ovT5DUan0J7mIEaGsFUqvaWp1 Cl0ySkMP6N+CH6dspTEaHZSLQarp+1+WlGQ10BGoS9r4UupnD872jrX4Ed7SRRdUT88u8MRx3 0XHmtldCL9olJsntuG9lkN5DgD7wsKclFwNKBYEcuo+7damofRGD/nINRB9CvlO9gsb7NlHA1 tlPSO4COfA/cq70K5LhcBrILgoUDNZ/y7bDDYJpQhI3lqSu3v3/w0DDySbEHN0S/DY+Ty0kfc eD9rIOU3Ug0w9b6rDYDqkb/c5odvehHGq2BJ3/NPEhM/SIXvuoRO5EivvaeUIEQrvFAwnMgQu AJ1sAbCeKlxzs0/KwyfQxHYBHLzrPAqPYtoJIsglIpPwrxE5CacXk/QiDUCJF+VqVjuzQNB8X 7WqdNTCZLr98APEMNoI1BWHeC0mmdrRUIhdys70hyyXeDAcQSsR73e/Dwe8FY9djqGFO3E+RW nXbyCHmq21Wu+x+4yVo15Gdfmk/BZllPMCySQaySDQ2LWqaAcJ96DHMynYoBrwvX9wyk38QJt 4e93C74Ml7YmakHkbYX3qXHxCSWl8xnYgqr0lX7K/F39DMihX4iwcJ0SuxnWyL9v5wXLXtCCq Te6V0PK+n7SBNBPgDn8uVPpuPN/+SX7ECDrGXtQ+aWZ5CXFcV+bUGizCwnDJAACmA1CYI= 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=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/jME3=8t/cYJO41nAuLhwJR6 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Always pass the id to chardev_new, since it is needed to register the yank instance for the chardev. Also, after checking that nothing calls chardev_new with id=3DNULL, assert() that id!=3DNULL. This fixes a crash when using chardev-change to change a chardev to chardev-socket, which attempts to register a yank instance. This in turn tries to dereference the NULL-pointer. Signed-off-by: Lukas Straub Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Li Zhang --- chardev/char.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 48f321b3e1..75993f903f 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -967,6 +967,7 @@ static Chardev *chardev_new(const char *id, const char = *typename, bool be_opened =3D true; assert(g_str_has_prefix(typename, "chardev-")); + assert(id); obj =3D object_new(typename); chr =3D CHARDEV(obj); @@ -1095,12 +1096,11 @@ ChardevReturn *qmp_chardev_change(const char *id, C= hardevBackend *backend, return NULL; } - chr_new =3D chardev_new(NULL, object_class_get_name(OBJECT_CLASS(cc)), + chr_new =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), backend, chr->gcontext, errp); if (!chr_new) { return NULL; } - chr_new->label =3D g_strdup(id); if (chr->be_open && !chr_new->be_open) { qemu_chr_be_event(chr, CHR_EVENT_CLOSED); -- 2.30.2 --Sig_/jME3=8t/cYJO41nAuLhwJR6 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBdkeAACgkQNasLKJxd slgjQA//Q4o+vYl1OosRLhxwYH4oMPtzwxTUXS+iqsmIadcUe5lWAR18ZQeAHmcI 0thckZqfGhCyaL40k/YUCnN0vhAOEyFjKOVivtAvzr3uCQUKz+hcfRbrVGsesJth FWZ59N0xU0tLZye5ZkLflsMBsdoYVyEeSoGDNgcmDy3TxZbfHZOdNOtQsW1pC7CO K0MwXfc9borejevK5zKrDc5TesPcQdCEICyeqyVQe8J+vQz+mOZSbC/zZv5OEm74 ThgY+FxqDLZzOlDzumFKySPhxi2O1H7+9IsF4AJim4ob+fFTs4YgnWnyFKznyPhS r5L3AKMplMoVIStfc7B1G8V6XiYBRI5VcFCd4jdn47+TrgD26HlmYwQNvVgBGBzh xEV5yakdUYXuuXT+d0ouvRMp3vt42Pscvst+ZZXd2SU1DwHYX2Py7gmICnRyxa3K MUstQmEdbZy7WVpoxarHHuy1m0VMpeBWNjGZQ5EPDMkslrD5k70RjH3wUK73vYRo mRUl3VNaeQV28Ue8Ae/xY7s1BM6o5AtdOsKlUZ/8VXyINxMOjN+pqsRokFxf8tH1 nbfFhE80RaD6thmYnmuA1JqXe5Sjx3ZOlk5JSyebYStWhSWv3sP1fMhjoQH0qKZK k79nzkNItmwnczvsh5MKX8mRt2SqzGor5bpLFuEcS2CibNm40ew= =xhet -----END PGP SIGNATURE----- --Sig_/jME3=8t/cYJO41nAuLhwJR6-- From nobody Sun May 5 19:51:29 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616745218; cv=none; d=zohomail.com; s=zohoarc; b=caKTglzm564yzlGikgfY16P20XphpjeC6gmCiBinosW70Fxyxjqv45ZUT4l20wTQhHouTalBy21/zMW3A6Aa6MrFC8W+sRqsN4tHqXZe8GMiJFO2W0y0xx123IvuL76pYe5nl2nY6OruiGHUxEkffnW8pNADvZSeAKILiaYVaHc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616745218; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7w8MGDm1I2PvUY72Ld0mcxkq7fXxQnTjV87vvr9ISkk=; b=mQhRhxy666XfnT1YjOLkZqAl+SxNFofu9L3Enoq3nx35RNBceZKwgJJPILtQZ3RwLdFLX0uJmq8AUsksmImRaAdQHe+ZO1bQlGG8aODA3k68EhmqxjAm9uBKtMgw5QXVhlCOWFjj1g/Jy/AjfXbaqJdJlCJkLJicDNoNvqTKKdk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616745218852518.3594167618462; Fri, 26 Mar 2021 00:53:38 -0700 (PDT) Received: from localhost ([::1]:52874 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lPhHl-0007ZP-MX for importer@patchew.org; Fri, 26 Mar 2021 03:53:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53922) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhDI-0002hS-LS for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:49:00 -0400 Received: from mout.web.de ([212.227.15.14]:34079) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhDG-0002a5-DA for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:49:00 -0400 Received: from gecko.fritz.box ([89.247.255.242]) by smtp.web.de (mrweb003 [213.165.67.108]) with ESMTPSA (Nemesis) id 0M8zRF-1lUxzt3LC9-00CTI4; Fri, 26 Mar 2021 08:48:52 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616744933; bh=tc4nSX2K/imwhglfrGy7FYN+BVhiobPCL8qKCjYXJjo=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=cwgxOv9UDI5wKtbup5aFMkSa+Zumyb6ZVMgDZ2EUHZo2gRx2eHLhToFXoE8z/cc+n eNr31BzbRvVuA9MyRvQOdPOXYT66zKKuSg+JFtS2RFn6nItgIpzOMwi66qr6ED7jFL uJ0zWvTnAFE+FYxOpDKzy8OTH7WObmT8kpZi1hV0= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Fri, 26 Mar 2021 08:48:51 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v4 3/4] chardev: Fix yank with the chardev-change case Message-ID: <0b9928d84f1a63b25b668cc1e117772b089c5381.1616744509.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/G0z_KU8Oiymw54vxHI47ZW6"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:nwTzPfZA8Tf2kUIZIVUhcMqcn1SGW7xdwEeWsLg+ya8Q69AhsmD HjRrkSaQ9MYKoOs/wh5edfSwJdYCpXwZPXup50YrQIwlNXGKweaD2kwZHzXbRmJaU5QDpfQ CASCnpS463b9Z/obAiANB9KLEHe1Ms66HAwifapy/ZB3HD+c2jcNo3xs1r3fDIcOe4Yir6J Nz4612tVQdfBfQzAEoLkA== X-UI-Out-Filterresults: notjunk:1;V03:K0:79dSHfIF1BI=:oCz75s6VFWfqBPJmM2tUtV vXMuXrotCtJLOFZQMJfIwomc0RcJW15Khp8iSLOdPMrIIBd1OupeGC1XUrCPgo1nuwNutNhu9 41YxaNs+aHknEXbfO2tIqf83lvMe76u64llTctOXCTVn4qLOI1Om7sMV6c59gE5UVFGqhArSE g1f7QvOVt7Ni+ud95vHPXyNHpp1ex9nc65wW19Qr07M9+27CmPOMsms3VSvw79VLYDd3AJ9hv Xj49enB6WXz/aaBP9ZC3TVXt16d21DYBVuCT3x9b0pKH8i4tBvJxp3g1cQMX5y0edXpODRZ++ LeGwGvWSanSH6SY9ercej1nSm/bI2paE5wCllyqB4fgrx7QcXTTBxuFopPzYsWc9+DoRk4sSt 2hkAW2rBboTU0tQaeRARV65j/pKlw2HkJubEHBe5AI/cCIwlc2MIXZh/S6lnqB1LdqNY085NI oNQACFd5ZbgMlscJXgpCJXLKDce5oGk815TyO7E/eZTOneRH46kTPvP81vCTgrM5d5kDqVvO5 arbwXUjB1TRBRcwLQ8BvZncwVnajAN2jmZwnRuMfCtupHmAtekM2mm7Vq2sobP9Fu8CsMKc2i rOriixjXfmN9bcEJSonWj0BadwjrNeKp5OOgSlrofhBP0vSst659dWVgGXrXGOqCF78WIKPKd O1KDYm1z1Q/vwVeHy8vdhZG1dyzsVia7QmiCjDn3oh2qtdLwskckTfPfgIXEJtYXURgc0YJtA +A0kBCoCX2lK6f8KzvsSarziYmUNWC48P8/ZV1TitSVLsoHUbUrcSgefFarNLZIh2EIbxzwju /BRkdNXUNwTdDNYpLY+oAU46F2gOMGXKcBw24SqWjIYDBLaVnpp6wf822CsD5kQIVebnW1mml ybyjfRHW/DzevFptxLpsTtBQqsgSmwc6B9rpaOPB+kpdMV9U/mSgwY7xktTQsrg+VpJVBSV6S CGuSPsiwI16tpz/gOe0spWt4K/kzgTjVd/MDWlriwX+pqTs8SdF8n8AiNcFifvmxo9ZOa/1W2 pUj9AoEiOAYyhtjEHz9W/sSdxvcy/qpdiBo0LjK7v3LF9vwv4e+dhHORtM1QlWmWPfv4alqwU 0bckDOkqmjNGpcSQwN4H2dbcZbMsvc2xcOoANlzabfWq9bI7BRHacER+ydG8pTCgl5j2+Vg1f R7Cr0fyp6tVZH1TCe7JuJqPl8qiYDuwm3ng8ngLZ7XzmsI/Z3xnu2YwJb2RWrDI521enU= 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=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/G0z_KU8Oiymw54vxHI47ZW6 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" When changing from chardev-socket (which supports yank) to chardev-socket again, it fails, because the new chardev attempts to register a new yank instance. This in turn fails, as there still is the yank instance from the current chardev. Also, the old chardev shouldn't unregister the yank instance when it is freed. To fix this, now the new chardev only registers a yank instance if the current chardev doesn't support yank and thus hasn't registered one already. Also, when the old chardev is freed, it now only unregisters the yank instance if the new chardev doesn't need it. If the initialization of the new chardev fails, it still has chr->handover_yank_instance set and won't unregister the yank instance when it is freed. s->registered_yank is always true here, as chardev-change only works on user-visible chardevs and those are guraranteed to register a yank instance as they are initialized via chardev_new() qemu_char_open() cc->open() (qmp_chardev_open_socket()). Signed-off-by: Lukas Straub Tested-by: Li Zhang Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-socket.c | 20 +++++++++++++++++--- chardev/char.c | 35 ++++++++++++++++++++++++++++------- include/chardev/char.h | 3 +++ 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 1d455ecca4..daa89fe5d1 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1126,7 +1126,13 @@ static void char_socket_finalize(Object *obj) } g_free(s->tls_authz); if (s->registered_yank) { - yank_unregister_instance(CHARDEV_YANK_INSTANCE(chr->label)); + /* + * In the chardev-change special-case, we shouldn't unregister the= yank + * instance, as it still may be needed. + */ + if (!chr->handover_yank_instance) { + yank_unregister_instance(CHARDEV_YANK_INSTANCE(chr->label)); + } } qemu_chr_be_event(chr, CHR_EVENT_CLOSED); @@ -1424,8 +1430,14 @@ static void qmp_chardev_open_socket(Chardev *chr, qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS); } - if (!yank_register_instance(CHARDEV_YANK_INSTANCE(chr->label), errp)) { - return; + /* + * In the chardev-change special-case, we shouldn't register a new yank + * instance, as there already may be one. + */ + if (!chr->handover_yank_instance) { + if (!yank_register_instance(CHARDEV_YANK_INSTANCE(chr->label), err= p)) { + return; + } } s->registered_yank =3D true; @@ -1567,6 +1579,8 @@ static void char_socket_class_init(ObjectClass *oc, v= oid *data) { ChardevClass *cc =3D CHARDEV_CLASS(oc); + cc->supports_yank =3D true; + cc->parse =3D qemu_chr_parse_socket; cc->open =3D qmp_chardev_open_socket; cc->chr_wait_connected =3D tcp_chr_wait_connected; diff --git a/chardev/char.c b/chardev/char.c index 75993f903f..398f09df19 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -39,6 +39,7 @@ #include "qemu/option.h" #include "qemu/id.h" #include "qemu/coroutine.h" +#include "qemu/yank.h" #include "chardev-internal.h" @@ -266,6 +267,7 @@ static void char_init(Object *obj) { Chardev *chr =3D CHARDEV(obj); + chr->handover_yank_instance =3D false; chr->logfd =3D -1; qemu_mutex_init(&chr->chr_write_lock); @@ -959,6 +961,7 @@ void qemu_chr_set_feature(Chardev *chr, static Chardev *chardev_new(const char *id, const char *typename, ChardevBackend *backend, GMainContext *gcontext, + bool handover_yank_instance, Error **errp) { Object *obj; @@ -971,6 +974,7 @@ static Chardev *chardev_new(const char *id, const char = *typename, obj =3D object_new(typename); chr =3D CHARDEV(obj); + chr->handover_yank_instance =3D handover_yank_instance; chr->label =3D g_strdup(id); chr->gcontext =3D gcontext; @@ -1004,7 +1008,7 @@ Chardev *qemu_chardev_new(const char *id, const char = *typename, id =3D genid; } - chr =3D chardev_new(id, typename, backend, gcontext, errp); + chr =3D chardev_new(id, typename, backend, gcontext, false, errp); if (!chr) { return NULL; } @@ -1032,7 +1036,7 @@ ChardevReturn *qmp_chardev_add(const char *id, Charde= vBackend *backend, } chr =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), - backend, NULL, errp); + backend, NULL, false, errp); if (!chr) { return NULL; } @@ -1057,9 +1061,10 @@ ChardevReturn *qmp_chardev_change(const char *id, Ch= ardevBackend *backend, Error **errp) { CharBackend *be; - const ChardevClass *cc; + const ChardevClass *cc, *cc_new; Chardev *chr, *chr_new; bool closed_sent =3D false; + bool handover_yank_instance; ChardevReturn *ret; chr =3D qemu_chr_find(id); @@ -1091,13 +1096,20 @@ ChardevReturn *qmp_chardev_change(const char *id, C= hardevBackend *backend, return NULL; } - cc =3D char_get_class(ChardevBackendKind_str(backend->type), errp); - if (!cc) { + cc =3D CHARDEV_GET_CLASS(chr); + cc_new =3D char_get_class(ChardevBackendKind_str(backend->type), errp); + if (!cc_new) { return NULL; } - chr_new =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), - backend, chr->gcontext, errp); + /* + * The new chardev should not register a yank instance if the current + * chardev has registered one already. + */ + handover_yank_instance =3D cc->supports_yank && cc_new->supports_yank; + + chr_new =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc_new)= ), + backend, chr->gcontext, handover_yank_instance, = errp); if (!chr_new) { return NULL; } @@ -1121,6 +1133,15 @@ ChardevReturn *qmp_chardev_change(const char *id, Ch= ardevBackend *backend, return NULL; } + /* change successfull, clean up */ + chr_new->handover_yank_instance =3D false; + + /* + * When the old chardev is freed, it should not unregister the yank + * instance if the new chardev needs it. + */ + chr->handover_yank_instance =3D handover_yank_instance; + object_unparent(OBJECT(chr)); object_property_add_child(get_chardevs_root(), chr_new->label, OBJECT(chr_new)); diff --git a/include/chardev/char.h b/include/chardev/char.h index 4181a2784a..7c0444f90d 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -65,6 +65,8 @@ struct Chardev { char *filename; int logfd; int be_open; + /* used to coordinate the chardev-change special-case: */ + bool handover_yank_instance; GSource *gsource; GMainContext *gcontext; DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST); @@ -251,6 +253,7 @@ struct ChardevClass { ObjectClass parent_class; bool internal; /* TODO: eventually use TYPE_USER_CREATABLE */ + bool supports_yank; void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp); void (*open)(Chardev *chr, ChardevBackend *backend, -- 2.30.2 --Sig_/G0z_KU8Oiymw54vxHI47ZW6 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBdkeMACgkQNasLKJxd sljQXg/+P9f28XMaIhh+jNUeTGCDPP37Rh6srV3pH7JqcRPPdW6IkBzlxCXVo+g2 bhpPV7WJnEo2lhk/F3Rq43fjfo/w0S43YPDfruuSn8I53QGN0J28MUjNAyxZ8MN9 TuFwo8b4qYo6vk8GFvABEA6wzL8xf04HqWUiU98NFl3SgffHGuIXn44awf1aVDdl n4+P/hZYEHyHTjRzT8X5xqoHVdKQtq8kufBOWAVPFMrXqv7vjmp8BraznImrSYXm 4PT7eWPtmeqQF7t/k/VmFYegrKy/p7HnjUaoIP6OyqUeLocJ2qH64V2RiYu+UXUa qPiXUuncXx34f3dX/4ucxcvMvcjH7k5PHr/FwqahGQkAQfq6rXtpyCK1HhIh8iLQ nFbQZ7tf0zd48qxuMB2K4gJlJHnwxo9QGaC+kjKOTZXAP7Bo7uokGNFflv7y9hK4 tHGkIXIKNjj6MRETym1KivNW9NfIJ28u0I/8Mek3IenkQ2Y81XA2PQcx+4sNSQ+P VfuSlhsfx2uv+XKZE9hw3JDU1RFedX9iDEnFEh1e8irxfxXD8pJtDrJpw00DwKLl LFvZbmULQzyiuT5ewKJtzuChry1+BUuOTMJ6kdlEtrWwr53mNfmje1gzI8bZKQV5 n+eqpvfY6SR1VbFjY7O8KXfTVWff8PE9sS5PupFW5w/0ENRzGrE= =Rnuc -----END PGP SIGNATURE----- --Sig_/G0z_KU8Oiymw54vxHI47ZW6-- From nobody Sun May 5 19:51:29 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616745149; cv=none; d=zohomail.com; s=zohoarc; b=A7Ws4b4qsOEIPrUK9owKwhPDY2+p2Jcv0EwifoHr3phWbGNCBSQpAjOTQNlO1QXNdO9mTu9V56IdNgGK3XYQobksxd37FmBCeqOonhSGf6uVHRa0Bs4+vXyN15gk/COxUAYb2a5Hqqze93EifMMOic/FbE2wwZO61R+B3LIJ5vM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616745149; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=RYs7NTLa45i7tgiWoPy/mxb17uqkkwXJKCv0rfwOGZA=; b=g8JZNuQo1UaxO+vh8QcnewRyeRy+VibAAbKQmW/rtoP1coa17SjV2SmNwWt+nEUvSA5R/uKhe1qaFu1jTejoZge6lH7t0ZaXoGEAOXt63j0iY2aDjFbJu9J58vyUbXQXLyYtkuK4MHaer0Kulejr0Z7CfZk9Fvb1AuoOyPBIwXE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616745149086378.97258021396954; Fri, 26 Mar 2021 00:52:29 -0700 (PDT) Received: from localhost ([::1]:50042 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lPhGd-0006PW-Kg for importer@patchew.org; Fri, 26 Mar 2021 03:52:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53938) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhDL-0002pA-HE for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:49:03 -0400 Received: from mout.web.de ([212.227.15.3]:46657) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lPhDJ-0002cG-Db for qemu-devel@nongnu.org; Fri, 26 Mar 2021 03:49:03 -0400 Received: from gecko.fritz.box ([89.247.255.242]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MJnvp-1l5hLt1ott-00JtMa; Fri, 26 Mar 2021 08:48:56 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616744936; bh=T8DxaAScgrFKLwV5enCxg8uflIx8JLJhszSKyUPNmX8=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=rMVO92kpBHwjAUYkroMutDA03bR6iTKdg4I6cVzkva5I97e851sFoM76MSsCmYTpP yaZzKwdt6D4AI0z6x16gHO+yOL13jjb7DarlPVa1EHx4U9Udg3pzTrI+SedK4+Abej 00zcZs+N0/Q2tSZqatVMK59KmXq3sLrcj4wbdVWk= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Fri, 26 Mar 2021 08:48:55 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v4 4/4] tests: Add tests for yank with the chardev-change case Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/hFGCI8qUV5_b9uApWFw/Gno"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:LwXCDLZjF7O3MkmqQLo0HIfoxCrBjSXv0c8hnmKUDKLHWqptuvb uGxKB/2UknOn9msbHyhHN5z8rrsWG38EM5Yd+VMrqW1vVtCiliV9YYWUTVflCF6xLZpGSHL qXkiY/SujoKTNrmAkMQlppQpe+sbjy1vk5v1HdOq5Fjhrx/vSA4tdljZN21P8xixRgsoBnX h2uX3Ut7SZqLyCl+yh12w== X-UI-Out-Filterresults: notjunk:1;V03:K0:TSVsGNsY45k=:QXJmx5GQdAE3uLHXifbptu AFUs+xM0apDairHq9T3/M4fadWI3aVdYYTKGLwZw3eNqiypXty0FVqRRuosnomTuuxr1gSi2L G1em/Vgpk8OtWAtlJthbFtI3cpz2lZdMreGvFE8fS+yXmjDbOO2n8NQmM8Xr3y3cfBa/skYYU 4/id9rqsw9p3qNXDkcHljlMVDpRpHi8djMtYQ8SrBiWZgW/1kukPOQeCzbdpAzfaXp1Eo4MI6 C6UT3MmD+TQx4uZdSop+CqFjoF5jlK/u3Zk7tpJv6Fmi+MYP4M30EvtGo5jcjCGagfUSElkG+ HCTuoFQv4JpFDoSB0DACVvCQezoZyJ39e0xOSXglIGFaw5ZaSBeNH+cxmK1CMlkgFzk5ML1ra X5j8gm7IeOFJ5m8U/ny6K6LqWT2ezUolOx9R0bDOPt/eroUT03rymWE+E/IZbSJ/Is0b4ZH0L ueGEiMJYbMdG28Pfb4NDZF5h85wcjbw8debvESiPk6BCI/o+jo/EeVBDdhEHsVxrdObwobOmi i3vpHJp8SC+a3AZvDpXtS4BcgN6eyGcxQCdiCeVdnkHHtSSzm0eKTzCHp9PmSqQRR/mEAG1c3 emfnHrb3/BB+IaFJg0ekyuPG8ds2qqa+ZXWoD9X3x9TDrEJ1QMZu9RNBkiVeBlDZGu3aKUR4a bTN4nKWpDFlGkCuIylRahfea8r3CgdR4gaTur+TRR01InQxYiInEX2vAwiPLYExeMXtvBPcZe blWmM+0CwOWjSsP6mAQ/m3gCo1fIY2rYjAwFXZxwoleHOHiU/+T8Hfj9Ciq0Bfc9h+bgpBT+T AGOvXvrm7IaLEQZo0T51wdXCvmv2M3e/B6OVJS6YxgCmt7B7xKk46UHnkW7LYQaK6QHHH/aF0 9Nbp8Zel9u2yQoyGQXiiLabqRWpdK7yWF5kcy1z6he3AWDd7lpclBlsYJsBfylBnP7UWBuKd8 splqKnOtihPc4h+XzOTFhqx3Yt/NU9J/4OVhzfWnbK+tXjprB1vl9kWCOUAHuXsdJ2neqgTJn cZQw0Z1Ar6SClhWbmIsZULAjwoee+F/GhMwoDzVy8qzG87kidrIqFc8Lq9ZdhzLuTsUl2lNpN Wa79og7/pLM56aICQuZJFcQKajGtvn/V+pJh1kRQrRPL8jvs/9UL+Pz2645A7TPBdB6qizxBl szZWS9WqpIoHR8SuANc5kqZl+i7x08VrLaukOfDywvA4SIMiN7nX82mDdK0d2Uw1c69kP2rSb VMG9tBuKPVcfqCrYd 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=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/hFGCI8qUV5_b9uApWFw/Gno Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add tests for yank with the chardev-change case. Signed-off-by: Lukas Straub Reviewed-by: Marc-Andr=C3=A9 Lureau --- MAINTAINERS | 1 + tests/unit/meson.build | 3 +- tests/unit/test-yank.c | 199 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 tests/unit/test-yank.c diff --git a/MAINTAINERS b/MAINTAINERS index 77259c031d..accb683a55 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2821,6 +2821,7 @@ M: Lukas Straub S: Odd fixes F: util/yank.c F: migration/yank_functions* +F: tests/unit/test-yank.c F: include/qemu/yank.h F: qapi/yank.json diff --git a/tests/unit/meson.build b/tests/unit/meson.build index 4bfe4627ba..b3bc2109da 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -123,7 +123,8 @@ if have_system 'test-util-sockets': ['socket-helpers.c'], 'test-base64': [], 'test-bufferiszero': [], - 'test-vmstate': [migration, io] + 'test-vmstate': [migration, io], + 'test-yank': ['socket-helpers.c', qom, io, chardev] } if 'CONFIG_INOTIFY1' in config_host tests +=3D {'test-util-filemonitor': []} diff --git a/tests/unit/test-yank.c b/tests/unit/test-yank.c new file mode 100644 index 0000000000..8bc8291a82 --- /dev/null +++ b/tests/unit/test-yank.c @@ -0,0 +1,199 @@ +/* + * Tests for QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include + +#include "qemu/config-file.h" +#include "qemu/module.h" +#include "qemu/option.h" +#include "chardev/char-fe.h" +#include "sysemu/sysemu.h" +#include "qapi/error.h" +#include "qapi/qapi-commands-char.h" +#include "qapi/qapi-types-char.h" +#include "qapi/qapi-commands-yank.h" +#include "qapi/qapi-types-yank.h" +#include "io/channel-socket.h" +#include "socket-helpers.h" + +typedef struct { + SocketAddress *addr; + bool old_yank; + bool new_yank; + bool fail; +} CharChangeTestConfig; + +static int chardev_change(void *opaque) +{ + return 0; +} + +static bool is_yank_instance_registered(void) +{ + YankInstanceList *list; + bool ret; + + list =3D qmp_query_yank(&error_abort); + + ret =3D !!list; + + qapi_free_YankInstanceList(list); + + return ret; +} + +static void char_change_test(gconstpointer opaque) +{ + CharChangeTestConfig *conf =3D (gpointer) opaque; + SocketAddress *addr; + Chardev *chr; + CharBackend be; + ChardevReturn *ret; + QIOChannelSocket *ioc; + + /* + * Setup a listener socket and determine its address + * so we know the TCP port for the client later + */ + ioc =3D qio_channel_socket_new(); + g_assert_nonnull(ioc); + qio_channel_socket_listen_sync(ioc, conf->addr, 1, &error_abort); + addr =3D qio_channel_socket_get_local_address(ioc, &error_abort); + g_assert_nonnull(addr); + + ChardevBackend backend[2] =3D { + /* doesn't support yank */ + { .type =3D CHARDEV_BACKEND_KIND_NULL }, + /* supports yank */ + { + .type =3D CHARDEV_BACKEND_KIND_SOCKET, + .u.socket.data =3D &(ChardevSocket) { + .addr =3D &(SocketAddressLegacy) { + .type =3D SOCKET_ADDRESS_LEGACY_KIND_INET, + .u.inet.data =3D &addr->u.inet + }, + .has_server =3D true, + .server =3D false + } + } }; + + ChardevBackend fail_backend[2] =3D { + /* doesn't support yank */ + { + .type =3D CHARDEV_BACKEND_KIND_UDP, + .u.udp.data =3D &(ChardevUdp) { + .remote =3D &(SocketAddressLegacy) { + .type =3D SOCKET_ADDRESS_LEGACY_KIND_UNIX, + .u.q_unix.data =3D &(UnixSocketAddress) { + .path =3D (char *)"" + } + } + } + }, + /* supports yank */ + { + .type =3D CHARDEV_BACKEND_KIND_SOCKET, + .u.socket.data =3D &(ChardevSocket) { + .addr =3D &(SocketAddressLegacy) { + .type =3D SOCKET_ADDRESS_LEGACY_KIND_INET, + .u.inet.data =3D &(InetSocketAddress) { + .host =3D (char *)"127.0.0.1", + .port =3D (char *)"0" + } + }, + .has_server =3D true, + .server =3D false + } + } }; + + g_assert(!is_yank_instance_registered()); + + ret =3D qmp_chardev_add("chardev", &backend[conf->old_yank], &error_ab= ort); + qapi_free_ChardevReturn(ret); + chr =3D qemu_chr_find("chardev"); + g_assert_nonnull(chr); + + g_assert(is_yank_instance_registered() =3D=3D conf->old_yank); + + qemu_chr_wait_connected(chr, &error_abort); + qemu_chr_fe_init(&be, chr, &error_abort); + /* allow chardev-change */ + qemu_chr_fe_set_handlers(&be, NULL, NULL, + NULL, chardev_change, NULL, NULL, true); + + if (conf->fail) { + g_setenv("QTEST_SILENT_ERRORS", "1", 1); + ret =3D qmp_chardev_change("chardev", &fail_backend[conf->new_yank= ], + NULL); + g_assert_null(ret); + g_assert(be.chr =3D=3D chr); + g_assert(is_yank_instance_registered() =3D=3D conf->old_yank); + g_unsetenv("QTEST_SILENT_ERRORS"); + } else { + ret =3D qmp_chardev_change("chardev", &backend[conf->new_yank], + &error_abort); + g_assert_nonnull(ret); + g_assert(be.chr !=3D chr); + g_assert(is_yank_instance_registered() =3D=3D conf->new_yank); + } + + object_unparent(OBJECT(be.chr)); + object_unref(OBJECT(ioc)); + qapi_free_ChardevReturn(ret); +} + +static SocketAddress tcpaddr =3D { + .type =3D SOCKET_ADDRESS_TYPE_INET, + .u.inet.host =3D (char *)"127.0.0.1", + .u.inet.port =3D (char *)"0", +}; + +int main(int argc, char **argv) +{ + bool has_ipv4, has_ipv6; + + qemu_init_main_loop(&error_abort); + socket_init(); + + g_test_init(&argc, &argv, NULL); + + if (socket_check_protocol_support(&has_ipv4, &has_ipv6) < 0) { + g_printerr("socket_check_protocol_support() failed\n"); + goto end; + } + + if (!has_ipv4) { + goto end; + } + + module_call_init(MODULE_INIT_QOM); + qemu_add_opts(&qemu_chardev_opts); + +#define CHAR_CHANGE_TEST(name, _old_yank, _new_yank) = \ + g_test_add_data_func("/yank/char_change/success/" # name, = \ + &(CharChangeTestConfig) { .addr =3D &tcpaddr,= \ + .old_yank =3D (_old= _yank),\ + .new_yank =3D (_new= _yank),\ + .fail =3D false }, = \ + char_change_test); = \ + g_test_add_data_func("/yank/char_change/fail/" # name, = \ + &(CharChangeTestConfig) { .addr =3D &tcpaddr,= \ + .old_yank =3D (_old= _yank),\ + .new_yank =3D (_new= _yank),\ + .fail =3D true }, = \ + char_change_test); + + CHAR_CHANGE_TEST(to_yank, false, true); + CHAR_CHANGE_TEST(yank_to_yank, true, true); + CHAR_CHANGE_TEST(from_yank, true, false); + +end: + return g_test_run(); +} -- 2.30.2 --Sig_/hFGCI8qUV5_b9uApWFw/Gno Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBdkecACgkQNasLKJxd slhcPhAAmKDPWDoJkWAqslIAN7tK7wJrtmkDr3nMjiP4jQi6bgOMuy0nVKYaKhtI 0TIU4btv6WD1ShogobT9tR0XBhIxjrT6DL7Xxm5j2lW6Ln635WN3OGiRiVXQu8nd t/QMkcvbiGZ6gd46V3sVldgApumBHk+cGuR+pwtmp4NcbvAEu8lBGvVJU7o41V6t 6IWNTjD45Nk6HHKJ8Qt6cZdROKnV4jbq+LE4ewJTcCSHOlhiFiNSVaQE9Yy358zb 3tltbPRKXNTUS0hffrUIXKExoA8syFsmuOzUAcwjk3rU5S7JHC0IPURY0aDdkYJQ LyRgAgziGVDtIdgsK2c5uf0ETb01uKS5rJZSy14jG26zkzLf1h2XqJy5HOxfS9O6 T62I6HeYfmnH/d38G1b97s/yzPrEdHfjWYZtvCeqf8HgrLDSYscNKHa4N4W2iRpO r0+GYtoBsqKzmhmqtRNVUWQw3d05ZL/oYKbkEo0IoAN3Owj+HZqePRh141RxuQXP 2FxO0HD31690myci6YrnF3MlM5S7zQMHazptmKwdlGDfuc5cr7EMw7A6EnOHiGoo RTSizW0ZklwY9trFhCdGm+hz7ZiyT87LGfp48W38mBfjJ0Xhfea+sYycyi1nh9+4 IH6wQ1rLycdFkw58r0L2wSR0K6xsPCUbhKQeK8OgpVPoY0zd36s= =kNrb -----END PGP SIGNATURE----- --Sig_/hFGCI8qUV5_b9uApWFw/Gno--