From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579499999; cv=pass; d=zohomail.com; s=zohoarc; b=MfDZBTfJ7oB64c0JDQVevltuPWw/qze2uqoW2xiO5vTDPEt0Zgo2NM7bSnrQeDUAbP3KkmBdV0cHm2SZWxeeWyhWoOeRRWOwbpQK3qhCbW46TeWUUr5vjqXtCv4rN+GTA+6lqKti2Wv6yGekaf0AzmVPfCp+vQmLAWd674s/L/M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579499999; h=Content-Type:Content-Transfer-Encoding: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=AUyxkMgSXmZiu/Rc1nJfJkjjXVUMnmlDUGvnTkwt2jI=; b=Oyqr0j+jVTY1UtxITAknAI5BfQG9hva8lGlrZzRvHTq/CktnBy9p46+aP18fHKdr/14r73AIdMFUwpRA2Sete0uEuVF8KuyVLYGyWju1+XE3qypDxftblK9NAJpddff/CW9S+Mf1iA6SY8kiIWhxK7bJi/DmzYVxnoPxR8Wk6QU= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579499998989204.59634708565193; Sun, 19 Jan 2020 21:59:58 -0800 (PST) Received: from localhost ([::1]:58898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ6O-00043x-ND for importer@patchew.org; Mon, 20 Jan 2020 00:59:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35136) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1L-0006jf-UR for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1K-0006EE-7z for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:43 -0500 Received: from mail-bn7nam10on2099.outbound.protection.outlook.com ([40.107.92.99]:53408 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1K-0006Cs-2K for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:42 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:41 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:41 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BfHav3OJ2V4QeQ0mqmSfUexG++8TF89LMybKVvaJUA/gSKJLCHv/TfnDECVBip1FHKTLT+U/fg6M4Ir/OZzqMmx5LwZYg4IYCiUJP03ia6EHGoxfjZM+Fy3TTDJf2V00tav7FxVeJGKdlGx9zPYjOJeHoSiDUxWeWArjwydbu0lVADh7ngc1KvhE5XHH6VqPTCzzdZY/9SYlqo2gvXivRvUdZIaPh7IKgiGF8gqr5NMprMaSAdv3fZZ39C1+VoUMn3eZBYlzKyzf/M2C97e33wq2avI59QoHWUwHqOPPMPRUKJ7J9cu5GVAFAQuFW7zbOgWFFaifKrb1mweWGEEn3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AUyxkMgSXmZiu/Rc1nJfJkjjXVUMnmlDUGvnTkwt2jI=; b=QHjtUgRcqlSIU5dp2v7avuqncRwIGiNWT4nUYZAr/WxSNJJOD0jnZm3BxosL+crVAqS1vsaim39dzhWjBkADFCFpYV3/EL5FbreI0C6oQDZMGuJLLylvKdVOUfhMtG+juQG/hj7rsIY/EufqmC+7GBBbD4xn6s9z/9AP9LAbACEE99fmLtk9Hj5LZ4Svh/UVbPyJb7HMAPWinJSDoKnPxTyRV39A24eo3HQU4eUyimwLgEuLap8E/PUbDKl/oNmBcCbFEFq11joJ9rfepiv6RCN2Oipqh7ZeMg4vlgrAj9Xm8nECF3w1vWOBKv5hGF4FtNs7RaHYd8R/boRJ1bX4Cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AUyxkMgSXmZiu/Rc1nJfJkjjXVUMnmlDUGvnTkwt2jI=; b=IDSh7trzoWXoUFSyKmWKHW9JZqeW4YccW4kRxPCNM+y1MigunsyqhWRns7OM9TCwuvV13NnHixs0OG9h9mzqmiYZe3U0gbOVPa2VRvSqfamLdvFfD5Nh1ttLfm43ONxhj80tniI/feruS+RtkfRtOMDFpqhXKcIRlYgmuIW6x00= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 01/20] softmmu: split off vl.c:main() into main.c Thread-Topic: [PATCH v7 01/20] softmmu: split off vl.c:main() into main.c Thread-Index: AQHVz1YZvX5VLYzcBUSUoT2caaa2xw== Date: Mon, 20 Jan 2020 05:54:38 +0000 Message-ID: <20200120055410.22322-2-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 56d109b1-d738-4206-6562-08d79d6d3c28 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: JPdP9/2DpAUH+yw0vuf9TVhjJCxm106nijbAzRWxtw165sK0jVhPJLc9+GoZfs/eQoSGgHORgznNgbeH3XX6eVz0Nk8ZjQbKe1WQlVpGqMV3ULtNukOdPaLTjBOEBXnv2bldd8YPClSeI26I8AQdFzKUcbyUtjOW/9qeW5MrmugPcJ9+1g09AUZc0EU48Yw9bvK4Uad2W2UsEdS2TmEGVJuPxw2Kwc3QGuLWQobCGKuWusso86Bbws31iv+s0EBGcCnDYZ6wBb26VrbNvX1FL3kKQ6EKY38i1MjK2j8oF9/zS0bzPoTtPDes2CW4IKdesjdiOFkGcZm2jpKYRArjMVNlVo/AiYJbqCeFZ/W+o8pYzKDfMyckR+eVKto/Jy3+HpIaBMkptwX8u6m1ztRxrq1o+64yRkvOejvg3OxruLFViWw75+8yAbo4/Vg6GGLd Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 56d109b1-d738-4206-6562-08d79d6d3c28 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:38.7897 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: E9AqJA0Ajzf/AalcJHzZTx34M7+kxEOVY8dJQpJZgVX2k93v26sKOFg+rL1uU7Hv X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.99 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: "pbonzini@redhat.com" , "bsd@redhat.com" , "stefanha@redhat.com" , "Bulekov, Alexander" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" A program might rely on functions implemented in vl.c, but implement its own main(). By placing main into a separate source file, there are no complaints about duplicate main()s when linking against vl.o. For example, the virtual-device fuzzer uses a main() provided by libfuzzer, and needs to perform some initialization before running the softmmu initialization. Now, main simply calls three vl.c functions which handle the guest initialization, main loop and cleanup. Signed-off-by: Alexander Bulekov --- Makefile | 1 + Makefile.objs | 2 ++ Makefile.target | 2 +- include/sysemu/sysemu.h | 4 ++++ main.c | 53 +++++++++++++++++++++++++++++++++++++++++ vl.c | 38 ++++++++--------------------- 6 files changed, 71 insertions(+), 29 deletions(-) create mode 100644 main.c diff --git a/Makefile b/Makefile index 32bd554480..e6de7a47bb 100644 --- a/Makefile +++ b/Makefile @@ -473,6 +473,7 @@ $(SOFTMMU_ALL_RULES): $(chardev-obj-y) $(SOFTMMU_ALL_RULES): $(crypto-obj-y) $(SOFTMMU_ALL_RULES): $(io-obj-y) $(SOFTMMU_ALL_RULES): config-all-devices.mak +$(SOFTMMU_ALL_RULES): $(softmmu-main-y) ifdef DECOMPRESS_EDK2_BLOBS $(SOFTMMU_ALL_RULES): $(edk2-decompressed) endif diff --git a/Makefile.objs b/Makefile.objs index 7c1e50f9d6..5ab166fed5 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -84,6 +84,8 @@ common-obj-$(CONFIG_FDT) +=3D device_tree.o # qapi =20 common-obj-y +=3D qapi/ + +softmmu-obj-y =3D main.o endif =20 ####################################################################### diff --git a/Makefile.target b/Makefile.target index 6e61f607b1..8dcf3dddd8 100644 --- a/Makefile.target +++ b/Makefile.target @@ -202,7 +202,7 @@ endif COMMON_LDADDS =3D ../libqemuutil.a =20 # build either PROG or PROGW -$(QEMU_PROG_BUILD): $(all-obj-y) $(COMMON_LDADDS) +$(QEMU_PROG_BUILD): $(all-obj-y) $(COMMON_LDADDS) $(softmmu-obj-y) $(call LINK, $(filter-out %.mak, $^)) ifdef CONFIG_DARWIN $(call quiet-command,Rez -append $(SRC_PATH)/pc-bios/qemu.rsrc -o $@,"REZ= ","$(TARGET_DIR)$@") diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 80c57fdc4e..270df5fa34 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -118,6 +118,10 @@ QemuOpts *qemu_get_machine_opts(void); =20 bool defaults_enabled(void); =20 +void qemu_init(int argc, char **argv, char **envp); +void qemu_main_loop(void); +void qemu_cleanup(void); + extern QemuOptsList qemu_legacy_drive_opts; extern QemuOptsList qemu_common_drive_opts; extern QemuOptsList qemu_drive_opts; diff --git a/main.c b/main.c new file mode 100644 index 0000000000..f10ceda541 --- /dev/null +++ b/main.c @@ -0,0 +1,53 @@ +/* + * QEMU System Emulator + * + * Copyright (c) 2003-2008 Fabrice Bellard + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "sysemu/sysemu.h" + +#ifdef CONFIG_SDL +#if defined(__APPLE__) || defined(main) +#include +int main(int argc, char **argv) +{ + return qemu_main(argc, argv, NULL); +} +#undef main +#define main qemu_main +#endif +#endif /* CONFIG_SDL */ + +#ifdef CONFIG_COCOA +#undef main +#define main qemu_main +#endif /* CONFIG_COCOA */ + +int main(int argc, char **argv, char **envp) +{ + qemu_init(argc, argv, envp); + qemu_main_loop(); + qemu_cleanup(); + + return 0; +} diff --git a/vl.c b/vl.c index 751401214c..132a41ac0f 100644 --- a/vl.c +++ b/vl.c @@ -36,25 +36,6 @@ #include "sysemu/seccomp.h" #include "sysemu/tcg.h" =20 -#ifdef CONFIG_SDL -#if defined(__APPLE__) || defined(main) -#include -int qemu_main(int argc, char **argv, char **envp); -int main(int argc, char **argv) -{ - return qemu_main(argc, argv, NULL); -} -#undef main -#define main qemu_main -#endif -#endif /* CONFIG_SDL */ - -#ifdef CONFIG_COCOA -#undef main -#define main qemu_main -#endif /* CONFIG_COCOA */ - - #include "qemu/error-report.h" #include "qemu/sockets.h" #include "sysemu/accel.h" @@ -1657,7 +1638,7 @@ static bool main_loop_should_exit(void) return false; } =20 -static void main_loop(void) +void qemu_main_loop(void) { #ifdef CONFIG_PROFILER int64_t ti; @@ -2820,7 +2801,7 @@ static void configure_accelerators(const char *progna= me) } } =20 -int main(int argc, char **argv, char **envp) +void qemu_init(int argc, char **argv, char **envp) { int i; int snapshot, linux_boot; @@ -3372,7 +3353,7 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_watchdog: if (watchdog) { error_report("only one watchdog option may be given"); - return 1; + exit(1); } watchdog =3D optarg; break; @@ -3813,7 +3794,7 @@ int main(int argc, char **argv, char **envp) set_memory_options(&ram_slots, &maxram_size, machine_class); =20 os_daemonize(); - rcu_disable_atfork(); + /* rcu_disable_atfork(); */ =20 if (pid_file && !qemu_write_pidfile(pid_file, &err)) { error_reportf_err(err, "cannot create PID file: "); @@ -4284,7 +4265,7 @@ int main(int argc, char **argv, char **envp) parse_numa_opts(current_machine); =20 /* do monitor/qmp handling at preconfig state if requested */ - main_loop(); + qemu_main_loop(); =20 audio_init_audiodevs(); =20 @@ -4394,7 +4375,7 @@ int main(int argc, char **argv, char **envp) if (vmstate_dump_file) { /* dump and exit */ dump_vmstate_json_to_file(vmstate_dump_file); - return 0; + exit(0); } =20 if (incoming) { @@ -4411,8 +4392,11 @@ int main(int argc, char **argv, char **envp) accel_setup_post(current_machine); os_setup_post(); =20 - main_loop(); + return; +} =20 +void qemu_cleanup(void) +{ gdbserver_cleanup(); =20 /* @@ -4449,6 +4433,4 @@ int main(int argc, char **argv, char **envp) qemu_chr_cleanup(); user_creatable_cleanup(); /* TODO: unref root container, check all devices are ok */ - - return 0; } --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579499836; cv=pass; d=zohomail.com; s=zohoarc; b=UiIExf7v1EkfsJ7HyF5yP96j3FvPJNN/6J7vsMCAkWhFHJw25OI9zA9iTdC55v4wDfuZ/61/sWFqQ4xBU2w1IKPYqACNVeiSh213hO6uiJSDZjDkIg9WBwjgCRzxLsRIqs9giRL28YMkhspu185Ky+im4xgm6m3D3DHv4FxYlt8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579499836; h=Content-Type:Content-Transfer-Encoding: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=t5mnk3e1ZGtlIjME4MaJ9YJ8gCqwJraw8SK866ibAro=; b=DOIRHbbbw9iz81k/dbDzNIAUL+vNjSYmFib/KXaM92orRQsvrZsAEDph+sZ/YA7zj+Lf5xmKZ3zoatswAGLTZq2XLhtyq7ZNIEACmcbT2erC4CRxkOyURMSOqz+uhN5JHlU6xtVZMYijCwQ3LPF0R3vR+DYOh/Nz9RgiK+3ZakY= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579499836552754.4990691730262; Sun, 19 Jan 2020 21:57:16 -0800 (PST) Received: from localhost ([::1]:58878 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ3m-0000Tu-S3 for importer@patchew.org; Mon, 20 Jan 2020 00:57:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35156) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1N-0006lo-8R for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1L-0006F6-Vl for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:45 -0500 Received: from mail-bn7nam10on2090.outbound.protection.outlook.com ([40.107.92.90]:54177 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1L-0006Eg-RS for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:43 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:42 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:42 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UDIpBl4QvSsqHXScCRpC0vGlwv/WcTjELvK5XNYrsg79vc+0zxs9A9+/hbQDce+xlRcIDbORboOmhwbVvp8V02qiB1gaIyKeIx8FFPLXMSdVeoh9m9Z8ymPa+VBSdmgWs2WP9RuX3I14heT7HEYPIdGoplOXRLMUq0p/M2aoZYSwWJ97TbES1OgcJx7HJiicV1LnBf+cULMKk5G+gScAnZrlTkbVbm0nBU9dgnpf+nkc0xdhP5hILIPW/PDSY0O0md1VBxlVfP3nCMW8kZQatAKa4ZEjwQ3lGJyacDgkYikRLD9DdMLPu5BlQO/BsF7uxirEzZHbctY5P3muiZQrTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t5mnk3e1ZGtlIjME4MaJ9YJ8gCqwJraw8SK866ibAro=; b=BOlMj6wXja/je8Q/E2C/Z7/JmVEicxqwpygqq+wcTjaNoCKZe90U5/WCfeS/1QIxgNAvm01v3q6WyXBsQHhsIr6fSZBly3QrXu7fQ90qfij0nZ8pqgtWwW/zk+fRVkBj3kVC2xV8uUBUQJv4moY50wwaowNmQ725rkHPykxrEo/8pPUfoR3qfxR/n/be8HBXLe89QKFIoKeA2k6ID9U4gwQFMoEN8qJCb1ez1O2KhuZZbNhF3hNn+qt/YmESPvknSMzhDm90EhQEY3FSzri4Upa3M2zHGVAhJ+Kasj235/GqU5Lgf9WxXabx5vDRnBI2bT+d2K3Quzh0zZKzBY3lEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t5mnk3e1ZGtlIjME4MaJ9YJ8gCqwJraw8SK866ibAro=; b=WeCZdafeWiyybGvzIWlyV0KUfV4yU+X8WXU8fQ1Vfha2aPMSC8eOceQOFRnN+5kRH1EkFM27NiA9t4Jj2LTO4YeVakmIN02XQpLjBoQNKBw1KV9Yu24SF05y64Wo0UVjdhSyluWSJXZ6t091Jn47SgtzLM3lEOn55X3i19RlBRs= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 02/20] libqos: rename i2c_send and i2c_recv Thread-Topic: [PATCH v7 02/20] libqos: rename i2c_send and i2c_recv Thread-Index: AQHVz1YbXRWJ0H44Rk6okJGziXoYMQ== Date: Mon, 20 Jan 2020 05:54:41 +0000 Message-ID: <20200120055410.22322-3-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0dcd91ff-cb5c-46f8-4e9b-08d79d6d3cfb x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3173; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(6666004)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: EGmqM93MchUlH51JXaZ4oGUGIaAuBRtqKAEJcys/DAVVY5/i2FY15Grfsb2ZUR+Vk1QW6xYB9xvyom/R8IZyR38MZz5eqQN5MZD9NmxgQEMFpp4cmZ/1gyIvkrShM3POnU1Lskl/i0dvtnN7gKd17KjZDfBM34zSULg8tEADPreDdvP5hP9b1QdYdPNBy8CZAS0RZokrWEsaEqstl8hoe61qLokuRvaEMDnW/cxuj6nD+04HgyYRTl2lW6qbsuFwsCzYmgt/M5SjcirxZ+PhlAyHJ1sAo4lJufrIbSkPvoQlT96jGtFYh7JmtidlAewNq6WfIFjTBM2qiAyGnZ8KBeArC2h+sKBqOlZe7MIPuu16n1VIGoc6PMjlove8O9MqEUrj6sWr52PpWuaCWoHg75uzCOY3jULnErz7PN05YepG6h7rPpr57sFJSXXq8Dh9 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 0dcd91ff-cb5c-46f8-4e9b-08d79d6d3cfb X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:41.3953 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: w4VF7MjqiIr72qDqJwfX7iT3c35HuT/qgPcLTlWDtBhDVi0RBO5l5yJuEYoU38JN X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.90 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" The names i2c_send and i2c_recv collide with functions defined in hw/i2c/core.c. This causes an error when linking against libqos and softmmu simultaneously (for example when using qtest inproc). Rename the libqos functions to avoid this. Signed-off-by: Alexander Bulekov Acked-by: Thomas Huth Reviewed-by: Stefan Hajnoczi --- tests/qtest/libqos/i2c.c | 10 +++++----- tests/qtest/libqos/i2c.h | 4 ++-- tests/qtest/pca9552-test.c | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/qtest/libqos/i2c.c b/tests/qtest/libqos/i2c.c index 156114e745..38f800dbab 100644 --- a/tests/qtest/libqos/i2c.c +++ b/tests/qtest/libqos/i2c.c @@ -10,12 +10,12 @@ #include "libqos/i2c.h" #include "libqtest.h" =20 -void i2c_send(QI2CDevice *i2cdev, const uint8_t *buf, uint16_t len) +void qi2c_send(QI2CDevice *i2cdev, const uint8_t *buf, uint16_t len) { i2cdev->bus->send(i2cdev->bus, i2cdev->addr, buf, len); } =20 -void i2c_recv(QI2CDevice *i2cdev, uint8_t *buf, uint16_t len) +void qi2c_recv(QI2CDevice *i2cdev, uint8_t *buf, uint16_t len) { i2cdev->bus->recv(i2cdev->bus, i2cdev->addr, buf, len); } @@ -23,8 +23,8 @@ void i2c_recv(QI2CDevice *i2cdev, uint8_t *buf, uint16_t = len) void i2c_read_block(QI2CDevice *i2cdev, uint8_t reg, uint8_t *buf, uint16_t len) { - i2c_send(i2cdev, ®, 1); - i2c_recv(i2cdev, buf, len); + qi2c_send(i2cdev, ®, 1); + qi2c_recv(i2cdev, buf, len); } =20 void i2c_write_block(QI2CDevice *i2cdev, uint8_t reg, @@ -33,7 +33,7 @@ void i2c_write_block(QI2CDevice *i2cdev, uint8_t reg, uint8_t *cmd =3D g_malloc(len + 1); cmd[0] =3D reg; memcpy(&cmd[1], buf, len); - i2c_send(i2cdev, cmd, len + 1); + qi2c_send(i2cdev, cmd, len + 1); g_free(cmd); } =20 diff --git a/tests/qtest/libqos/i2c.h b/tests/qtest/libqos/i2c.h index 945b65b34c..c65f087834 100644 --- a/tests/qtest/libqos/i2c.h +++ b/tests/qtest/libqos/i2c.h @@ -47,8 +47,8 @@ struct QI2CDevice { void *i2c_device_create(void *i2c_bus, QGuestAllocator *alloc, void *addr); void add_qi2c_address(QOSGraphEdgeOptions *opts, QI2CAddress *addr); =20 -void i2c_send(QI2CDevice *dev, const uint8_t *buf, uint16_t len); -void i2c_recv(QI2CDevice *dev, uint8_t *buf, uint16_t len); +void qi2c_send(QI2CDevice *dev, const uint8_t *buf, uint16_t len); +void qi2c_recv(QI2CDevice *dev, uint8_t *buf, uint16_t len); =20 void i2c_read_block(QI2CDevice *dev, uint8_t reg, uint8_t *buf, uint16_t len); diff --git a/tests/qtest/pca9552-test.c b/tests/qtest/pca9552-test.c index 4b800d3c3e..d80ed93cd3 100644 --- a/tests/qtest/pca9552-test.c +++ b/tests/qtest/pca9552-test.c @@ -32,22 +32,22 @@ static void receive_autoinc(void *obj, void *data, QGue= stAllocator *alloc) =20 pca9552_init(i2cdev); =20 - i2c_send(i2cdev, ®, 1); + qi2c_send(i2cdev, ®, 1); =20 /* PCA9552_LS0 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x54); =20 /* PCA9552_LS1 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x55); =20 /* PCA9552_LS2 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x55); =20 /* PCA9552_LS3 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x54); } =20 --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500053; cv=pass; d=zohomail.com; s=zohoarc; b=EcQ90GN/7rlNpbM7CdEQJ3t/AtoXqPkIS0/E3VvFTaCWgWPgtZeZnmi4BY056K/SdByKNgEUc/nkqglVkpuGebNXiTcF2xqnUHlFzRiSGnxYs8UTCO5u2spenDB83yp/D/9Qc3pxpyQ6rRWU/Sd62knfUoqbzwQ5K8PnzLegTOE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500053; h=Content-ID:Content-Type:Content-Transfer-Encoding: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=Ns3uR7r40f3Hn5it1jv0Pcc2ZA1fNyAHsn2M9Jhx4kw=; b=SFiD438Jmc4iCIunGtPjN7zFNagAGDPmE2fymO1U9Cyl/NDhgI8Qr73V4YslwskrhcJmoMN32m10zklZMUL4A7X0UHv9jOVEJ9RhOTnCEgXuQFTvvzEfvZwTKLQnf8UJrXHEw7hhKxo0J/2t2XNajpMYdSf5TUcXW9Wp5I1uDy4= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500053697330.90096368659283; Sun, 19 Jan 2020 22:00:53 -0800 (PST) Received: from localhost ([::1]:58904 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ7G-0004jX-Oe for importer@patchew.org; Mon, 20 Jan 2020 01:00:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35158) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1N-0006ly-B7 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1M-0006FN-7l for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:45 -0500 Received: from mail-bn7nam10on2090.outbound.protection.outlook.com ([40.107.92.90]:54177 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1M-0006Eg-3P for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:44 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:43 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:43 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JrXa9D2zQ2zNUYUNZyPXb0SLjdkXAGI2v0BxwZhscI7v2jeZfAxSD06hGxur6upE6Sc8O7SZ+pFVZ4E0M1pmjVwsSxf11VFZ0PYkuldgJcAkropHNFqvr1lITG+hyXSCSp7bef9LWsb3B3ce7+BvCiPKKdm3z8ImXWwR4i1i7yG/npoLzSfPk3a4pONYR2h/AgjywMWH2jRh0ddIhr4oijGuUERmD7Vf0GzelraQIUPDi87F4MkGPnq2W1mF5Z+V324VGKLMl44eqvsOj4DCasSRSM7MamUF+/kyceSuaFpmtSNtIaNmbUDYVpTLxgywfZeRh8Z3KhtlwD9TLdSC8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ns3uR7r40f3Hn5it1jv0Pcc2ZA1fNyAHsn2M9Jhx4kw=; b=kuzeANqUz8wNY6z5ALIhzxdcMD5pMsEbXIycGpj/ZrBBq3IgDNexx9GVfkcB/LNtJd1aG1vlQU3goXc5mgmUwuqU46KCo75gNXh4eBZY8ivKAjy67WPwKH9Jh5jFt1j8V0144L8N7hMzrGS5dds7tzrvcA9e4yjT2lomBWojP4kBxh/m87if7CeUc0E0T8z7k0Hn7YzJyJVNAcclILNi8dVilgQMspkPFPoiQoY9Y8xfBg9uIl+MZ9itU0PYiRlwJT9cgJm//dZXdZVeKZxxkATaElqOWaSG37Ld1GeXTTr2MttxP3msla6EnMiv4YrU8Fk2ItZY61ZAouQcNDoXrA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ns3uR7r40f3Hn5it1jv0Pcc2ZA1fNyAHsn2M9Jhx4kw=; b=gKgSq63ag/22ulKjXTq9Hqo3RinJe2AOQzo7a/pz0HP5lplafg2lJBu9HGqsZk+5r7EiXwS/jkolHwo5M8Xy3aUtjo2rFDJr3oVn/6UKkqp2RoOmvoEN+oF0E9eDdSxJsRe2j734gtBjRB3RJALX6rrJZ93MVFaRORC6VfViWWc= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 02/20] module: check module wasn't already initialized Thread-Topic: [PATCH v7 02/20] module: check module wasn't already initialized Thread-Index: AQHVz1YcPf+wM7ctiEW7xpS4IV/MpQ== Date: Mon, 20 Jan 2020 05:54:42 +0000 Message-ID: <20200120055410.22322-4-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f7955975-704e-4d48-6719-08d79d6d3ed9 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4303; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: lvk5NEe1LIqrsptet8oKLeR01+59hCHclFkQA7bEHyl3yVCPu7jvaF9/7V9gN9ePjOqKRkm8WZRSMj1umgPEV8Mimb3qkB7CiZuOUeCV4BXfCKyWhQKtohQDvzLUMNpra2MIoGv/AtfPIRaweM3WhrPWs1Bnm3M5EYKSY3mzlOgvTpmtjLjiVz3B6Cs38fVfyvTjoXnh1++/AmajwAhhO6v3wDAXZmPOU1Qh9xoqcvVqV+VAgsx2afArpQut91aY9W5jb/0NmHd+ParMxiGyL87IRtgaYEVkkYKJceM1GDBKCqWcxcJVbIWIEq0X5uqy7hTWXE7H27WoTvBwNyuhX8jWxsIXn7b2RJu1Wla08fRKdDh+ublHj4Xj1DmdGfc/QXJ3P0dVnns52ON0gmvg155UeoQcNdiyeSwcOME5zxKkDVRZRSnQxfXu3qpbdTYQ Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: f7955975-704e-4d48-6719-08d79d6d3ed9 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:42.9954 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FYMAuPIyRVO1jNBmLHrLDAMXgbArM/xdZevdxGpdWiwcl9C3B07nHf87A78Qi54I X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.90 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: "Bulekov, Alexander" , Darren Kenny , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) The virtual-device fuzzer must initialize QOM, prior to running vl:qemu_init, so that it can use the qos_graph to identify the arguments required to initialize a guest for libqos-assisted fuzzing. This change prevents errors when vl:qemu_init tries to (re)initialize the previously initialized QOM module. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi Reviewed-by: Darren Kenny Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- util/module.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/util/module.c b/util/module.c index 8c5315a7a3..236a7bb52a 100644 --- a/util/module.c +++ b/util/module.c @@ -30,6 +30,7 @@ typedef struct ModuleEntry typedef QTAILQ_HEAD(, ModuleEntry) ModuleTypeList; =20 static ModuleTypeList init_type_list[MODULE_INIT_MAX]; +static bool modules_init_done[MODULE_INIT_MAX]; =20 static ModuleTypeList dso_init_list; =20 @@ -91,11 +92,17 @@ void module_call_init(module_init_type type) ModuleTypeList *l; ModuleEntry *e; =20 + if (modules_init_done[type]) { + return; + } + l =3D find_type(type); =20 QTAILQ_FOREACH(e, l, node) { e->init(); } + + modules_init_done[type] =3D true; } =20 #ifdef CONFIG_MODULES --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500253; cv=pass; d=zohomail.com; s=zohoarc; b=aiNiRto2wyOaxJYydH8FinxrDwwBc7VNFyR3up1n/G3JL3UoX7WP63UH/t/HbFRAOUKViaoNmiO4Xn4KmYDSpYtsQPLyoy243UxHtqJ5/JYrwLASYMc+om2cR3oaxlsfAkY3C1klaxWhzpoDFOa8LQ3pdDfE3K8CSwHlmf+4GGw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500253; h=Content-Type:Content-Transfer-Encoding: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=sDcyKBGnhfVKL9MV14vCpp1u3vtovcs2UihQKuSPZwg=; b=WIZbZdhBirN6vD7SnijDo2VJQbO+CFddDGJFzvBHTvdh+G+rQMEMoznhN007gio58ZWfImMV6g3wGkNv/BvoZpx3EqlbyA9xTn5sMWtdK+0FNG7ybH9qFfGg58FFqwjxZ8vRAFJWlqBFMxCdFwbG4/Qme5iRVYQzjp5tAx9Hc9k= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500253464733.9266390240947; Sun, 19 Jan 2020 22:04:13 -0800 (PST) Received: from localhost ([::1]:58948 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQAV-0008Bb-G5 for importer@patchew.org; Mon, 20 Jan 2020 01:04:11 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35178) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1P-0006ow-Ar for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1N-0006Fx-6b for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:47 -0500 Received: from mail-bn7nam10on2115.outbound.protection.outlook.com ([40.107.92.115]:59757 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1N-0006Fc-2K for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:45 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:44 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:44 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gNBpxbS7ZrctVDxE81gTX2gMOkZWLn9SSaOSZzA9FRVbT+JytFlTccsBT0ThianycX4LYevoGPi2nnwle2PXiHOT1f3cjiVjePb/qvpGf2OIEpnEICKP3AyEcd34w+kr8F0JyBy8LP3wiWmEgzPeMeIa4FHrtdRAGdUGGdDvXD429Q3SFFHzPsqMxsJUnumyIl4SqMRwXYMjejgUqOJvuz75dynvLSCjfwr31H7dWXOvvTOmnngqKMncM1/BUGOg2kGTf6PZacAr1R6OGs5rnyBowEH+CKwnEtEvOaOSy56b5OCJwM3uSk2/6Z53FLLrigyQCMWMeawsZgLkRklCwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sDcyKBGnhfVKL9MV14vCpp1u3vtovcs2UihQKuSPZwg=; b=dBhOgNrjaCELR+YFroUY7uV+T7e0CwqLP4fmTZlKgUCqQFljEv7oMxi8Ke+wS2CyTLwHY7pRDxCtbYeGNLtjBNG8PDDuVg6S2FAYiX4gb7rCbn7LMR0rMfVTFYjdJdkip6Qscc1kezNN/ewaClAIxJaWgt54p1P8OSf8y4+rGfkatDXkbtaPvnoL0ids0iiSdWePgGQh4hSbm8DCbmubPMnstssmec0rqbw74yc1fdw1MWiyk6Wd734cCaT6OMV0ng3hYEe6E47VRmeKvqK1J81fmGjw2qRBLr0LItfq5qillTZNO36K7cEZKum839vgRkWAbxx/1lYSSQBCFW0e0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sDcyKBGnhfVKL9MV14vCpp1u3vtovcs2UihQKuSPZwg=; b=LUS1vhgXF4ztdBXucAcpDvzDaygEaM9pa1ENtRdWSLN4VCPKTdR0KU/pBQbWOSn2eqhgJG8t11dHnjeqXFVfXX/mlYXcn9H2rGGchalP5oeBMuXfhc4+OsADC7jepLjCP+G8lcHdcvgT6oPUfYhoYKItLwA2+pShIkq4KwkoRTA= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 03/20] fuzz: add FUZZ_TARGET module type Thread-Topic: [PATCH v7 03/20] fuzz: add FUZZ_TARGET module type Thread-Index: AQHVz1YcpvhXbPp/Y0+K3YHEi9Rxiw== Date: Mon, 20 Jan 2020 05:54:43 +0000 Message-ID: <20200120055410.22322-5-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 57aad507-e68a-4680-632b-08d79d6d3f55 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:229; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(4744005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ErgJBw/XTsOxJbI7hTMnC3LcatxN2AW98ot1xohKEa6eYf0s0VjdmsfGg1Arta4GLj3cMQY8iJsC7FKR9aRhOaaWmoWFs2paPe/XuOyuP+Zng4cdi2meoHUu2UAzS5t8XPhzY3+0nT35AoGzASnyd99zRYzJbj+AFG/by49sOsjsezKRLHCKZlsdKHJR1klN+B3PIMUWQvoIjR2DaNN7DrAlT+iwQHMVZixADbnTBimN4MkVmruy7fxfsCoF6kkoG/s//GK5D/WycjEHHfAJE5e3/7hz2bkjEO0Hm5NpqX9IVuxwheDypPZdd33ZY3Eqjinr3Z6tNMy1GAupJApnVQPx1h3Gn/WMHYSnU3Nglp2j63L/u9NTSkquQSPgBg41E9SbRFlbg/bik0evfmVbvGZ5mS/H1DOqqR3mYW9PRAUhu09mRyjpEWiAKdDt7Iyj Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 57aad507-e68a-4680-632b-08d79d6d3f55 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:43.9029 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 3s60BPWYf/bcWq2pMfsSJE1I9gfrpPM56tBSr3ZzWGaTMzOHUC/uzR3QwsIFTRJp X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.115 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: "pbonzini@redhat.com" , "bsd@redhat.com" , "stefanha@redhat.com" , "Bulekov, Alexander" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- include/qemu/module.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/qemu/module.h b/include/qemu/module.h index 65ba596e46..684753d808 100644 --- a/include/qemu/module.h +++ b/include/qemu/module.h @@ -46,6 +46,7 @@ typedef enum { MODULE_INIT_TRACE, MODULE_INIT_XEN_BACKEND, MODULE_INIT_LIBQOS, + MODULE_INIT_FUZZ_TARGET, MODULE_INIT_MAX } module_init_type; =20 @@ -56,7 +57,8 @@ typedef enum { #define xen_backend_init(function) module_init(function, \ MODULE_INIT_XEN_BACKEND) #define libqos_init(function) module_init(function, MODULE_INIT_LIBQOS) - +#define fuzz_target_init(function) module_init(function, \ + MODULE_INIT_FUZZ_TARGET) #define block_module_load_one(lib) module_load_one("block-", lib) #define ui_module_load_one(lib) module_load_one("ui-", lib) #define audio_module_load_one(lib) module_load_one("audio-", lib) --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579499836; cv=pass; d=zohomail.com; s=zohoarc; b=M54Z8HYYGyrPcMA5i3+zie8C/J066+h50/DEg+oKHV+NzA9S0XVWn3Wd8NH8p4jyu5lbWMhszfPAgurttUcOyXc/S8dUQX8VP0ILfwtHRCCdhQ9V9hnTJCMabZ16U70bolnoS3ITrLTjq5e2EGbUwz75WKjV1X4YHhQDZDmQmwo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579499836; h=Content-Type:Content-Transfer-Encoding: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=ZKcOoJCL17pZWw8iaVvIqTC73gmiBUaK4eT5muvua7g=; b=M+BsWqe3A9tg2oATfP8ECGhFcg3qXVG44Hey1h1sfAZzit3cTQcuNWpORogkg1bYo2zSMY5I7hCbd71a2uUvEDdeUs2eMFVoetmeN/cyce52GpYEsEF1t5YqZq9J+zmOuqAZddjMkDNJ2EcMhXpYwokVVpZZ6neU065qARZvJmM= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579499836083726.647653036316; Sun, 19 Jan 2020 21:57:16 -0800 (PST) Received: from localhost ([::1]:58876 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ3m-0000T6-HB for importer@patchew.org; Mon, 20 Jan 2020 00:57:14 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35182) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1P-0006pT-KM for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:48 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1O-0006IC-Fp for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:47 -0500 Received: from mail-bn7nam10on2110.outbound.protection.outlook.com ([40.107.92.110]:23840 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1O-0006Gh-Ae for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:46 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:45 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:45 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DCeSI3rXWPLC8/PicHQRvM2HzPjlz0WlEF541nmzfl1XlXO9zCVxRi9AvNkCds9/3plGFhOz1vxRo7wZv2tNqoGJIFK/5TB6OKk0Y+Xr9hf0u7PdoU0GqyKhNIVNJM2grGx655LGASvn/vY5NRYysfpn3zzIZPXm76gEMza53MLSma8lq2gt3Nuns6OxkFafCQ39PgLT38XHd1XugscuycyKq9Ee6KygV+G4LYXqSH1Q/fw1a5uzo4rpgL1NdDUIBYDISfq4y6DhXFLU/Ibt8rXUAzv4HP4mxW1wO0AMjDPRHwTv3+APFusPBQyN1cn7hASFGxJopkR10amSMHOxVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZKcOoJCL17pZWw8iaVvIqTC73gmiBUaK4eT5muvua7g=; b=mxrWVcp6ysq2hxpsStavM3UBU/Ld/xeWppJC9KFuMTFkjeBgRwQZADHjZWg9iDYAR+xmwUBj87VzcPPeQdLZIDwMfbXmOdnOIBoDSZ1ER7ViWE3y6vg7lOVh3ZwaZ0JLt75/ko8RHt5ed3psVy/mbeWVvY7FB8Qpul9LrsgVPpVi1WpojXLfm8NUlPxMwCKWNO/F7X5m59f26TAXFtWJH+Z/8YQbmT8cJUO7gdN5NfVQB1J/iZltJGRS3gAsBgYhB6Cm4X5SXCW4V6ZtgxjpbubyjfgSrPvhC3c8wP+IoDyg4fgQXE6nTP2EQvqq92nQ6weaZ+Z4bFJcu6Spee9QqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZKcOoJCL17pZWw8iaVvIqTC73gmiBUaK4eT5muvua7g=; b=x96VEo9Er0IXWCLqFjFS4DcfLEb9Wpc2baQ3wRbivaG5x71ecMA9H3tA45rhQ2X1KS7G6g13CwerW68Fm7oLHeYKuFrb4wSlQHW/Ph3z0jPBhTLGLJE7lBBDwAZDb/mO8l5HltqY2isBVzqBvG1JwuXbcejp/KiKWpEUq+J1Bhw= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 04/20] qtest: add qtest_server_send abstraction Thread-Topic: [PATCH v7 04/20] qtest: add qtest_server_send abstraction Thread-Index: AQHVz1YdkBRcp/nvekGe+H+4f1sQyg== Date: Mon, 20 Jan 2020 05:54:45 +0000 Message-ID: <20200120055410.22322-6-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c0af5f6b-a531-4a69-a917-08d79d6d4010 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bxfh8wO6frw/oVbZkEu3yjqGAjUa/Hy1EbiFD/tv5mXjjfyFekNs6TzuaB9kcEMulR6+wTo6QofYmE+obDyJrv6zg+327LTWYyDnYq2l+euJKaPuS6t1NPMWBoTqb1eAv7kkYrleyllbllvyNRlfMJNeMSaFDMOCC9BhT4+fyHhwYZ3kN5m3G0cwoDZuQ7GDE6CvhiG0KWWgS6jEoPWV+04HgSnmgA6itDTrCUcVqOOMnTk+2hYqI3dTTCzFjnREd6lHFn8KIShR9GJrm3YcOVkcavPZjb17cZDpE0rB1ejo1SggB/U9OxJdkbKZHAAszp/EGPxP/fbSmoMmFCwDZXg6+g5KD4lVkBrOxUOtT7m9RXrPlhk4eNCbETBuS7odd8tc16JYkFpoox20O35i9ZrxV+Fgu9q1/E3++6u5pRhJIsiDEVXBBRZhH5UbPnAt Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: c0af5f6b-a531-4a69-a917-08d79d6d4010 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:45.1872 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: VxW6CNDIOYogVsRl453OzGE6VCFHIRSff8u195CP2q6wPSkWMhK9irHjJi7GCU6Y X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.110 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" qtest_server_send is a function pointer specifying the handler used to transmit data to the qtest client. In the standard configuration, this calls the CharBackend handler, but now it is possible for other types of handlers, e.g direct-function calls if the qtest client and server exist within the same process (inproc) Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi Acked-by: Thomas Huth --- include/sysemu/qtest.h | 3 +++ qtest.c | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h index 5ed09c80b1..e2f1047fd7 100644 --- a/include/sysemu/qtest.h +++ b/include/sysemu/qtest.h @@ -26,4 +26,7 @@ bool qtest_driver(void); =20 void qtest_server_init(const char *qtest_chrdev, const char *qtest_log, Er= ror **errp); =20 +void qtest_server_set_send_handler(void (*send)(void *, const char *), + void *opaque); + #endif diff --git a/qtest.c b/qtest.c index 12432f99cf..938c3746d6 100644 --- a/qtest.c +++ b/qtest.c @@ -42,6 +42,8 @@ static GString *inbuf; static int irq_levels[MAX_IRQ]; static qemu_timeval start_time; static bool qtest_opened; +static void (*qtest_server_send)(void*, const char*); +static void *qtest_server_send_opaque; =20 #define FMT_timeval "%ld.%06ld" =20 @@ -228,8 +230,10 @@ static void GCC_FMT_ATTR(1, 2) qtest_log_send(const ch= ar *fmt, ...) va_end(ap); } =20 -static void do_qtest_send(CharBackend *chr, const char *str, size_t len) +static void qtest_server_char_be_send(void *opaque, const char *str) { + size_t len =3D strlen(str); + CharBackend* chr =3D (CharBackend *)opaque; qemu_chr_fe_write_all(chr, (uint8_t *)str, len); if (qtest_log_fp && qtest_opened) { fprintf(qtest_log_fp, "%s", str); @@ -238,7 +242,7 @@ static void do_qtest_send(CharBackend *chr, const char = *str, size_t len) =20 static void qtest_send(CharBackend *chr, const char *str) { - do_qtest_send(chr, str, strlen(str)); + qtest_server_send(qtest_server_send_opaque, str); } =20 static void GCC_FMT_ATTR(2, 3) qtest_sendf(CharBackend *chr, @@ -783,6 +787,16 @@ void qtest_server_init(const char *qtest_chrdev, const= char *qtest_log, Error ** qemu_chr_fe_set_echo(&qtest_chr, true); =20 inbuf =3D g_string_new(""); + + if (!qtest_server_send) { + qtest_server_set_send_handler(qtest_server_char_be_send, &qtest_ch= r); + } +} + +void qtest_server_set_send_handler(void (*send)(void*, const char*), void = *opaque) +{ + qtest_server_send =3D send; + qtest_server_send_opaque =3D opaque; } =20 bool qtest_driver(void) --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500635; cv=pass; d=zohomail.com; s=zohoarc; b=jVrAX8+Mx/zYjYubT6a1yY0AMDv98x7y0C8kFpmaBEZoZszAlinQ/YWZBK5dkN0sJvC2so9vq+7Smu/NxYyFiIJiojjGufD9gNsTMHUyqEK+Y8lFLffs4OF2tAerK9+OVy6EMwsjDDirwF83gYOgn6PtgoIb4Dyq+twnTOhzSos= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500635; h=Content-Type:Content-Transfer-Encoding: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=6/nC58PkrV1BS/kZeyEjMo6kMm9lskCxHO6QiHS9JfI=; b=jN5Yn3NdV3Xoq10b2M/dYnA1SGgCcfkO4urfPvBuqo9EWDDOtAbt7h0bao01wje+OLJ//sbEvRfAIly6D5YzOW3e60TkFvaxW18gBmKz2Wp58tPrAfErlQ0ccothu/X6SST0rzwgrCTiGfWVykVVJfwtmND9Nd/btDiBoErXFyM= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500635615574.2598890061755; Sun, 19 Jan 2020 22:10:35 -0800 (PST) Received: from localhost ([::1]:59074 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQGf-0007IP-MH for importer@patchew.org; Mon, 20 Jan 2020 01:10:33 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35206) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1S-0006ta-8e for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1P-0006J9-DZ for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:50 -0500 Received: from mail-bn7nam10on2120.outbound.protection.outlook.com ([40.107.92.120]:10600 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1P-0006IL-9B for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:47 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:46 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:46 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:45 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dOhVUCNv0/8m1E9dhWYmm6fLFlKm+gnGFhUhgR2bQbLYjQOrEfAjpo/44w4hY6E24u/0Gy3+7T8hIpP9Fm/rXgHr1HaExkBdxLzQqf8sNKmcj+nr9jisU0biJiF1Sxb3Y8/QCpZm0Ov9lFm/99G1ma8bH5DH40kae2JEDY5N6N4hTnnmhPINu/eVmrSSct7D+Lo9mL/piddM2igNt07mEK9+t8EeFJSAbsJ+9ThtmdXN7m/yXGZauMlC8h2LNqkc710aaTl/P1x0R09ic9QRXj6hHa08481n6sDkc/QzAk7GTqNpKss8RnpEJS8mvEFTAlZmcyiX65rm8FBcQMKDXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6/nC58PkrV1BS/kZeyEjMo6kMm9lskCxHO6QiHS9JfI=; b=NDgWqAniJtEDHwGlMbeAprdduULH1wux0gT5hKonKrlf6OCo8GFeU6t43U5l1lzsz7nwXKTq9YwNopXwOOGILpZhY/4qK/rmJOfg2SOYLYtubr7OBZKS9OCM3lFJ/8HiNuYisoxB0NNcMjEgyHOHpDhCXn5lxGh8cqivrtSSlZEzax0vb6J8/jQDw/28aDfuqzwh4rp5OAymGUJlVX7kd0wGmsauu7tfbFx7S+sG59jGc9QMYeQiafumqhBieirUMhWgwJWwFeM4khI3kJzKASkP+jmFURyiVRcWOxzcLYCAcLvNiTG7jco9f3RufhARtPlskCXF/tUADhfkVbyH5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6/nC58PkrV1BS/kZeyEjMo6kMm9lskCxHO6QiHS9JfI=; b=69X/tkJ4eKaSBSdZWVskjPNPeDEpVK/+4KNWcPRqZOibfz5cmUfZ/5tfTx1/6EUumGLGVR2def7cOIkNOZeU0KRbqpxZ1oeYtbHZWE6HfR1HLyJeQ0932Gr41wVxrWHado2/UEzK9ITTTlMmWwL4wCmFboFpQLbfGOrXQr9H0gw= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 05/20] libqtest: add a layer of abstraction to send/recv Thread-Topic: [PATCH v7 05/20] libqtest: add a layer of abstraction to send/recv Thread-Index: AQHVz1YeeZwutwWwZUK2NRbndcImpw== Date: Mon, 20 Jan 2020 05:54:45 +0000 Message-ID: <20200120055410.22322-7-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 52fa0906-cf65-484f-ec5c-08d79d6d40b2 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:268; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wUpEstNb3IbF5eMIa5Y0KsXaj4pZsU9W7d1gUEGr8+Qw4E8nfl8gpts3UBEvsFdJsrhpkW9xxDuYPDyppL62gnt4D9ouU5qvQqld2JmsHKQjbxwJgFX+N8IbcbHbS8HeLc/R9GM1CfS1y/oFa2QtnY6K/PEZaK8+aPFF5QuuNOtsA4dWKHN0KPVADPmMRzfcn2bSCL6IDBqwUqSfHtgm64SSuCFQEJa/8p1fM1x5BdKs8S81BltbHNMQts+T+zXWjZgBMum46pwuWny/jjlQWhpUAkasPy3037molhI+ARAS2mjd+9CKQT7j+njPh8DI1D1iElaCfiEfe6Pu+S6gsGvVTxzyn+T/nNsDVfjFKhVkEQziFQRsTo4iLiP8xMFMAA9LUPcUHHM+f017WvpO06rFrpjsE71YGha1yCuX9mGmEvrCATH9amxx5v0HUyZS Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 52fa0906-cf65-484f-ec5c-08d79d6d40b2 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:46.0637 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zAsgqfje7xsoO6bE9BDISNqbH12HcGTdzqBMuF0IINJk8ldXCab2VqIHbwAdNw9n X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.120 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" This makes it simple to swap the transport functions for qtest commands to and from the qtest client. For example, now it is possible to directly pass qtest commands to a server handler that exists within the same process, without the standard way of writing to a file descriptor. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/libqtest.c | 48 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c index 76c9f8eade..e5056a1d0f 100644 --- a/tests/qtest/libqtest.c +++ b/tests/qtest/libqtest.c @@ -35,6 +35,15 @@ #define SOCKET_TIMEOUT 50 #define SOCKET_MAX_FDS 16 =20 + +typedef void (*QTestSendFn)(QTestState *s, const char *buf); +typedef GString* (*QTestRecvFn)(QTestState *); + +typedef struct QTestClientTransportOps { + QTestSendFn send; /* for sending qtest commands */ + QTestRecvFn recv_line; /* for receiving qtest command responses */ +} QTestTransportOps; + struct QTestState { int fd; @@ -45,6 +54,7 @@ struct QTestState bool big_endian; bool irq_level[MAX_IRQ]; GString *rx; + QTestTransportOps ops; }; =20 static GHookList abrt_hooks; @@ -52,6 +62,14 @@ static struct sigaction sigact_old; =20 static int qtest_query_target_endianness(QTestState *s); =20 +static void qtest_client_socket_send(QTestState*, const char *buf); +static void socket_send(int fd, const char *buf, size_t size); + +static GString *qtest_client_socket_recv_line(QTestState *); + +static void qtest_client_set_tx_handler(QTestState *s, QTestSendFn send); +static void qtest_client_set_rx_handler(QTestState *s, QTestRecvFn recv); + static int init_socket(const char *socket_path) { struct sockaddr_un addr; @@ -234,6 +252,9 @@ QTestState *qtest_init_without_qmp_handshake(const char= *extra_args) sock =3D init_socket(socket_path); qmpsock =3D init_socket(qmp_socket_path); =20 + qtest_client_set_rx_handler(s, qtest_client_socket_recv_line); + qtest_client_set_tx_handler(s, qtest_client_socket_send); + qtest_add_abrt_handler(kill_qemu_hook_func, s); =20 command =3D g_strdup_printf("exec %s " @@ -379,13 +400,9 @@ static void socket_send(int fd, const char *buf, size_= t size) } } =20 -static void socket_sendf(int fd, const char *fmt, va_list ap) +static void qtest_client_socket_send(QTestState *s, const char *buf) { - gchar *str =3D g_strdup_vprintf(fmt, ap); - size_t size =3D strlen(str); - - socket_send(fd, str, size); - g_free(str); + socket_send(s->fd, buf, strlen(buf)); } =20 static void GCC_FMT_ATTR(2, 3) qtest_sendf(QTestState *s, const char *fmt,= ...) @@ -393,8 +410,11 @@ static void GCC_FMT_ATTR(2, 3) qtest_sendf(QTestState = *s, const char *fmt, ...) va_list ap; =20 va_start(ap, fmt); - socket_sendf(s->fd, fmt, ap); + gchar *str =3D g_strdup_vprintf(fmt, ap); va_end(ap); + + s->ops.send(s, str); + g_free(str); } =20 /* Sends a message and file descriptors to the socket. @@ -431,7 +451,7 @@ static void socket_send_fds(int socket_fd, int *fds, si= ze_t fds_num, g_assert_cmpint(ret, >, 0); } =20 -static GString *qtest_recv_line(QTestState *s) +static GString *qtest_client_socket_recv_line(QTestState *s) { GString *line; size_t offset; @@ -468,7 +488,7 @@ static gchar **qtest_rsp(QTestState *s, int expected_ar= gs) int i; =20 redo: - line =3D qtest_recv_line(s); + line =3D s->ops.recv_line(s); words =3D g_strsplit(line->str, " ", 0); g_string_free(line, TRUE); =20 @@ -1337,3 +1357,13 @@ void qmp_assert_error_class(QDict *rsp, const char *= class) =20 qobject_unref(rsp); } + +static void qtest_client_set_tx_handler(QTestState *s, + QTestSendFn send) +{ + s->ops.send =3D send; +} +static void qtest_client_set_rx_handler(QTestState *s, QTestRecvFn recv) +{ + s->ops.recv_line =3D recv; +} --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500469; cv=pass; d=zohomail.com; s=zohoarc; b=ZtChE0S5Cz3j1Ghye1RpKnbsFmttpz1pvZnMlXo3co7//CWxTfcsaEM2WHpwEDpI2Y+44e0Q33ht+4LQkZ8Bd+92ICNyLwd+Qylu7MRAkaVxzidJs9ussEmHKtfvhzwXHW+Gl69w0DseptiwdbTFtrGqd98RdkkOtVVeFeJnN/I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500469; h=Content-Type:Content-Transfer-Encoding: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=1hQfW9/9q8KnXyTWzkxHml6DPaJtmQZHPkWi5XPf+6I=; b=LifzZ5D3C2FyfoBZs1Ilk1R8f60lb0UNSKfQfyDsf4/vdcZiN10iXJGeLsjLOQOsQzPSwaW/WKBYFPQ5EyOLk7OmUjaBN6MXEl45ZzZ/Iwvee/DbGf9jxYRpcTf0PfEnhiCWCoODDqsMjmwix/XQxd0PP7haDdusyAR2q50PDuQ= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500469095805.0842270454496; Sun, 19 Jan 2020 22:07:49 -0800 (PST) Received: from localhost ([::1]:59044 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQDz-0003pV-OC for importer@patchew.org; Mon, 20 Jan 2020 01:07:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35202) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1R-0006sn-QY for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1Q-0006KG-CI for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:49 -0500 Received: from mail-bn7nam10on2100.outbound.protection.outlook.com ([40.107.92.100]:26271 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1Q-0006Jg-6v for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:48 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:47 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:47 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IH3tfS2m0wesdQk0b03rEq5RyB/9kA6zuATslVpVhtNSvYvfZzoxsclj6ggHikzrLrQhWMmwTm/XLj0NEe0Glwx/sjF6wOR4CqeVDr1t3Cvd5EphC9ru8KRSCt9rZhe7pQ3Bntq56SNGPO4jUJKFX4mpggqRWjQ6Uh5zg1jODx2d/4NzbyGiVATU2ztwD3hEsZhtmUDVubiM65NN3fQ3WItN/EObHMO1kxO3HzhfR0+lWEEnmf12hJYTbBbDRI11PfQoPiInp7V7l4RJ3KvXDKn4r/zCHGsUuxwZHqBEyaeBjlkzWERWUQZ+tFNxJYJeSs7G4vRs2gj+m0YxTtmeDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1hQfW9/9q8KnXyTWzkxHml6DPaJtmQZHPkWi5XPf+6I=; b=B9TPcnwOjDbFXMTr2GNVXxVxrbBs9+plC4/xDyQbF02J01W3hIdWDKHIKuW2bLcevj0isV3BeB5LgUg6pLfzbJTc40cFF9ipTGigaWcBjYLsQVWgvoQUUTvkMibIc0SD1POjtnNeSLJuELVkBeXPYJjNEnbXZmzZmSE5vo+Abnz3fZvTRQkD5S8QbxEIAhcWeqmgQ/x0CHgxXcPFhkGlZ1z2DgIOgmGna+5WeuT9TVuSfQ2TJxZfi7VISiSvyqXDAmgqlvZhsph2xZir0hHJJk/iyxgU7z5d5m311Cijt3x7ZsFTgMRWKrTN8JHv+58xEfIkkVc7c2Rk1vLHGNsrMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1hQfW9/9q8KnXyTWzkxHml6DPaJtmQZHPkWi5XPf+6I=; b=KuXP4vq7cszhrcomA+wDQk8vwNGrpPOrNVut4o02QCojMwpG1w3aDI0Ay2N/NVwJaR/T1VBDeunO2NjyzJ985Ugk+J4RKg0mJX2AtA/b+4qcuwKch6cOUnQHGNOrCJpFrb5g37+nbsb1gWmNiy4BS7iSrSWlEchfsOqylPCO27w= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 06/20] libqtest: make bufwrite rely on the TransportOps Thread-Topic: [PATCH v7 06/20] libqtest: make bufwrite rely on the TransportOps Thread-Index: AQHVz1YerQq3oPWou0yHdFK7g14dhA== Date: Mon, 20 Jan 2020 05:54:47 +0000 Message-ID: <20200120055410.22322-8-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ce5096e1-7eae-463d-8234-08d79d6d4153 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1468; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cvsUY5xfYstO3WDvi6TkcZuBawrtPZSnZ3CFfWPZxCEBwqB7ulEz+m72ikrJyIrAnBJGAzY+34QO+wJzbOQRRaO7UHO/CGTXa2mtKbMLlTU+Pr0+LZ/XP4uT2SspmRnCz4em7GLALqW8N2n1G2wafoGkIIy7fohB1mOszzS7gpUqjVV4UiB9Q0cWYpGmFDLOQ2a0LEp98NdJ8uDGJiyBVf6e8jWGh4uFyHtVOqnwRSwr8Ng7jMN0WKSiCE7N+VqDhHGPxkUeKaebXGyV90esqqXE2ylM0HsioDl1rhvLQoyiB9SSHuNIARIdUMAH+iLZz0oTlGZsLXIBdLN3O7Qtuh9KndD85K3gfE283uPjSN9Bocrax5y+jjJwV6vJ80vJZvF2iX95PR6Vbl3iXog3uPY9JIg01Szg5FMa/RPyoyfo2Weevyxs7xRzKgs7XRWD Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: ce5096e1-7eae-463d-8234-08d79d6d4153 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:47.1611 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: f/cBx5OhhT7kyOtn3iK3tzh5A1G8GYHtulXBKa8+w6EztP79F2VEyATTevSea1Vv X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.100 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" When using qtest "in-process" communication, qtest_sendf directly calls a function in the server (qtest.c). Previously, bufwrite used socket_send, which bypasses the TransportOps enabling the call into qtest.c. This change replaces the socket_send calls with ops->send, maintaining the benefits of the direct socket_send call, while adding support for in-process qtest calls. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/libqtest.c | 71 ++++++++++++++++++++++++++++++++++++++++-- tests/qtest/libqtest.h | 4 +++ 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c index e5056a1d0f..49075b55a1 100644 --- a/tests/qtest/libqtest.c +++ b/tests/qtest/libqtest.c @@ -37,10 +37,18 @@ =20 =20 typedef void (*QTestSendFn)(QTestState *s, const char *buf); +typedef void (*ExternalSendFn)(void *s, const char *buf); typedef GString* (*QTestRecvFn)(QTestState *); =20 typedef struct QTestClientTransportOps { QTestSendFn send; /* for sending qtest commands */ + + /* + * use external_send to send qtest command strings through functions w= hich + * do not accept a QTestState as the first parameter. + */ + ExternalSendFn external_send; + QTestRecvFn recv_line; /* for receiving qtest command responses */ } QTestTransportOps; =20 @@ -1078,8 +1086,8 @@ void qtest_bufwrite(QTestState *s, uint64_t addr, con= st void *data, size_t size) =20 bdata =3D g_base64_encode(data, size); qtest_sendf(s, "b64write 0x%" PRIx64 " 0x%zx ", addr, size); - socket_send(s->fd, bdata, strlen(bdata)); - socket_send(s->fd, "\n", 1); + s->ops.send(s, bdata); + s->ops.send(s, "\n"); qtest_rsp(s, 0); g_free(bdata); } @@ -1367,3 +1375,62 @@ static void qtest_client_set_rx_handler(QTestState *= s, QTestRecvFn recv) { s->ops.recv_line =3D recv; } +/* A type-safe wrapper for s->send() */ +static void send_wrapper(QTestState *s, const char *buf) +{ + s->ops.external_send(s, buf); +} + +static GString *qtest_client_inproc_recv_line(QTestState *s) +{ + GString *line; + size_t offset; + char *eol; + + eol =3D strchr(s->rx->str, '\n'); + offset =3D eol - s->rx->str; + line =3D g_string_new_len(s->rx->str, offset); + g_string_erase(s->rx, 0, offset + 1); + return line; +} + +QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch, + void (*send)(void*, const char*)) +{ + QTestState *qts; + qts =3D g_new0(QTestState, 1); + *s =3D qts; /* Expose qts early on, since the query endianness relies = on it */ + qts->wstatus =3D 0; + for (int i =3D 0; i < MAX_IRQ; i++) { + qts->irq_level[i] =3D false; + } + + qtest_client_set_rx_handler(qts, qtest_client_inproc_recv_line); + + /* send() may not have a matching protoype, so use a type-safe wrapper= */ + qts->ops.external_send =3D send; + qtest_client_set_tx_handler(qts, send_wrapper); + + qts->big_endian =3D qtest_query_target_endianness(qts); + + /* + * Set a dummy path for QTEST_QEMU_BINARY. Doesn't need to exist, but = this + * way, qtest_get_arch works for inproc qtest. + */ + gchar *bin_path =3D g_strconcat("/qemu-system-", arch, NULL); + setenv("QTEST_QEMU_BINARY", bin_path, 0); + g_free(bin_path); + + return qts; +} + +void qtest_client_inproc_recv(void *opaque, const char *str) +{ + QTestState *qts =3D *(QTestState **)opaque; + + if (!qts->rx) { + qts->rx =3D g_string_new(NULL); + } + g_string_append(qts->rx, str); + return; +} diff --git a/tests/qtest/libqtest.h b/tests/qtest/libqtest.h index c9e21e05b3..f5cf93c386 100644 --- a/tests/qtest/libqtest.h +++ b/tests/qtest/libqtest.h @@ -729,4 +729,8 @@ bool qtest_probe_child(QTestState *s); */ void qtest_set_expected_status(QTestState *s, int status); =20 +QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch, + void (*send)(void*, const char*)); + +void qtest_client_inproc_recv(void *opaque, const char *str); #endif --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500020; cv=pass; d=zohomail.com; s=zohoarc; b=kJ+NFzjQUYVk93XmKrolh6WmNUcXyDS8/JjWgWopEO0HIvX/3F/IBSj5SS4JgNJZh2/PMJdEnF+XIggtA1Q6W82T7+J3suQkc4+pVPCehVdvIQfEkx2nEJNrSlwGuhSAAmzzB4O4zZRuK5xsUANkwTxV1bQHQtEZB0qHStRNq4I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500020; h=Content-ID:Content-Type:Content-Transfer-Encoding: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=Ns3uR7r40f3Hn5it1jv0Pcc2ZA1fNyAHsn2M9Jhx4kw=; b=EfBk0ZldtZeiXC8dyPv+eiRmpyC+gLttATljrgD/lzkYkBjI2ePrEUrSoQgJB4smvv9b1nC/FfEGBMvE5eBt+bOTSGK3Bl1tU8osb18dSSJuwVnb0fcwliTPF8FyLdgc3Fq6dJ0cO3gkDogSAer/VmWFCayCvha9AJME9Y8h0pI= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157950002076430.492035177861226; Sun, 19 Jan 2020 22:00:20 -0800 (PST) Received: from localhost ([::1]:58900 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ6k-0004SH-SN for importer@patchew.org; Mon, 20 Jan 2020 01:00:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35224) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1T-0006vQ-HD for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1R-0006Ku-Nv for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:51 -0500 Received: from mail-bn7nam10on2111.outbound.protection.outlook.com ([40.107.92.111]:52129 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1R-0006Ke-KN for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:49 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:48 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:48 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UajoMDR0z0s+gIx0Difv6eGqE+d7LwvuYVy2N3L1da2nV1P7o2XzegcJQay+UTVKKTwHnoIsdXFDrtm607nCI7jXO8R7PHikryTsgm3QejbQB+jQdjQ8p51imaVHJdQ6K282fkkMmnitsug3WafWdCA+x/eOws5jIGXAG62HL/vutc6jufw57ediBI5/mnEhVxUDnXQFOoIJyyJQOj48MCVi+AQ9jZApn0vuY0VMKBoS3+JcmcVipigcUZwboHD4wB8A1x5DGCk6xEItL80bOTi14oDUXll/uMJgv8AhSwxV4TwMTgLPSNFaB1JjTLTHCVk2SorfEaOlFamQkUhNoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ns3uR7r40f3Hn5it1jv0Pcc2ZA1fNyAHsn2M9Jhx4kw=; b=cXOrHCC0aGCiCh5DbAFen5Pe61D3WKAzlMu4Xle9XVqR2JCELef30KQ73Suwy/1yp2JzwMaB90rs9GBLDdPWrmrNign5ZgZ2hPyghPDXQP6EJiOAX+AkjtOtcZXbGL3fvKVaUANiI3YxnB1ZIiQbSeoYzgks+hYcluH2Lc445oKq5u/UU5TW2cNU4psIvVrB1a/Rc+LaZwnsuGxyJos2XzZKZXnPJ5p+Hd7xVJq0Paa5/0l7QULxKna2SYqGYUHzmdF/+dNO1pkaWeCZ1b4ZNZE2z1s3t5AQX79zRbNXO76Tg3SeOZqVQ3rl/KhQ6OY2XTvfBdpKteZT1I8kNKTjzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ns3uR7r40f3Hn5it1jv0Pcc2ZA1fNyAHsn2M9Jhx4kw=; b=ByAs60aCEqoN62BOOKTI58V9R9vNatVhdg9zWQlyp22anTalupYB/7UIARozHbRvgqWhmmsqIJH599APVZlvwy4uy5KRAmj+2kFva7V7H3tcekWoeVO/Iwyz3AXKucZB9Fn3mrocJ14W20wBBxCwwuj2pqWVHZxAfJoWwONR508= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 06/20] module: check module wasn't already initialized Thread-Topic: [PATCH v7 06/20] module: check module wasn't already initialized Thread-Index: AQHVz1YfW+Qp8n0VzEqKKJ29h5/4EA== Date: Mon, 20 Jan 2020 05:54:48 +0000 Message-ID: <20200120055410.22322-9-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ba4366fa-c1c1-4608-fef6-08d79d6d41e4 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4303; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RwmlOT5KGh9QR0oFE6rfZVBVw4K3qv5SRIZtZ3rwVhhKNsz59w6ybno9YEE0rTjxs3uLcY6JyA+rElN5mgbj6Q6JshUdI0ZxS7Uv5aoPBg+LZ1gOUkLTZk0CiydQwhnf4fjjWTXffFYIPCH9/F6DPUVljGl+c0Wibfy15VWC1ORP2j+RdITWFBdlSm1SUkxQD3hKI5FnSEA4IjMSXwm5ZwRUCRZsXWowvK6AzsE480CZoGms30VwIxPNgC6HBuorhxfqfuNkQbzNs1RUaCo/mP2sMVuuoAVY7Dgy/kbuCXDfBiWPnoVRGCfpBQMyI7tP0WvNd2j5E0ZsGKSJA+e2AfsY/Zak4BLdjH+wPcD0mb0Y9SRNbeIsXGtusyD+kEq/n967uiQLzCPvMZd0wnUETaNdWGcED95LZ5TDYfJIT+o0zoOZ2I8rviDRqqD5csZh Content-Type: text/plain; charset="utf-8" Content-ID: <567CC6D7B947CD40A75121299F6039B1@namprd03.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: ba4366fa-c1c1-4608-fef6-08d79d6d41e4 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:48.0766 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 5PGYoxb8wQ8ad23VHmisfqg51pq6R7t3NLsfvQxj3xE8+OvDTOaRNhUGN3ERSn/0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.111 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: "Bulekov, Alexander" , Darren Kenny , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) The virtual-device fuzzer must initialize QOM, prior to running vl:qemu_init, so that it can use the qos_graph to identify the arguments required to initialize a guest for libqos-assisted fuzzing. This change prevents errors when vl:qemu_init tries to (re)initialize the previously initialized QOM module. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi Reviewed-by: Darren Kenny Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- util/module.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/util/module.c b/util/module.c index 8c5315a7a3..236a7bb52a 100644 --- a/util/module.c +++ b/util/module.c @@ -30,6 +30,7 @@ typedef struct ModuleEntry typedef QTAILQ_HEAD(, ModuleEntry) ModuleTypeList; =20 static ModuleTypeList init_type_list[MODULE_INIT_MAX]; +static bool modules_init_done[MODULE_INIT_MAX]; =20 static ModuleTypeList dso_init_list; =20 @@ -91,11 +92,17 @@ void module_call_init(module_init_type type) ModuleTypeList *l; ModuleEntry *e; =20 + if (modules_init_done[type]) { + return; + } + l =3D find_type(type); =20 QTAILQ_FOREACH(e, l, node) { e->init(); } + + modules_init_done[type] =3D true; } =20 #ifdef CONFIG_MODULES --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500796; cv=pass; d=zohomail.com; s=zohoarc; b=mQw4sniRLNnNOzmxdn9gPjq0z2aGK32gFDlwhpnP7rGyyIan787/VuMkBl4iDJg+4QilbmRl9y4fTUBX4hWEvfGLNCRwsw1zM8FHmdnXLRCWaJecx5lOefYD71o2gk7K5zSkfLocKZ5BeVQTY9DpGpOBRLjOsX4j8tUNk6kPZPo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500796; h=Content-Type:Content-Transfer-Encoding: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=9pyU+EWwWoz7a+tVKk2F3sx5oHPPmQUWy8kzp3v+g28=; b=e4XjBrRKKEtZhZiyJT1A1ywHbEYHl21HTuaTST2t5r2f5ZYrsDTXxuHsgqkt54UDQHGeLU9o4851d4GNCS40j4j3lfK/7BL5LsmiLQAox9xcH86Nnu2SODRVOBsaVkU0BrcGWaz1SlVueOTnWJt9zXphotxQxQ97rBGmFYoPYWg= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500796837744.475848900034; Sun, 19 Jan 2020 22:13:16 -0800 (PST) Received: from localhost ([::1]:59112 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQJH-0002rI-H0 for importer@patchew.org; Mon, 20 Jan 2020 01:13:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35227) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1T-0006vg-NH for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1S-0006Lc-JT for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:51 -0500 Received: from mail-bn7nam10on2100.outbound.protection.outlook.com ([40.107.92.100]:50976 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1S-0006LJ-Ek for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:50 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:49 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:49 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:48 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bXu0FDJyTyX914mp4wG1TUX+ZrrUO7FUAB37fk0SzRfz+JH5LvgUxWweWyIlSp5kVjUkvY0CgQAI7WZl5q/ZLF0UvwJyvyLdDuWI5Hju2KnJfQEABuWGWFMdBexMX2qOi0kQHBiUcO0uBh1aS38L8SywUWRZ1Prtm00F1weqvNdV0gYnyZcXeQ6Vw2OQ297Zguv5lp0V9ZRBSbxPJrmhH5jNb5ZJt3FMUcxQE0IuVS3EfkQYKtYRupTbI/GjmAdkzFNyzn9RtFiqip/mCPVblNIeugvhixc3CLWINZQGdxNFdHm+KHppfOb+ylwFdIc8XF4j5ProKeGj2ktg5ovJhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9pyU+EWwWoz7a+tVKk2F3sx5oHPPmQUWy8kzp3v+g28=; b=c+MuDu8wPvu9ciEbAIb9fe//4mDx/uuKq1VUAPxfUTl8hWgwjv6gUd3saaWbRDt74XrtjfsypOihlAi9l/YxaP3r2OfjGHErCipJO1f6DE/En0WLDlqjHadiQkXo75SGkxevC4LWW6c5HuG2ysRKsZYo97tvslz1L7TrT7DMXxHBV68ycokWmvnl2HDEB/zQ6m3dtqiaiJ+QHglq81jg73e6eMQanx4uzu0o/uUFGoQDuyy22ifEnhvqwGwDK/EXHeN1L1f6VDZKGvnzrVCx8k4C9eq7yayF1RYNDYLqF24N71BBcCJee1fBOCAh2XdsSv8dF0vW4DS/x3aShZMaSQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9pyU+EWwWoz7a+tVKk2F3sx5oHPPmQUWy8kzp3v+g28=; b=QQuFAISVCmnAaKk/4H0/jCB8E+EU5wKz1X4EsbMA6mLKRZXdS/Il2k8+xsgk5gxIoy0M7XGfNggaKuHFsBRkC6lYIHP4VCrIpAS75LbDTDW42TsCIQW7ArbwXCFkZnkfhiRr0OvSoKV0iZ20C0P7/Nr8sdlUxSxW6t4RKNPSB68= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 07/20] qtest: add in-process incoming command handler Thread-Topic: [PATCH v7 07/20] qtest: add in-process incoming command handler Thread-Index: AQHVz1YgoQju/shf0UaMzvpGLh31iw== Date: Mon, 20 Jan 2020 05:54:49 +0000 Message-ID: <20200120055410.22322-10-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3655422b-51b4-400d-3228-08d79d6d4274 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1824; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: xzafJe02tG9xcDredDAM1GSDYwafJXE3yA/E9YcTrr6M4hKr/Qkps1EsMZhokxh+VB6FpTRu2Xz44lKjK4mf9xrpXhY+5LBGjYFqROFlI/DUIvNghnUxkhrGHAuJYxfn17NGwVpM8iG5aT0MCR6WfoS3lJF3a+JQm/h5CAMAvkr8tW+5dcPCp8SP0TeA7xYLql3cDH0RJMbG5judkDcgeCJ3DORddVSoLjfqhDv8s+uH4uZyuq9DUQeUYNecrrFgNjX3dJ6dYI4gNQV1XavxF/JOToRheXcFtHBlz7q9BqhJiIl994l+n3drXEu8IGxoNFp5cuuG+knXnMvOnBRE9p9t7c03i/Y00BqDM71Gw/FneNPSdLCOlXW/3bOEps2hawZvQZBEYAQa9PmovcuSQmQZidQjNDbawp+h7IweUMnLiWWesRLSm5VAfaH3qrau Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 3655422b-51b4-400d-3228-08d79d6d4274 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:49.0100 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: JkuWTMVLwgQrx6LgECgE2a6Sj1atFDzJ1EY2amF68bz6kznndtRhO9GfINLqWUyk X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.100 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" The handler allows a qtest client to send commands to the server by directly calling a function, rather than using a file/CharBackend Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- include/sysemu/qtest.h | 1 + qtest.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/sysemu/qtest.h b/include/sysemu/qtest.h index e2f1047fd7..eedd3664f0 100644 --- a/include/sysemu/qtest.h +++ b/include/sysemu/qtest.h @@ -28,5 +28,6 @@ void qtest_server_init(const char *qtest_chrdev, const ch= ar *qtest_log, Error ** =20 void qtest_server_set_send_handler(void (*send)(void *, const char *), void *opaque); +void qtest_server_inproc_recv(void *opaque, const char *buf); =20 #endif diff --git a/qtest.c b/qtest.c index 938c3746d6..ad6eb6a526 100644 --- a/qtest.c +++ b/qtest.c @@ -803,3 +803,16 @@ bool qtest_driver(void) { return qtest_chr.chr !=3D NULL; } + +void qtest_server_inproc_recv(void *dummy, const char *buf) +{ + static GString *gstr; + if (!gstr) { + gstr =3D g_string_new(NULL); + } + g_string_append(gstr, buf); + if (gstr->str[gstr->len - 1] =3D=3D '\n') { + qtest_process_inbuf(NULL, gstr); + g_string_truncate(gstr, 0); + } +} --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500308; cv=pass; d=zohomail.com; s=zohoarc; b=HL5n9/TZ4KPTZjUrgB2kbCNWGDqC+3PBO8JseGcTQTzHEjxE+eMqqkZLoVZpamSQfgLqkqRGloHtkhIDaAB3UjTPlbaTErO4hagLPTQA7HNV4Vm+nRv77ayF1dW+vJh2+zBXNiUbfi2nJFtoyKzbBJMWHSxfkXVQi4tZw0jPCIc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500308; h=Content-Type:Content-Transfer-Encoding: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=t5mnk3e1ZGtlIjME4MaJ9YJ8gCqwJraw8SK866ibAro=; b=E6du673B6RrMqxXHyiH5aHtMIFDm+k7EHrW0SixU0HZIlkPbx0o3OMrNgVbChVlU4+4ECiJcZ5+WLI9wLLTYQ7Q9JhRyaNlqtQfmYQpeA6xHbRU5XndiLrfs2AcAJYr+Nj32AecRHcgeJ+6w6aYLuwqWI6sOikrEqumEq+pK9Eg= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500308664688.7834622687537; Sun, 19 Jan 2020 22:05:08 -0800 (PST) Received: from localhost ([::1]:58952 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQBP-0000Q2-3L for importer@patchew.org; Mon, 20 Jan 2020 01:05:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35245) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1V-0006zz-KY for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1U-0006Mi-A3 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:53 -0500 Received: from mail-bn7nam10on2105.outbound.protection.outlook.com ([40.107.92.105]:16480 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1U-0006MQ-69 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:52 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:51 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:51 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=b2v28xZbeNaSNijRlxv8eX9Ne5nVDvhxWSUMS90n/FtNjq0xcEmh1qNX17vEhp2DsMJYwAoSRW84VQjxm3LHcWF7qA+QCkEsz/wlE8fA8OlBrgMlX2ax4Dkc9YSP2HbR3h1mq6TRVgeLvXprXWm3nlEthN+U/UF56NO8XL+/mkBQi0VkhgUkd5/dFEZrztfhnTlqmDuLkPHCnHlCoHQ78FJhaoGacnjCDQ9xalMai95P+ECR1iAHz1yg8JTdTasyeo7BxyUTcXtTJvtngZ5usvzs1vouLXYadG6bJN4BDsxXEKQoKjsUvIzKj+CdLMY+mrNM1zaMjbkejN3N4vRWBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t5mnk3e1ZGtlIjME4MaJ9YJ8gCqwJraw8SK866ibAro=; b=HRlyq/wiota1IOHHRq37YK1RRJ6WIMLroMgwHfBwX3agu85fUMdw0Z6KemHN6VMyApz19uDm13AM+oui2aELMP0dk0BN9tLWb0yAmGDXFu2voJrRaw74Mh06hKjHBNVzFf2GgHKbTc9rGTbjSRlaqet8dOLxYo0zONe3AlTOuA3k0ZdZzGHwx6O0xAFXJODHaZMWFngnZiYhnnTAmUWE2hmtUPxdwfIRGQWfiN+AWi6BfSdn6gDh3eqslL7QBXthclDzNFbqkELXdh9tByxaw7Al0CdCFXl/5rabDrrLxEPdk0wzEuXOUpRJrgZb/qf/s6OzVMmvdwEIlDSAU/7iaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=t5mnk3e1ZGtlIjME4MaJ9YJ8gCqwJraw8SK866ibAro=; b=gi+vMe08OEhskVyptrkxQ3/QwXRXqp5RtKVMHvHQPpHxF8N/ian6i7ZE0QIXEkyX2yvvUG+HqvunXj4ONiy90B+fAkMXtoCYoOhNIYCJ873woX7gM2/YkNSTVWvV7fsTBQXr5XozWM5SzSiwB1oIKKmu1HWXwUBzeZp+BmNcYn4= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 08/20] libqos: rename i2c_send and i2c_recv Thread-Topic: [PATCH v7 08/20] libqos: rename i2c_send and i2c_recv Thread-Index: AQHVz1YgwLFsz+oGWUCMZttkvWf3qQ== Date: Mon, 20 Jan 2020 05:54:50 +0000 Message-ID: <20200120055410.22322-11-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f6f07b84-d7fe-4aee-3505-08d79d6d434d x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3173; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(6666004)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LI6ntX0QcwPzgPCSAAxMX0ZTeKHUt2hsN5Syexe+V/ijVEh69QvGdFEssAh1TB8ldjn72TNCkGI4zPDW56gd5TaA1KC9reP2CKYXlZlHNOIcAvS/VpnINqyp1gNN7rZ6ak3sKiSXn3dRCjY2I5i8F1ijixOfWz1JlEkVRoswCRefmOt804BhTfYmaq8rhOmJvEjWZRWqiEUp4NO7yobeCxIzerHldM11Q+5dfFAZxRr3/ALHJaCLJ/euJ8ELot0TFS6SO8PS02pbPzsPcE4yRZEzKcrfReid7ITWN9iZb15fBnFZTubmHyRpCntO7TB9CC7J+F3Lyr6Ztb6gf7vVHbgUBFEmTmhkUOTEqIYTpGQuiyowpLeythi4c8B3idHDmCF/rjKZnxi97nfyDFr9AualtQS5zVvjmjiyJEd5TsjY7w4WA16TpICKrFWCjlo3 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: f6f07b84-d7fe-4aee-3505-08d79d6d434d X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:50.8910 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7zDRVTUcgUsFwZo1D+6NZ95LqmMkoI2f3futoUzcBYHihpYU6PsyBwOS83FtHgX6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.105 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" The names i2c_send and i2c_recv collide with functions defined in hw/i2c/core.c. This causes an error when linking against libqos and softmmu simultaneously (for example when using qtest inproc). Rename the libqos functions to avoid this. Signed-off-by: Alexander Bulekov Acked-by: Thomas Huth Reviewed-by: Stefan Hajnoczi --- tests/qtest/libqos/i2c.c | 10 +++++----- tests/qtest/libqos/i2c.h | 4 ++-- tests/qtest/pca9552-test.c | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/qtest/libqos/i2c.c b/tests/qtest/libqos/i2c.c index 156114e745..38f800dbab 100644 --- a/tests/qtest/libqos/i2c.c +++ b/tests/qtest/libqos/i2c.c @@ -10,12 +10,12 @@ #include "libqos/i2c.h" #include "libqtest.h" =20 -void i2c_send(QI2CDevice *i2cdev, const uint8_t *buf, uint16_t len) +void qi2c_send(QI2CDevice *i2cdev, const uint8_t *buf, uint16_t len) { i2cdev->bus->send(i2cdev->bus, i2cdev->addr, buf, len); } =20 -void i2c_recv(QI2CDevice *i2cdev, uint8_t *buf, uint16_t len) +void qi2c_recv(QI2CDevice *i2cdev, uint8_t *buf, uint16_t len) { i2cdev->bus->recv(i2cdev->bus, i2cdev->addr, buf, len); } @@ -23,8 +23,8 @@ void i2c_recv(QI2CDevice *i2cdev, uint8_t *buf, uint16_t = len) void i2c_read_block(QI2CDevice *i2cdev, uint8_t reg, uint8_t *buf, uint16_t len) { - i2c_send(i2cdev, ®, 1); - i2c_recv(i2cdev, buf, len); + qi2c_send(i2cdev, ®, 1); + qi2c_recv(i2cdev, buf, len); } =20 void i2c_write_block(QI2CDevice *i2cdev, uint8_t reg, @@ -33,7 +33,7 @@ void i2c_write_block(QI2CDevice *i2cdev, uint8_t reg, uint8_t *cmd =3D g_malloc(len + 1); cmd[0] =3D reg; memcpy(&cmd[1], buf, len); - i2c_send(i2cdev, cmd, len + 1); + qi2c_send(i2cdev, cmd, len + 1); g_free(cmd); } =20 diff --git a/tests/qtest/libqos/i2c.h b/tests/qtest/libqos/i2c.h index 945b65b34c..c65f087834 100644 --- a/tests/qtest/libqos/i2c.h +++ b/tests/qtest/libqos/i2c.h @@ -47,8 +47,8 @@ struct QI2CDevice { void *i2c_device_create(void *i2c_bus, QGuestAllocator *alloc, void *addr); void add_qi2c_address(QOSGraphEdgeOptions *opts, QI2CAddress *addr); =20 -void i2c_send(QI2CDevice *dev, const uint8_t *buf, uint16_t len); -void i2c_recv(QI2CDevice *dev, uint8_t *buf, uint16_t len); +void qi2c_send(QI2CDevice *dev, const uint8_t *buf, uint16_t len); +void qi2c_recv(QI2CDevice *dev, uint8_t *buf, uint16_t len); =20 void i2c_read_block(QI2CDevice *dev, uint8_t reg, uint8_t *buf, uint16_t len); diff --git a/tests/qtest/pca9552-test.c b/tests/qtest/pca9552-test.c index 4b800d3c3e..d80ed93cd3 100644 --- a/tests/qtest/pca9552-test.c +++ b/tests/qtest/pca9552-test.c @@ -32,22 +32,22 @@ static void receive_autoinc(void *obj, void *data, QGue= stAllocator *alloc) =20 pca9552_init(i2cdev); =20 - i2c_send(i2cdev, ®, 1); + qi2c_send(i2cdev, ®, 1); =20 /* PCA9552_LS0 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x54); =20 /* PCA9552_LS1 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x55); =20 /* PCA9552_LS2 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x55); =20 /* PCA9552_LS3 */ - i2c_recv(i2cdev, &resp, 1); + qi2c_recv(i2cdev, &resp, 1); g_assert_cmphex(resp, =3D=3D, 0x54); } =20 --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500024; cv=pass; d=zohomail.com; s=zohoarc; b=ht1fQUxANMgH3f/1oOeX1uieF/F5lHzCA1pMfwK4dWHwbW4k43/TTRFjSMWxIZin8bztmwDewmBDiXr7KNhYx3UYRoM7DjcOSCdcY19YGwYKqJvhwNbnAMmWyi5Fokdqe6hCk09bUdaANjuz2vmTHG3Q5TBIL/DfWQ/J57XfUYM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500024; h=Content-ID:Content-Type:Content-Transfer-Encoding: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=BMCyJN3nzC2ixzb7DkXR5cQ3SesaeOMGZjfVp8Oc6oQ=; b=cqJjAZ5B5i/9wxcQx+/oixDGe0g5HUPpuUuivj3lUFWU6WhC/JBQVgq8hBjMlPMBsBEFc2XUIjt+Id9/2GGksQa8uY30mclhRGNCqH29s8iW855f05GpeyGhBHWE4U20FcTnt9KpQEURNXy9QbEfpwBU7vQXA3pDLT+CjLRrgBo= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500024635394.9720660871142; Sun, 19 Jan 2020 22:00:24 -0800 (PST) Received: from localhost ([::1]:58902 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ6o-0004Wt-JI for importer@patchew.org; Mon, 20 Jan 2020 01:00:22 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35264) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1X-000732-Mh for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1W-0006Ng-68 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:55 -0500 Received: from mail-bn7nam10on2126.outbound.protection.outlook.com ([40.107.92.126]:17071 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1W-0006NK-1i for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:54 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:52 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:52 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZRXm82yreJnXCIHCSaIFxcRSpdlz9PTO2Cih8JceEZjTGk7Ck5Zmynov7hng6n6W97fQQBVpathX/YSgGWrY/ZtYSDmesuna80Ah7nFXWZdQAOqwDgQ+T+okLU8DSixYeKBHnVxBqoggU9FK9FzLF4FlyJWnfZy9+BreFn+P4S1NRDS5ihyNUOJkaZZwT+GgAhzW3fZV9lHGRfMytIri2gMAJNbMYd9AuWDoQl7ViwXEiU74AhEWNOjzOc+ghZ+B8in1Ka5+O8UC/1oO4MHC7ETP0QiCORIt5aPqzOcXlzhSVEC8BjuR7HsZKOfb5YR/bnNmk8ejS/DG1RszxxRVdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BMCyJN3nzC2ixzb7DkXR5cQ3SesaeOMGZjfVp8Oc6oQ=; b=iKXDiuTWD096P1dARlL0VAXzLkQUgpk776vKp1DXJF7fltHH3Oz4P4dw4SOU+3DuQa9yFIFpLO66+gQY5+AFuyOFx7P+SspDrFX3VFpnc12I0kfTLxf+vX62taTPYgkoFCn08fpfWDn7l+TgdDhHQMewKz3PVPPPGM0PQ+d9mjeC1DYnxQSIVIJ92+lEXE95bQZs2cYNLQwUzgJzr+5n63OOYeziKC8LyNQuBEcQLMzFxcZwcUDD85lueO59QjHrrEvfYfSuSVr2OvB+/skHtZGnv3GyxDXUCKyVSj+RZo/EuXkjQYLJiySZVTAFFjYVY5oDcR6F5zB0DJxjR+iYGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BMCyJN3nzC2ixzb7DkXR5cQ3SesaeOMGZjfVp8Oc6oQ=; b=LfEqZIzoeiIt3dQWcU4T3MTFKsFm0rHKZSaYKNUgtePJqVuHZiPlHXY4kmSevJHsWpUq8Er1jlusOMIdPyTm2RpEsiMrd1MlZhYKpZu+i1hjsD0lY9LMms43ouoRZ+OgV4sVXddJtQreP8aYU5M3eVT3I6OX/YX8qxTR3w8toVA= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 08/20] libqos: split qos-test and libqos makefile vars Thread-Topic: [PATCH v7 08/20] libqos: split qos-test and libqos makefile vars Thread-Index: AQHVz1YhFzIEa01c/EuPWo3PhXfTOQ== Date: Mon, 20 Jan 2020 05:54:52 +0000 Message-ID: <20200120055410.22322-12-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fb26aac4-7ac7-4213-255d-08d79d6d4437 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2958; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: KVEWfeWYRYZXlJ0cmMvrBnsTcKuZPHEAmK6JZ2Yu1j9bLubkyH4Zv0G2O/0qkDV27qt353nxnVa6w31eMvh78w79uHKhqXECwAAmEMeZsQULTPuiZ3++Lc8WhrlSQYr4Brv7eKUSsr9YjKdaGoOO9y/bT48exy8jEi4xXHoaASqhanNCkTLdJL3s8YvycEhImWWmH9uqJBhTTN6CapKGQNUyeI+bELR4QyWCpYg7BxuZ9J85Hvbbp4UzWucBrrje3QifKWkmNXUvmKO6vg1m//WEJXL1e9N9Fhi6MClSahvlgF6XGagf/9dUKI/At/WzkZ8G4mqZi7MwQUqsC5SoHCqTLr2h1aMbI99/xUKiKuowDZ47pv6tnne10lZ5IFvqeXrOk1UhoRqzROaIQpUj7MimiUUzsk4SBFMPy3BNb6UjNlUflTwsqoUUu4VUZ1Wc Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: fb26aac4-7ac7-4213-255d-08d79d6d4437 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:52.3312 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: kMIyCOEONBtM48cTV3CLjzwz2VLBbu3s2AgXA5sl5AG90xi/d9TuKYC1XduDpPTC X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.126 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 , Thomas Huth , "Bulekov, Alexander" , Darren Kenny , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Most qos-related objects were specified in the qos-test-obj-y variable. qos-test-obj-y also included qos-test.o which defines a main(). This made it difficult to repurpose qos-test-obj-y to link anything beside tests/qos-test against libqos. This change separates objects that are libqos-specific and ones that are qos-test specific into different variables. Signed-off-by: Alexander Bulekov Reviewed-by: Darren Kenny Reviewed-by: Stefan Hajnoczi Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tests/qtest/Makefile.include | 71 ++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/tests/qtest/Makefile.include b/tests/qtest/Makefile.include index e6bb4ab28c..08a48c1252 100644 --- a/tests/qtest/Makefile.include +++ b/tests/qtest/Makefile.include @@ -157,52 +157,53 @@ check-qtest-s390x-y +=3D migration-test # libqos / qgraph : libqgraph-obj-y =3D tests/qtest/libqos/qgraph.o =20 -libqos-obj-y =3D $(libqgraph-obj-y) tests/qtest/libqos/pci.o tests/qtest/l= ibqos/fw_cfg.o -libqos-obj-y +=3D tests/qtest/libqos/malloc.o -libqos-obj-y +=3D tests/qtest/libqos/libqos.o -libqos-spapr-obj-y =3D $(libqos-obj-y) tests/qtest/libqos/malloc-spapr.o +libqos-core-obj-y =3D $(libqgraph-obj-y) tests/qtest/libqos/pci.o tests/qt= est/libqos/fw_cfg.o +libqos-core-obj-y +=3D tests/qtest/libqos/malloc.o +libqos-core-obj-y +=3D tests/qtest/libqos/libqos.o +libqos-spapr-obj-y =3D $(libqos-core-obj-y) tests/qtest/libqos/malloc-spap= r.o libqos-spapr-obj-y +=3D tests/qtest/libqos/libqos-spapr.o libqos-spapr-obj-y +=3D tests/qtest/libqos/rtas.o libqos-spapr-obj-y +=3D tests/qtest/libqos/pci-spapr.o -libqos-pc-obj-y =3D $(libqos-obj-y) tests/qtest/libqos/pci-pc.o +libqos-pc-obj-y =3D $(libqos-core-obj-y) tests/qtest/libqos/pci-pc.o libqos-pc-obj-y +=3D tests/qtest/libqos/malloc-pc.o tests/qtest/libqos/lib= qos-pc.o libqos-pc-obj-y +=3D tests/qtest/libqos/ahci.o libqos-usb-obj-y =3D $(libqos-spapr-obj-y) $(libqos-pc-obj-y) tests/qtest/= libqos/usb.o =20 # qos devices: -qos-test-obj-y =3D tests/qtest/qos-test.o $(libqgraph-obj-y) -qos-test-obj-y +=3D $(libqos-pc-obj-y) $(libqos-spapr-obj-y) -qos-test-obj-y +=3D tests/qtest/libqos/e1000e.o -qos-test-obj-y +=3D tests/qtest/libqos/i2c.o -qos-test-obj-y +=3D tests/qtest/libqos/i2c-imx.o -qos-test-obj-y +=3D tests/qtest/libqos/i2c-omap.o -qos-test-obj-y +=3D tests/qtest/libqos/sdhci.o -qos-test-obj-y +=3D tests/qtest/libqos/tpci200.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio.o -qos-test-obj-$(CONFIG_VIRTFS) +=3D tests/qtest/libqos/virtio-9p.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-balloon.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-blk.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-mmio.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-net.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-pci.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-pci-modern.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-rng.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-scsi.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-serial.o +libqos-obj-y =3D $(libqgraph-obj-y) +libqos-obj-y +=3D $(libqos-pc-obj-y) $(libqos-spapr-obj-y) +libqos-obj-y +=3D tests/qtest/libqos/e1000e.o +libqos-obj-y +=3D tests/qtest/libqos/i2c.o +libqos-obj-y +=3D tests/qtest/libqos/i2c-imx.o +libqos-obj-y +=3D tests/qtest/libqos/i2c-omap.o +libqos-obj-y +=3D tests/qtest/libqos/sdhci.o +libqos-obj-y +=3D tests/qtest/libqos/tpci200.o +libqos-obj-y +=3D tests/qtest/libqos/virtio.o +libqos-obj-$(CONFIG_VIRTFS) +=3D tests/qtest/libqos/virtio-9p.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-balloon.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-blk.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-mmio.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-net.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-pci.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-pci-modern.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-rng.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-scsi.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-serial.o =20 # qos machines: -qos-test-obj-y +=3D tests/qtest/libqos/aarch64-xlnx-zcu102-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-imx25-pdk-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-n800-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-raspi2-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-sabrelite-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-smdkc210-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-virt-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-xilinx-zynq-a9-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/ppc64_pseries-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/x86_64_pc-machine.o +libqos-obj-y +=3D tests/qtest/libqos/aarch64-xlnx-zcu102-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-imx25-pdk-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-n800-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-raspi2-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-sabrelite-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-smdkc210-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-virt-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-xilinx-zynq-a9-machine.o +libqos-obj-y +=3D tests/qtest/libqos/ppc64_pseries-machine.o +libqos-obj-y +=3D tests/qtest/libqos/x86_64_pc-machine.o =20 # qos tests: +qos-test-obj-y +=3D tests/qtest/qos-test.o qos-test-obj-y +=3D tests/qtest/ac97-test.o qos-test-obj-y +=3D tests/qtest/ds1338-test.o qos-test-obj-y +=3D tests/qtest/e1000-test.o @@ -234,7 +235,7 @@ check-unit-y +=3D tests/test-qgraph$(EXESUF) tests/test-qgraph$(EXESUF): tests/test-qgraph.o $(libqgraph-obj-y) =20 check-qtest-generic-y +=3D qos-test -tests/qtest/qos-test$(EXESUF): $(qos-test-obj-y) +tests/qtest/qos-test$(EXESUF): $(qos-test-obj-y) $(libqos-obj-y) =20 # QTest dependencies: tests/qtest/qmp-test$(EXESUF): tests/qtest/qmp-test.o --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579501074; cv=pass; d=zohomail.com; s=zohoarc; b=KcJ6iGh3hMGLRVmRkOWDfsdkWkGcShktrtmTpA+KF/6pfDTMFXvlNitc6Y4CWBMuB/Q5I/u74toZ4OTXmfT4Xmp4HMPLT61QRW/BEd/i0jzMTmLxjNdG21OEvYWQN8hBQpmfV3CRdZmyX70S7+SwJmnA3LMjNY48wumVum40tQs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579501074; h=Content-ID:Content-Type:Content-Transfer-Encoding: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=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=kmLHBtRt0LKT91p7fAPKCJIWHor4NobJljbOI+1hCRSg2eHOW+/E7fH1tyxnH5AnXtCYcsl/PRS8K7E9vfjEkrP7/295vt0b+EstxHsNo0YBh9V0hPBsDHpcLKVwjFECYIFaO4uX4qn2osBZJkGkoDfanLfe9QH1OloI7i04Vhs= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579501074567201.59582997370012; Sun, 19 Jan 2020 22:17:54 -0800 (PST) Received: from localhost ([::1]:59168 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQNl-0000FL-17 for importer@patchew.org; Mon, 20 Jan 2020 01:17:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35283) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1Z-00076G-MA for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1X-0006OI-8k for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:57 -0500 Received: from mail-bn7nam10on2139.outbound.protection.outlook.com ([40.107.92.139]:29665 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1X-0006O5-3E for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:55 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:54 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:54 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:52 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Gls42UdY5XeYoUcZv5AMmY9Q4TCu/ua4eGelN6h9/G6fgHV4jkHFvsvpRjxzfPj5TdfWkKy4+FZgcmQStoyb9RBh1RzjqJ+tcv1fGK8aH/Dfz0afCyLkel4BkejhNUUgcByWLOrZdqRRdNajzfrn13+RmhD69QtGAPEa6CSj6wnsXrgLTabFDn8ht3Qh8blix8Bnz2eLzz36BpZsIbodjzmzLV5uCLutDe8v7n5KrmQmGXYGs4HOBuaZstDXmhZ499r86w+25TewcVS4AF0JtS+kkQPHdA4JLl1+I+XoAqcqmvscX9wvp4Dtz9b91ne2UbiqUmFDwM+c7NmOdOjf5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=euwZNbzrqXV5c2IlbEJdauc1eJRVSxeer55D2oO9zgTUOpkf2dIk48nnd1Y9cJ1A4PKPqlijN0Us3dA9xLTWcSJzw/wmuzHmwHKvKfAkB35W7yj8gkrG9vH1svnvbPQnalVlzBkyaSXiWVpqspl/mxmJ5uRahQtBTb4UxlM5Ed4ddryRPpP2ZYbpfht2IxdpCbDx3gefunohtDmSot4kOeu2a2XXPsSDqYw8x0vSfQdqa/yXVdCARSTSeZhIhNzner0qNl6GvAXZTuCR9hMWkV3k0ets8mtjsyTrU9Qy++B30ATQOhce4jsMUIfaMFQ5fT6vQk8F+7Qbu2Bf/TYnPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=IEBvsIn4u3TS/6zyULrQrmWWnz2TjZMCkwoiS9/pqAglM3qgpHAdl+UKJYMv8/85O10XxGQvOfhNwidFx5qmFBjyk2inMRAmCuwcEQbMzRHOn6MCweXF+FC5zL33LgoU/KNAohu9M8WFfU7t6HYch9zbAoZqHyCyiLdif182/yY= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 09/20] libqos: move useful qos-test funcs to qos_external Thread-Topic: [PATCH v7 09/20] libqos: move useful qos-test funcs to qos_external Thread-Index: AQHVz1Yir2myrnXFdkqc+v/+c4EMnw== Date: Mon, 20 Jan 2020 05:54:53 +0000 Message-ID: <20200120055410.22322-13-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6716bba8-73d8-4b1c-9975-08d79d6d4509 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2887; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(30864003)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 4T0OiKlKjKCg1zaZ4Q84IM7pZ+n7/KnhZ2kCecWZgfoTT88om80zGvkFrYYj3OGy/0jqUILUt1x1xoxCQKstbLsPd7rowXe7Fhx821yq8YLlp7cY7uuZWOWCSAIxoqtaEkp+LdYczEJd0tFoKmujw0HOc7kXSk3Yw0dcZWa3JV7uvGZwL3VRM81PhvyH09IYOqpVbLQlSBKfkztUq3saSrCQO7t2+NSAE1vK9EQS6aKUN7a8y4Us9o+vgQWwwcdOndnUsNJMEITO0qne/8tveNbBHkFgIIJM15hUyOuz2BzsjNN/pYkZwiNUrt1407Kza/MMugYDbKg5v2kuPHm1DAIa+Auq91gI0gnMtT3oUWeB6XDbGRQMJ7TvvnuHIaOwp+VDT13lccADyX9ip6+MSEnnkLrUFzg2UM02qrf2P0HB0bcUNWoZqXLNJ/oKVi+Wro362Y7P5l19/DyO0OT1FNRW6mpNMp5hFBnlSlxoBgGDqtMZ3sHBHrS8b84BNSjH+xb8Ty8Bakf48vTHIW9BoTZPFXecAwqbXN+nxMB3sjVj6v/vvp3hV6xVtuJfRq7h Content-Type: text/plain; charset="utf-8" Content-ID: <09A44B2CC2F18D44A3F66577DA2FDF82@namprd03.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 6716bba8-73d8-4b1c-9975-08d79d6d4509 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:53.5115 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xjOo7zhpvsJOesf90DbK2i/GvYmkO2QiDZJhFkbIPUWpDw2H2KuKfAgZ6VwqoLhT X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.139 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) The moved functions are not specific to qos-test and might be useful elsewhere. For example the virtual-device fuzzer makes use of them for qos-assisted fuzz-targets. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tests/qtest/Makefile.include | 1 + tests/qtest/libqos/qos_external.c | 168 ++++++++++++++++++++++++++++++ tests/qtest/libqos/qos_external.h | 28 +++++ tests/qtest/qos-test.c | 132 +---------------------- 4 files changed, 198 insertions(+), 131 deletions(-) create mode 100644 tests/qtest/libqos/qos_external.c create mode 100644 tests/qtest/libqos/qos_external.h diff --git a/tests/qtest/Makefile.include b/tests/qtest/Makefile.include index 08a48c1252..bdc93d3866 100644 --- a/tests/qtest/Makefile.include +++ b/tests/qtest/Makefile.include @@ -172,6 +172,7 @@ libqos-usb-obj-y =3D $(libqos-spapr-obj-y) $(libqos-pc-= obj-y) tests/qtest/libqos/u # qos devices: libqos-obj-y =3D $(libqgraph-obj-y) libqos-obj-y +=3D $(libqos-pc-obj-y) $(libqos-spapr-obj-y) +libqos-obj-y +=3D tests/qtest/libqos/qos_external.o libqos-obj-y +=3D tests/qtest/libqos/e1000e.o libqos-obj-y +=3D tests/qtest/libqos/i2c.o libqos-obj-y +=3D tests/qtest/libqos/i2c-imx.o diff --git a/tests/qtest/libqos/qos_external.c b/tests/qtest/libqos/qos_ext= ernal.c new file mode 100644 index 0000000000..398556dde0 --- /dev/null +++ b/tests/qtest/libqos/qos_external.c @@ -0,0 +1,168 @@ +/* + * libqos driver framework + * + * Copyright (c) 2018 Emanuele Giuseppe Esposito + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see + */ + +#include "qemu/osdep.h" +#include +#include "libqtest.h" +#include "qapi/qmp/qdict.h" +#include "qapi/qmp/qbool.h" +#include "qapi/qmp/qstring.h" +#include "qemu/module.h" +#include "qapi/qmp/qlist.h" +#include "libqos/malloc.h" +#include "libqos/qgraph.h" +#include "libqos/qgraph_internal.h" +#include "libqos/qos_external.h" + + + +void apply_to_node(const char *name, bool is_machine, bool is_abstract) +{ + char *machine_name =3D NULL; + if (is_machine) { + const char *arch =3D qtest_get_arch(); + machine_name =3D g_strconcat(arch, "/", name, NULL); + name =3D machine_name; + } + qos_graph_node_set_availability(name, true); + if (is_abstract) { + qos_delete_cmd_line(name); + } + g_free(machine_name); +} + +/** + * apply_to_qlist(): using QMP queries QEMU for a list of + * machines and devices available, and sets the respective node + * as true. If a node is found, also all its produced and contained + * child are marked available. + * + * See qos_graph_node_set_availability() for more info + */ +void apply_to_qlist(QList *list, bool is_machine) +{ + const QListEntry *p; + const char *name; + bool abstract; + QDict *minfo; + QObject *qobj; + QString *qstr; + QBool *qbool; + + for (p =3D qlist_first(list); p; p =3D qlist_next(p)) { + minfo =3D qobject_to(QDict, qlist_entry_obj(p)); + qobj =3D qdict_get(minfo, "name"); + qstr =3D qobject_to(QString, qobj); + name =3D qstring_get_str(qstr); + + qobj =3D qdict_get(minfo, "abstract"); + if (qobj) { + qbool =3D qobject_to(QBool, qobj); + abstract =3D qbool_get_bool(qbool); + } else { + abstract =3D false; + } + + apply_to_node(name, is_machine, abstract); + qobj =3D qdict_get(minfo, "alias"); + if (qobj) { + qstr =3D qobject_to(QString, qobj); + name =3D qstring_get_str(qstr); + apply_to_node(name, is_machine, abstract); + } + } +} + +QGuestAllocator *get_machine_allocator(QOSGraphObject *obj) +{ + return obj->get_driver(obj, "memory"); +} + +/** + * allocate_objects(): given an array of nodes @arg, + * walks the path invoking all constructors and + * passing the corresponding parameter in order to + * continue the objects allocation. + * Once the test is reached, return the object it consumes. + * + * Since the machine and QEDGE_CONSUMED_BY nodes allocate + * memory in the constructor, g_test_queue_destroy is used so + * that after execution they can be safely free'd. (The test's + * ->before callback is also welcome to use g_test_queue_destroy). + * + * Note: as specified in walk_path() too, @arg is an array of + * char *, where arg[0] is a pointer to the command line + * string that will be used to properly start QEMU when executing + * the test, and the remaining elements represent the actual objects + * that will be allocated. + */ +void *allocate_objects(QTestState *qts, char **path, QGuestAllocator **p_a= lloc) +{ + int current =3D 0; + QGuestAllocator *alloc; + QOSGraphObject *parent =3D NULL; + QOSGraphEdge *edge; + QOSGraphNode *node; + void *edge_arg; + void *obj; + + node =3D qos_graph_get_node(path[current]); + g_assert(node->type =3D=3D QNODE_MACHINE); + + obj =3D qos_machine_new(node, qts); + qos_object_queue_destroy(obj); + + alloc =3D get_machine_allocator(obj); + if (p_alloc) { + *p_alloc =3D alloc; + } + + for (;;) { + if (node->type !=3D QNODE_INTERFACE) { + qos_object_start_hw(obj); + parent =3D obj; + } + + /* follow edge and get object for next node constructor */ + current++; + edge =3D qos_graph_get_edge(path[current - 1], path[current]); + node =3D qos_graph_get_node(path[current]); + + if (node->type =3D=3D QNODE_TEST) { + g_assert(qos_graph_edge_get_type(edge) =3D=3D QEDGE_CONSUMED_B= Y); + return obj; + } + + switch (qos_graph_edge_get_type(edge)) { + case QEDGE_PRODUCES: + obj =3D parent->get_driver(parent, path[current]); + break; + + case QEDGE_CONSUMED_BY: + edge_arg =3D qos_graph_edge_get_arg(edge); + obj =3D qos_driver_new(node, obj, alloc, edge_arg); + qos_object_queue_destroy(obj); + break; + + case QEDGE_CONTAINS: + obj =3D parent->get_device(parent, path[current]); + break; + } + } +} + diff --git a/tests/qtest/libqos/qos_external.h b/tests/qtest/libqos/qos_ext= ernal.h new file mode 100644 index 0000000000..7b44930c55 --- /dev/null +++ b/tests/qtest/libqos/qos_external.h @@ -0,0 +1,28 @@ +/* + * libqos driver framework + * + * Copyright (c) 2018 Emanuele Giuseppe Esposito + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see + */ + +#ifndef QOS_EXTERNAL_H +#define QOS_EXTERNAL_H +#include "libqos/qgraph.h" + +void apply_to_node(const char *name, bool is_machine, bool is_abstract); +void apply_to_qlist(QList *list, bool is_machine); +QGuestAllocator *get_machine_allocator(QOSGraphObject *obj); +void *allocate_objects(QTestState *qts, char **path, QGuestAllocator **p_a= lloc); + +#endif diff --git a/tests/qtest/qos-test.c b/tests/qtest/qos-test.c index fd70d73ea5..ad193f43a5 100644 --- a/tests/qtest/qos-test.c +++ b/tests/qtest/qos-test.c @@ -27,65 +27,11 @@ #include "libqos/malloc.h" #include "libqos/qgraph.h" #include "libqos/qgraph_internal.h" +#include "libqos/qos_external.h" =20 static char *old_path; =20 -static void apply_to_node(const char *name, bool is_machine, bool is_abstr= act) -{ - char *machine_name =3D NULL; - if (is_machine) { - const char *arch =3D qtest_get_arch(); - machine_name =3D g_strconcat(arch, "/", name, NULL); - name =3D machine_name; - } - qos_graph_node_set_availability(name, true); - if (is_abstract) { - qos_delete_cmd_line(name); - } - g_free(machine_name); -} =20 -/** - * apply_to_qlist(): using QMP queries QEMU for a list of - * machines and devices available, and sets the respective node - * as true. If a node is found, also all its produced and contained - * child are marked available. - * - * See qos_graph_node_set_availability() for more info - */ -static void apply_to_qlist(QList *list, bool is_machine) -{ - const QListEntry *p; - const char *name; - bool abstract; - QDict *minfo; - QObject *qobj; - QString *qstr; - QBool *qbool; - - for (p =3D qlist_first(list); p; p =3D qlist_next(p)) { - minfo =3D qobject_to(QDict, qlist_entry_obj(p)); - qobj =3D qdict_get(minfo, "name"); - qstr =3D qobject_to(QString, qobj); - name =3D qstring_get_str(qstr); - - qobj =3D qdict_get(minfo, "abstract"); - if (qobj) { - qbool =3D qobject_to(QBool, qobj); - abstract =3D qbool_get_bool(qbool); - } else { - abstract =3D false; - } - - apply_to_node(name, is_machine, abstract); - qobj =3D qdict_get(minfo, "alias"); - if (qobj) { - qstr =3D qobject_to(QString, qobj); - name =3D qstring_get_str(qstr); - apply_to_node(name, is_machine, abstract); - } - } -} =20 /** * qos_set_machines_devices_available(): sets availability of qgraph @@ -129,10 +75,6 @@ static void qos_set_machines_devices_available(void) qobject_unref(response); } =20 -static QGuestAllocator *get_machine_allocator(QOSGraphObject *obj) -{ - return obj->get_driver(obj, "memory"); -} =20 static void restart_qemu_or_continue(char *path) { @@ -159,78 +101,6 @@ void qos_invalidate_command_line(void) old_path =3D NULL; } =20 -/** - * allocate_objects(): given an array of nodes @arg, - * walks the path invoking all constructors and - * passing the corresponding parameter in order to - * continue the objects allocation. - * Once the test is reached, return the object it consumes. - * - * Since the machine and QEDGE_CONSUMED_BY nodes allocate - * memory in the constructor, g_test_queue_destroy is used so - * that after execution they can be safely free'd. (The test's - * ->before callback is also welcome to use g_test_queue_destroy). - * - * Note: as specified in walk_path() too, @arg is an array of - * char *, where arg[0] is a pointer to the command line - * string that will be used to properly start QEMU when executing - * the test, and the remaining elements represent the actual objects - * that will be allocated. - */ -static void *allocate_objects(QTestState *qts, char **path, QGuestAllocato= r **p_alloc) -{ - int current =3D 0; - QGuestAllocator *alloc; - QOSGraphObject *parent =3D NULL; - QOSGraphEdge *edge; - QOSGraphNode *node; - void *edge_arg; - void *obj; - - node =3D qos_graph_get_node(path[current]); - g_assert(node->type =3D=3D QNODE_MACHINE); - - obj =3D qos_machine_new(node, qts); - qos_object_queue_destroy(obj); - - alloc =3D get_machine_allocator(obj); - if (p_alloc) { - *p_alloc =3D alloc; - } - - for (;;) { - if (node->type !=3D QNODE_INTERFACE) { - qos_object_start_hw(obj); - parent =3D obj; - } - - /* follow edge and get object for next node constructor */ - current++; - edge =3D qos_graph_get_edge(path[current - 1], path[current]); - node =3D qos_graph_get_node(path[current]); - - if (node->type =3D=3D QNODE_TEST) { - g_assert(qos_graph_edge_get_type(edge) =3D=3D QEDGE_CONSUMED_B= Y); - return obj; - } - - switch (qos_graph_edge_get_type(edge)) { - case QEDGE_PRODUCES: - obj =3D parent->get_driver(parent, path[current]); - break; - - case QEDGE_CONSUMED_BY: - edge_arg =3D qos_graph_edge_get_arg(edge); - obj =3D qos_driver_new(node, obj, alloc, edge_arg); - qos_object_queue_destroy(obj); - break; - - case QEDGE_CONTAINS: - obj =3D parent->get_device(parent, path[current]); - break; - } - } -} =20 /* The argument to run_one_test, which is the test function that is regist= ered * with GTest, is a vector of strings. The first item is the initial comm= and --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500907; cv=pass; d=zohomail.com; s=zohoarc; b=LscmzygLpC2WL6XvAmgAT1yL3UbTssWkgfw+psorFYcj1l4xvirPgSauhawb+VG/B+ImUdv2yh0r4iIX3Wbc1iYWL8ukQOzr5eEzmStOJyaZjFHu2EIJ1BNogcbKACEBMrJH7Hk4ojeiwsfg1y1hB59nD/sWrhTtJur6/XWbhAU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500907; h=Content-ID:Content-Type:Content-Transfer-Encoding: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=BMCyJN3nzC2ixzb7DkXR5cQ3SesaeOMGZjfVp8Oc6oQ=; b=Hnlf+f5IC25elOX6RB/szHogLmXAZ/ue6Ofu5OrNpaVa7KtxsXLZouJ/nT6EUQz11utyVQg1bfbwyuwjnv9/kpVUPsKGOuCyolZTaaMDzIIPy5LLcLVu5Pk7W02U2isMIaVtXbIS9PK4SYUFTXr4wgoCI3k+ShdGDlUzLq3E2o0= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500907598340.39072513666315; Sun, 19 Jan 2020 22:15:07 -0800 (PST) Received: from localhost ([::1]:59132 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQL4-0005q8-4q for importer@patchew.org; Mon, 20 Jan 2020 01:15:06 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35288) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1a-00076q-2d for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1Y-0006P7-GH for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:57 -0500 Received: from mail-bn7nam10on2103.outbound.protection.outlook.com ([40.107.92.103]:38113 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1Y-0006Ou-CQ for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:56 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:55 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:55 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l9V0aEvwB3cI2cNerX0fU5eUSutMLza3TGRDx7n4HBFFN5Jr2dF1Kmwjl+T50UHy+ZVu5+438cJ8o37Vmxge3Ond6H0lYGLPsNnMmjvYfIjdop8Hcs3kXwr7tZ2FM+neiJprRGATjjeAQV31j5ENBC5MFsWHlqxZaj+ozjeXeWVwSgwH6HjSbw1VLJkn2K/VcZHak9wDRuO5PqQR0m8RlrigE4q14GEhNV+A4RZ9GRFLJ6zNrgOQltAVayXP6Qso1YK2rqvGbCHhJys+TPFpiOPlYik24fUwDDDsAHGyfjkE/d8JFuo6wfwb7bT2tNNPZQdzC28p5wJYZaf2Lu48Fg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BMCyJN3nzC2ixzb7DkXR5cQ3SesaeOMGZjfVp8Oc6oQ=; b=aFBMIyykUtWylBvx0jpoEmDwihh4Puw4/zFIkvZUpEGB3XnJUu+UAuVh/qK+eIFUzzQ6A70uF8FM+RTlkLV9Xlg1sWho8iNxGVNlnFXwXhcGkMe/P/nMDxztIKhcJlGvDDkM0LFkzL9XKp1wdzpQruj9MXWP9dD6yXomB5xL1K6NCpzIh3ToP+oZqAHC3i/SdnLduoHB7aG+DNoykqJsOACcZU/aaBqp+jLzCGn15ggevlnO6+dCERnPbMeWKAZ1406n2xwcrZFsy2ezRmOmiPbbBvuptblIdXyKczOUCIUmE5tHyX4K6kzewbmE/i8S6EsiPuEg6OE11svMmw+KrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BMCyJN3nzC2ixzb7DkXR5cQ3SesaeOMGZjfVp8Oc6oQ=; b=NjvFnXXOeStX5uHWs/9p8eKENpbeFa6MHvIKHxHvs0SfkqPsAD8LpdbHCG0eK42UNYwtyEVGIuTS/mAZyN9miA/p1JCty8LK3Aguj0nmavTN+63And9VcSmg6VAwU85UQdOs9WgOX4ZVoElKxAShd1BwzkavaEHLMSfcm9cJlks= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 09/20] libqos: split qos-test and libqos makefile vars Thread-Topic: [PATCH v7 09/20] libqos: split qos-test and libqos makefile vars Thread-Index: AQHVz1YjAh3VVXV3W0yi2moYqESzFg== Date: Mon, 20 Jan 2020 05:54:54 +0000 Message-ID: <20200120055410.22322-14-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7f4d10c2-64e4-4088-22b5-08d79d6d45e4 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2958; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: lqqKjoB0bT7Zs9QiAAJVLbOeKHn58MzMh128m3Bmxaf7wcUVnKKcArf9OX5SiBRkLuK66AjFoVoQ4+92WaZvamh1wXTe+/UrEcWDkIZrsGpjbkIks6bvlW0r60tRgALPc5cKe+zSPC9bWlUZQbS7/shyIpbV67ncz3MfTiY0z+GnH/eJcL7HKEZZH8QicpWBnaP+nGV1W0VY3CgQNLWekBSmI9OdvZhhCT6fuGY2mMWApicgQUZLLEg7lE+3a5OsZSx0ec6d6qWwZHQTBNm/CWHxv5Ua7OawunUlE9uWme84FEpfKpdlrnWIbkKOs2Mzy0BCcels2wSSGwNlsoVHeqnLl/U8b5+mH/oIRGHfJvOJulBX65ZCT/lw38CWIj5PHbB4ke4qEGxM/DUkQ1Ydy95djL4Z5F+wIMiRnNNqKMZZu0+pABhjjdV9Mi1pODfs Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 7f4d10c2-64e4-4088-22b5-08d79d6d45e4 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:54.7988 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: b8hesdP6xycM5q3IA2TmBM+iOqrVvXsG3CAEBu0pSjjcGUgBbnirQq6Hq+T7iArf X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.103 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 , Thomas Huth , "Bulekov, Alexander" , Darren Kenny , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Most qos-related objects were specified in the qos-test-obj-y variable. qos-test-obj-y also included qos-test.o which defines a main(). This made it difficult to repurpose qos-test-obj-y to link anything beside tests/qos-test against libqos. This change separates objects that are libqos-specific and ones that are qos-test specific into different variables. Signed-off-by: Alexander Bulekov Reviewed-by: Darren Kenny Reviewed-by: Stefan Hajnoczi Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tests/qtest/Makefile.include | 71 ++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/tests/qtest/Makefile.include b/tests/qtest/Makefile.include index e6bb4ab28c..08a48c1252 100644 --- a/tests/qtest/Makefile.include +++ b/tests/qtest/Makefile.include @@ -157,52 +157,53 @@ check-qtest-s390x-y +=3D migration-test # libqos / qgraph : libqgraph-obj-y =3D tests/qtest/libqos/qgraph.o =20 -libqos-obj-y =3D $(libqgraph-obj-y) tests/qtest/libqos/pci.o tests/qtest/l= ibqos/fw_cfg.o -libqos-obj-y +=3D tests/qtest/libqos/malloc.o -libqos-obj-y +=3D tests/qtest/libqos/libqos.o -libqos-spapr-obj-y =3D $(libqos-obj-y) tests/qtest/libqos/malloc-spapr.o +libqos-core-obj-y =3D $(libqgraph-obj-y) tests/qtest/libqos/pci.o tests/qt= est/libqos/fw_cfg.o +libqos-core-obj-y +=3D tests/qtest/libqos/malloc.o +libqos-core-obj-y +=3D tests/qtest/libqos/libqos.o +libqos-spapr-obj-y =3D $(libqos-core-obj-y) tests/qtest/libqos/malloc-spap= r.o libqos-spapr-obj-y +=3D tests/qtest/libqos/libqos-spapr.o libqos-spapr-obj-y +=3D tests/qtest/libqos/rtas.o libqos-spapr-obj-y +=3D tests/qtest/libqos/pci-spapr.o -libqos-pc-obj-y =3D $(libqos-obj-y) tests/qtest/libqos/pci-pc.o +libqos-pc-obj-y =3D $(libqos-core-obj-y) tests/qtest/libqos/pci-pc.o libqos-pc-obj-y +=3D tests/qtest/libqos/malloc-pc.o tests/qtest/libqos/lib= qos-pc.o libqos-pc-obj-y +=3D tests/qtest/libqos/ahci.o libqos-usb-obj-y =3D $(libqos-spapr-obj-y) $(libqos-pc-obj-y) tests/qtest/= libqos/usb.o =20 # qos devices: -qos-test-obj-y =3D tests/qtest/qos-test.o $(libqgraph-obj-y) -qos-test-obj-y +=3D $(libqos-pc-obj-y) $(libqos-spapr-obj-y) -qos-test-obj-y +=3D tests/qtest/libqos/e1000e.o -qos-test-obj-y +=3D tests/qtest/libqos/i2c.o -qos-test-obj-y +=3D tests/qtest/libqos/i2c-imx.o -qos-test-obj-y +=3D tests/qtest/libqos/i2c-omap.o -qos-test-obj-y +=3D tests/qtest/libqos/sdhci.o -qos-test-obj-y +=3D tests/qtest/libqos/tpci200.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio.o -qos-test-obj-$(CONFIG_VIRTFS) +=3D tests/qtest/libqos/virtio-9p.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-balloon.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-blk.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-mmio.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-net.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-pci.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-pci-modern.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-rng.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-scsi.o -qos-test-obj-y +=3D tests/qtest/libqos/virtio-serial.o +libqos-obj-y =3D $(libqgraph-obj-y) +libqos-obj-y +=3D $(libqos-pc-obj-y) $(libqos-spapr-obj-y) +libqos-obj-y +=3D tests/qtest/libqos/e1000e.o +libqos-obj-y +=3D tests/qtest/libqos/i2c.o +libqos-obj-y +=3D tests/qtest/libqos/i2c-imx.o +libqos-obj-y +=3D tests/qtest/libqos/i2c-omap.o +libqos-obj-y +=3D tests/qtest/libqos/sdhci.o +libqos-obj-y +=3D tests/qtest/libqos/tpci200.o +libqos-obj-y +=3D tests/qtest/libqos/virtio.o +libqos-obj-$(CONFIG_VIRTFS) +=3D tests/qtest/libqos/virtio-9p.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-balloon.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-blk.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-mmio.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-net.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-pci.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-pci-modern.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-rng.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-scsi.o +libqos-obj-y +=3D tests/qtest/libqos/virtio-serial.o =20 # qos machines: -qos-test-obj-y +=3D tests/qtest/libqos/aarch64-xlnx-zcu102-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-imx25-pdk-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-n800-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-raspi2-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-sabrelite-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-smdkc210-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-virt-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/arm-xilinx-zynq-a9-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/ppc64_pseries-machine.o -qos-test-obj-y +=3D tests/qtest/libqos/x86_64_pc-machine.o +libqos-obj-y +=3D tests/qtest/libqos/aarch64-xlnx-zcu102-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-imx25-pdk-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-n800-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-raspi2-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-sabrelite-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-smdkc210-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-virt-machine.o +libqos-obj-y +=3D tests/qtest/libqos/arm-xilinx-zynq-a9-machine.o +libqos-obj-y +=3D tests/qtest/libqos/ppc64_pseries-machine.o +libqos-obj-y +=3D tests/qtest/libqos/x86_64_pc-machine.o =20 # qos tests: +qos-test-obj-y +=3D tests/qtest/qos-test.o qos-test-obj-y +=3D tests/qtest/ac97-test.o qos-test-obj-y +=3D tests/qtest/ds1338-test.o qos-test-obj-y +=3D tests/qtest/e1000-test.o @@ -234,7 +235,7 @@ check-unit-y +=3D tests/test-qgraph$(EXESUF) tests/test-qgraph$(EXESUF): tests/test-qgraph.o $(libqgraph-obj-y) =20 check-qtest-generic-y +=3D qos-test -tests/qtest/qos-test$(EXESUF): $(qos-test-obj-y) +tests/qtest/qos-test$(EXESUF): $(qos-test-obj-y) $(libqos-obj-y) =20 # QTest dependencies: tests/qtest/qmp-test$(EXESUF): tests/qtest/qmp-test.o --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500366; cv=pass; d=zohomail.com; s=zohoarc; b=Vs2FukMXfinp8UrFJZy7lTpiM2rIfHyaAu0wf3zzKxcB4It2e2ImeyY6wsW+c6Zkm8CETbGCki+GdalDr8Qfi3IaC9t7+ZdIKFbIkdlJnZFwti285o0RwlVEfi5/+TipUA4e+JY+6lunmYhBFymgzCKRpoPeSN9LjntokvkETrM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500366; h=Content-Type:Content-Transfer-Encoding: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=1hQfW9/9q8KnXyTWzkxHml6DPaJtmQZHPkWi5XPf+6I=; b=k73oEwue554xgjyBowJyXcd/qZUB680G3le1898KGxjnlFNwqO/V8tYJod/PcY2mGIRkQoZnxFrK5ky2ouofGkFBTKU2I49tsmii+PyS9acnxTZDVBUCwe/cfSXeQTDCQCXlUo3amRNWUvLp7KgDvb/By8sfvYJMprOBFcKK5Oc= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500366788799.3145310201046; Sun, 19 Jan 2020 22:06:06 -0800 (PST) Received: from localhost ([::1]:58958 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQCK-0001Lv-4w for importer@patchew.org; Mon, 20 Jan 2020 01:06:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35310) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1c-00079r-0I for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:01 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1a-0006QG-Ln for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:59 -0500 Received: from mail-bn7nam10on2116.outbound.protection.outlook.com ([40.107.92.116]:31998 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1a-0006Q3-Ho for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:58 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:57 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:57 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YukunFqCfmH5jSh9MR1/UIfQLAuWqQm9LXW98eUwy4kNeqdYPelEDaK/YG2++lf4LYZoiTNNxFYRnQbxdyWVEM9EHR8bzqffT7t3HIKrtvW4t2UC24tj5KcPpjsu4JEno2MTVh647+dpjxT6Y5qvKABSCe5u5ReFDv5o2EAFgWIDni4tlbUdW9KFNrE88I1OR0lymDK0+C/1Re/m/kX5HaaOtc+aO5alLcIC5UKtwjlPTlF89Fk9Bm/YR8zIOoDuKVYxnMq52ysLXpJFVFHzgmhG6lXR0l1BEEXgrLl8MYBeVn7b3HX4U6sxz1Y/U58qbbckxvm9QjQNk9o4fKgPmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1hQfW9/9q8KnXyTWzkxHml6DPaJtmQZHPkWi5XPf+6I=; b=WgJNaykvdgGhWPdIQmkVfnxejmJjpGWeKXkXvroVOGBm1AVr8ylZSO5B8luJ6c4mUS9yprIomlDPowIs9OfHFF2rs1rRsfkMVQBx17WR7JbrpKWc2iKnSDUQqfnqtexxdzSlqoXTmUt6moHk2wBH8CLlO4mRvX8Qd60zu7JDlp8UhmrhTdYNuU8RH26WsT12dwBOJrug3k0Uf8cm2LWDzEg+BzHjkMhu1Ym/E55Zv8QRBC2AppLe6sKUM77zBp6An46L5XCe6hX0H0pnZJTJw6OtsUCOUA81IqAJxi1a4P8te3P7T2qPvSB9aGoDWLDsEVtPQzNNDnEZK0HSvPhTsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1hQfW9/9q8KnXyTWzkxHml6DPaJtmQZHPkWi5XPf+6I=; b=JuPpLvlXSuXLiEVIaG6fyFo03mNdG8M54MCrZjicnkibos9m7zDgZ1P8TsmtEf4nCtkQrr8R0JopbwpvjmnYvYcMTXenezc2MU+SY7S5ndb+JjJhPm9FA28WniB7uk21VaO/1yzLBsJX3gwcqScH+An5hTpwnaimB7FxWq2i+vE= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 10/20] libqtest: make bufwrite rely on the TransportOps Thread-Topic: [PATCH v7 10/20] libqtest: make bufwrite rely on the TransportOps Thread-Index: AQHVz1Ykz539ApCc2kOWg771utMEUQ== Date: Mon, 20 Jan 2020 05:54:57 +0000 Message-ID: <20200120055410.22322-16-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 70d61398-015b-42b9-05ec-08d79d6d4711 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1468; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VBpEhFjBPyUf5SCoKSlbn1DdgKMPoke80LXxhh6v/rii9poX+zb5CWl4KxN0eAlWwLU1NrhqgfGuEbKVniNCevSRrG9f+FgucNR29djNOmEDzZndAMDXBa00R83gtjH7Gm+hNTeqhTbzsZeyBXA54Y15qqGJC+DgKLQM4OonK8wLjCa9r0es/n0ZVaueXParkL7Kx9ZxvEm8NDky9Itj3iTvCK+MrdHHKrBVFeBCXnZbPeta9drEK61wb+Hlsiqo4fz8ZWAORuPjNa0lmvaB/TYK7uk0esTylALrqDkTPS9oPZ5C4HMgMONzN5XzTUUBu2TqOUXRHI2wneOAgiDs8wra0kf08dGiQES5DrxWoYwaDe+6jBmZous6V3/iA1yq4dfLHrD2VMTS3FFdQdYlv7Tl8qVh8Eb76eDLaePsKwZy200odGIEmrG/1oAwEKj7 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 70d61398-015b-42b9-05ec-08d79d6d4711 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:57.1455 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: TrVuI0YtNYV85HMNko2Zd8EfNoQoRkrivBv2VqV7IMy5q79v86gPvUAZ1LLsp/aT X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.116 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" When using qtest "in-process" communication, qtest_sendf directly calls a function in the server (qtest.c). Previously, bufwrite used socket_send, which bypasses the TransportOps enabling the call into qtest.c. This change replaces the socket_send calls with ops->send, maintaining the benefits of the direct socket_send call, while adding support for in-process qtest calls. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/libqtest.c | 71 ++++++++++++++++++++++++++++++++++++++++-- tests/qtest/libqtest.h | 4 +++ 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c index e5056a1d0f..49075b55a1 100644 --- a/tests/qtest/libqtest.c +++ b/tests/qtest/libqtest.c @@ -37,10 +37,18 @@ =20 =20 typedef void (*QTestSendFn)(QTestState *s, const char *buf); +typedef void (*ExternalSendFn)(void *s, const char *buf); typedef GString* (*QTestRecvFn)(QTestState *); =20 typedef struct QTestClientTransportOps { QTestSendFn send; /* for sending qtest commands */ + + /* + * use external_send to send qtest command strings through functions w= hich + * do not accept a QTestState as the first parameter. + */ + ExternalSendFn external_send; + QTestRecvFn recv_line; /* for receiving qtest command responses */ } QTestTransportOps; =20 @@ -1078,8 +1086,8 @@ void qtest_bufwrite(QTestState *s, uint64_t addr, con= st void *data, size_t size) =20 bdata =3D g_base64_encode(data, size); qtest_sendf(s, "b64write 0x%" PRIx64 " 0x%zx ", addr, size); - socket_send(s->fd, bdata, strlen(bdata)); - socket_send(s->fd, "\n", 1); + s->ops.send(s, bdata); + s->ops.send(s, "\n"); qtest_rsp(s, 0); g_free(bdata); } @@ -1367,3 +1375,62 @@ static void qtest_client_set_rx_handler(QTestState *= s, QTestRecvFn recv) { s->ops.recv_line =3D recv; } +/* A type-safe wrapper for s->send() */ +static void send_wrapper(QTestState *s, const char *buf) +{ + s->ops.external_send(s, buf); +} + +static GString *qtest_client_inproc_recv_line(QTestState *s) +{ + GString *line; + size_t offset; + char *eol; + + eol =3D strchr(s->rx->str, '\n'); + offset =3D eol - s->rx->str; + line =3D g_string_new_len(s->rx->str, offset); + g_string_erase(s->rx, 0, offset + 1); + return line; +} + +QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch, + void (*send)(void*, const char*)) +{ + QTestState *qts; + qts =3D g_new0(QTestState, 1); + *s =3D qts; /* Expose qts early on, since the query endianness relies = on it */ + qts->wstatus =3D 0; + for (int i =3D 0; i < MAX_IRQ; i++) { + qts->irq_level[i] =3D false; + } + + qtest_client_set_rx_handler(qts, qtest_client_inproc_recv_line); + + /* send() may not have a matching protoype, so use a type-safe wrapper= */ + qts->ops.external_send =3D send; + qtest_client_set_tx_handler(qts, send_wrapper); + + qts->big_endian =3D qtest_query_target_endianness(qts); + + /* + * Set a dummy path for QTEST_QEMU_BINARY. Doesn't need to exist, but = this + * way, qtest_get_arch works for inproc qtest. + */ + gchar *bin_path =3D g_strconcat("/qemu-system-", arch, NULL); + setenv("QTEST_QEMU_BINARY", bin_path, 0); + g_free(bin_path); + + return qts; +} + +void qtest_client_inproc_recv(void *opaque, const char *str) +{ + QTestState *qts =3D *(QTestState **)opaque; + + if (!qts->rx) { + qts->rx =3D g_string_new(NULL); + } + g_string_append(qts->rx, str); + return; +} diff --git a/tests/qtest/libqtest.h b/tests/qtest/libqtest.h index c9e21e05b3..f5cf93c386 100644 --- a/tests/qtest/libqtest.h +++ b/tests/qtest/libqtest.h @@ -729,4 +729,8 @@ bool qtest_probe_child(QTestState *s); */ void qtest_set_expected_status(QTestState *s, int status); =20 +QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch, + void (*send)(void*, const char*)); + +void qtest_client_inproc_recv(void *opaque, const char *str); #endif --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500547; cv=pass; d=zohomail.com; s=zohoarc; b=m5zE9FJeA6v4nqZzYy85yrCHQpx265DfQNgd5hwSOKWE2ovFKISb6aAs3FQKcsFu7WOZ38J3TR0MrmHehS0goT3sh52Qf/PGZ7GdcwRW3Bm4acY0LTyUrDNxa6GNPHl9MM5ARESMGWrl7n/hmn8TYAdVGPgc2E6zW4mCWLoFRqo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500547; h=Content-ID:Content-Type:Content-Transfer-Encoding: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=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=cykFLamQb6WwqV4cVBO/66WbZbCUJNVc2Oohjt6EU6Hx1BKJsMnCvYT+bF5p6fsIh50eyOog6/C6l2oD6IpSg1Bvrxn0DPfX+a2Y0ny6SORf5LRt4Ymj2hdo854apHvx7pR/63yPht8dtv2kYU6JSN3tSFp8GbzCxfBwMe3heR8= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500547676612.0817520830773; Sun, 19 Jan 2020 22:09:07 -0800 (PST) Received: from localhost ([::1]:59054 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQFE-0005Nx-K0 for importer@patchew.org; Mon, 20 Jan 2020 01:09:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35307) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1b-00079d-Sk for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1Z-0006Pi-Jq for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:59 -0500 Received: from mail-bn7nam10on2128.outbound.protection.outlook.com ([40.107.92.128]:24520 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1Z-0006PO-An for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:57 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:56 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:56 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:55 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cNtZyJ9+O3XXVJ4XIrANv11rP0WSpqzimVA74pz//2qvFDlzkVFFu2qR4zo9mxEqt4HFxXHsHfLt/jd8fv/xGPh2YMGaJzZTKFQRDWAeggH4vXBMtipaKaKAcyYUq4aHTE/4M1meqfidlYAIhvuXuBZEMuq+/GI18hrOwALYfcYxZuYkOBRM36a1+hReTpO7W87CTXsS6ulSzu3SZjkRkE1BljXGgwNxtQHsxbvnyMhGF1VS+cOPGZ0S+BaDR8s1EGkKL2sVrMtKhozcrduF1YGP0er4s1l0JCfg8nvSNViYyJ8X0BIpaPp+Ws6Sm/V/fB6EGBhK1sNRklunijmALA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=W3XI2PDahyxhiw/VNSAePFhQ+QYkUhpXUj/hKeWT6qbekXXAwchk5x/c8wRuaVGpQ+1kDFqB8a1qpbhOMtliKuC/5dIp2dNxgCJqQ82GcI/5gyl5OeGIKeeMOgPyxXvj2/yPI+B/M9M3CZ/yh/0qosxAzQuETbvVCrsFqIxxi9EMGPT3PQ2UJawDG7zHo+fZ06TrDPdxXgubx4nmPFeok7TcaS5v0vQyH68W/MIwkilgrJa8SGD1N3anDlBbsu9WzN1lZOiqSx0W5axx5iGTJWHXRW14RtILlwtEknagEDOW9D4uPvzVyKTfi7irwMYxrSFvwC3Tqh/FMY3JezTtYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=49GVKtTIgUjuixnUf8vORi2GFXwASfbxwKcP1ZNS+Oc=; b=NNoQ5MjjsslCiBwck2HA+qaVx9rLnhXEjHOkiDnfQNIO3UEn9gBedLhN0Y50kHYJPtaW9TFW8x3p70bGHftnFaIHp95pIJAbMD54LjdVLvJs1EtZUlW2dGJp/QQCnCaa5Za5kA4GTE+07gN8HocEQCJRRBE/q2+GF6oEGLKXwE4= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 10/20] libqos: move useful qos-test funcs to qos_external Thread-Topic: [PATCH v7 10/20] libqos: move useful qos-test funcs to qos_external Thread-Index: AQHVz1Ykje4V2uJavUqwKTnvG5M2CQ== Date: Mon, 20 Jan 2020 05:54:55 +0000 Message-ID: <20200120055410.22322-15-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ae72c03c-dcdd-4a7f-e49f-08d79d6d4679 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2887; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(30864003)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DR7EuTa9C6Aq0bVqkMMNzKopYekOoDCVD8QsAzDPSBIhGBcQJY8LZjgFwaHdcJT1ucF9Q3/2ZxNpGNcV15K3WXtkrYkg9biqyT5AtYGYyJGPZ8SkBOZ2xz+VNieVHFTT4Z43g6RUKpCtzvMJYwJJycyTnfYFvyxYsNNGUCscgcWLiRnuk6Au1cqTD5bbM+HpLsb82gpKm6yMHcrQ3MFDz5ZRYMf8gNIEw2mRUtMcbKWvg7xA2xw8Gfqvi+7Zl/eJewYcJZramdWv6tuItXmw5luxzrnZ9Cern4a24oXG/xTNxKN23jF2uWLtF4rRrVr0vmrbFj+43c77xCaaNHMkYg2f9nUGWqXOIhpk2tQxHXzHXyFDMrlzetW9gsXMrJ0yMI4ANs22n/DAQ6JlrQjqtloYXud0oHYfjhjmyyBzlYsyOW3d4zPqEVgZxBl+TPF6RHX5NGet+yoe6zPV53Bjlzco2rSKq4V30BDVTxzYUtUa/jBN1WXRzThKVjK4RKHznfN4bmqs/FXSiuLtrSTDiHPsB/5ouDxErHmUzmcBQfZmGFzAlsRKtyboSNsh3CbW Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: ae72c03c-dcdd-4a7f-e49f-08d79d6d4679 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:55.9032 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 4K+rDjej6zwcisv/gOc+ZeWq2q/oRWsA3S4CRs/TqEYYLjx6oOk/PUokPq5rCOxl X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.128 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) The moved functions are not specific to qos-test and might be useful elsewhere. For example the virtual-device fuzzer makes use of them for qos-assisted fuzz-targets. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tests/qtest/Makefile.include | 1 + tests/qtest/libqos/qos_external.c | 168 ++++++++++++++++++++++++++++++ tests/qtest/libqos/qos_external.h | 28 +++++ tests/qtest/qos-test.c | 132 +---------------------- 4 files changed, 198 insertions(+), 131 deletions(-) create mode 100644 tests/qtest/libqos/qos_external.c create mode 100644 tests/qtest/libqos/qos_external.h diff --git a/tests/qtest/Makefile.include b/tests/qtest/Makefile.include index 08a48c1252..bdc93d3866 100644 --- a/tests/qtest/Makefile.include +++ b/tests/qtest/Makefile.include @@ -172,6 +172,7 @@ libqos-usb-obj-y =3D $(libqos-spapr-obj-y) $(libqos-pc-= obj-y) tests/qtest/libqos/u # qos devices: libqos-obj-y =3D $(libqgraph-obj-y) libqos-obj-y +=3D $(libqos-pc-obj-y) $(libqos-spapr-obj-y) +libqos-obj-y +=3D tests/qtest/libqos/qos_external.o libqos-obj-y +=3D tests/qtest/libqos/e1000e.o libqos-obj-y +=3D tests/qtest/libqos/i2c.o libqos-obj-y +=3D tests/qtest/libqos/i2c-imx.o diff --git a/tests/qtest/libqos/qos_external.c b/tests/qtest/libqos/qos_ext= ernal.c new file mode 100644 index 0000000000..398556dde0 --- /dev/null +++ b/tests/qtest/libqos/qos_external.c @@ -0,0 +1,168 @@ +/* + * libqos driver framework + * + * Copyright (c) 2018 Emanuele Giuseppe Esposito + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see + */ + +#include "qemu/osdep.h" +#include +#include "libqtest.h" +#include "qapi/qmp/qdict.h" +#include "qapi/qmp/qbool.h" +#include "qapi/qmp/qstring.h" +#include "qemu/module.h" +#include "qapi/qmp/qlist.h" +#include "libqos/malloc.h" +#include "libqos/qgraph.h" +#include "libqos/qgraph_internal.h" +#include "libqos/qos_external.h" + + + +void apply_to_node(const char *name, bool is_machine, bool is_abstract) +{ + char *machine_name =3D NULL; + if (is_machine) { + const char *arch =3D qtest_get_arch(); + machine_name =3D g_strconcat(arch, "/", name, NULL); + name =3D machine_name; + } + qos_graph_node_set_availability(name, true); + if (is_abstract) { + qos_delete_cmd_line(name); + } + g_free(machine_name); +} + +/** + * apply_to_qlist(): using QMP queries QEMU for a list of + * machines and devices available, and sets the respective node + * as true. If a node is found, also all its produced and contained + * child are marked available. + * + * See qos_graph_node_set_availability() for more info + */ +void apply_to_qlist(QList *list, bool is_machine) +{ + const QListEntry *p; + const char *name; + bool abstract; + QDict *minfo; + QObject *qobj; + QString *qstr; + QBool *qbool; + + for (p =3D qlist_first(list); p; p =3D qlist_next(p)) { + minfo =3D qobject_to(QDict, qlist_entry_obj(p)); + qobj =3D qdict_get(minfo, "name"); + qstr =3D qobject_to(QString, qobj); + name =3D qstring_get_str(qstr); + + qobj =3D qdict_get(minfo, "abstract"); + if (qobj) { + qbool =3D qobject_to(QBool, qobj); + abstract =3D qbool_get_bool(qbool); + } else { + abstract =3D false; + } + + apply_to_node(name, is_machine, abstract); + qobj =3D qdict_get(minfo, "alias"); + if (qobj) { + qstr =3D qobject_to(QString, qobj); + name =3D qstring_get_str(qstr); + apply_to_node(name, is_machine, abstract); + } + } +} + +QGuestAllocator *get_machine_allocator(QOSGraphObject *obj) +{ + return obj->get_driver(obj, "memory"); +} + +/** + * allocate_objects(): given an array of nodes @arg, + * walks the path invoking all constructors and + * passing the corresponding parameter in order to + * continue the objects allocation. + * Once the test is reached, return the object it consumes. + * + * Since the machine and QEDGE_CONSUMED_BY nodes allocate + * memory in the constructor, g_test_queue_destroy is used so + * that after execution they can be safely free'd. (The test's + * ->before callback is also welcome to use g_test_queue_destroy). + * + * Note: as specified in walk_path() too, @arg is an array of + * char *, where arg[0] is a pointer to the command line + * string that will be used to properly start QEMU when executing + * the test, and the remaining elements represent the actual objects + * that will be allocated. + */ +void *allocate_objects(QTestState *qts, char **path, QGuestAllocator **p_a= lloc) +{ + int current =3D 0; + QGuestAllocator *alloc; + QOSGraphObject *parent =3D NULL; + QOSGraphEdge *edge; + QOSGraphNode *node; + void *edge_arg; + void *obj; + + node =3D qos_graph_get_node(path[current]); + g_assert(node->type =3D=3D QNODE_MACHINE); + + obj =3D qos_machine_new(node, qts); + qos_object_queue_destroy(obj); + + alloc =3D get_machine_allocator(obj); + if (p_alloc) { + *p_alloc =3D alloc; + } + + for (;;) { + if (node->type !=3D QNODE_INTERFACE) { + qos_object_start_hw(obj); + parent =3D obj; + } + + /* follow edge and get object for next node constructor */ + current++; + edge =3D qos_graph_get_edge(path[current - 1], path[current]); + node =3D qos_graph_get_node(path[current]); + + if (node->type =3D=3D QNODE_TEST) { + g_assert(qos_graph_edge_get_type(edge) =3D=3D QEDGE_CONSUMED_B= Y); + return obj; + } + + switch (qos_graph_edge_get_type(edge)) { + case QEDGE_PRODUCES: + obj =3D parent->get_driver(parent, path[current]); + break; + + case QEDGE_CONSUMED_BY: + edge_arg =3D qos_graph_edge_get_arg(edge); + obj =3D qos_driver_new(node, obj, alloc, edge_arg); + qos_object_queue_destroy(obj); + break; + + case QEDGE_CONTAINS: + obj =3D parent->get_device(parent, path[current]); + break; + } + } +} + diff --git a/tests/qtest/libqos/qos_external.h b/tests/qtest/libqos/qos_ext= ernal.h new file mode 100644 index 0000000000..7b44930c55 --- /dev/null +++ b/tests/qtest/libqos/qos_external.h @@ -0,0 +1,28 @@ +/* + * libqos driver framework + * + * Copyright (c) 2018 Emanuele Giuseppe Esposito + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see + */ + +#ifndef QOS_EXTERNAL_H +#define QOS_EXTERNAL_H +#include "libqos/qgraph.h" + +void apply_to_node(const char *name, bool is_machine, bool is_abstract); +void apply_to_qlist(QList *list, bool is_machine); +QGuestAllocator *get_machine_allocator(QOSGraphObject *obj); +void *allocate_objects(QTestState *qts, char **path, QGuestAllocator **p_a= lloc); + +#endif diff --git a/tests/qtest/qos-test.c b/tests/qtest/qos-test.c index fd70d73ea5..ad193f43a5 100644 --- a/tests/qtest/qos-test.c +++ b/tests/qtest/qos-test.c @@ -27,65 +27,11 @@ #include "libqos/malloc.h" #include "libqos/qgraph.h" #include "libqos/qgraph_internal.h" +#include "libqos/qos_external.h" =20 static char *old_path; =20 -static void apply_to_node(const char *name, bool is_machine, bool is_abstr= act) -{ - char *machine_name =3D NULL; - if (is_machine) { - const char *arch =3D qtest_get_arch(); - machine_name =3D g_strconcat(arch, "/", name, NULL); - name =3D machine_name; - } - qos_graph_node_set_availability(name, true); - if (is_abstract) { - qos_delete_cmd_line(name); - } - g_free(machine_name); -} =20 -/** - * apply_to_qlist(): using QMP queries QEMU for a list of - * machines and devices available, and sets the respective node - * as true. If a node is found, also all its produced and contained - * child are marked available. - * - * See qos_graph_node_set_availability() for more info - */ -static void apply_to_qlist(QList *list, bool is_machine) -{ - const QListEntry *p; - const char *name; - bool abstract; - QDict *minfo; - QObject *qobj; - QString *qstr; - QBool *qbool; - - for (p =3D qlist_first(list); p; p =3D qlist_next(p)) { - minfo =3D qobject_to(QDict, qlist_entry_obj(p)); - qobj =3D qdict_get(minfo, "name"); - qstr =3D qobject_to(QString, qobj); - name =3D qstring_get_str(qstr); - - qobj =3D qdict_get(minfo, "abstract"); - if (qobj) { - qbool =3D qobject_to(QBool, qobj); - abstract =3D qbool_get_bool(qbool); - } else { - abstract =3D false; - } - - apply_to_node(name, is_machine, abstract); - qobj =3D qdict_get(minfo, "alias"); - if (qobj) { - qstr =3D qobject_to(QString, qobj); - name =3D qstring_get_str(qstr); - apply_to_node(name, is_machine, abstract); - } - } -} =20 /** * qos_set_machines_devices_available(): sets availability of qgraph @@ -129,10 +75,6 @@ static void qos_set_machines_devices_available(void) qobject_unref(response); } =20 -static QGuestAllocator *get_machine_allocator(QOSGraphObject *obj) -{ - return obj->get_driver(obj, "memory"); -} =20 static void restart_qemu_or_continue(char *path) { @@ -159,78 +101,6 @@ void qos_invalidate_command_line(void) old_path =3D NULL; } =20 -/** - * allocate_objects(): given an array of nodes @arg, - * walks the path invoking all constructors and - * passing the corresponding parameter in order to - * continue the objects allocation. - * Once the test is reached, return the object it consumes. - * - * Since the machine and QEDGE_CONSUMED_BY nodes allocate - * memory in the constructor, g_test_queue_destroy is used so - * that after execution they can be safely free'd. (The test's - * ->before callback is also welcome to use g_test_queue_destroy). - * - * Note: as specified in walk_path() too, @arg is an array of - * char *, where arg[0] is a pointer to the command line - * string that will be used to properly start QEMU when executing - * the test, and the remaining elements represent the actual objects - * that will be allocated. - */ -static void *allocate_objects(QTestState *qts, char **path, QGuestAllocato= r **p_alloc) -{ - int current =3D 0; - QGuestAllocator *alloc; - QOSGraphObject *parent =3D NULL; - QOSGraphEdge *edge; - QOSGraphNode *node; - void *edge_arg; - void *obj; - - node =3D qos_graph_get_node(path[current]); - g_assert(node->type =3D=3D QNODE_MACHINE); - - obj =3D qos_machine_new(node, qts); - qos_object_queue_destroy(obj); - - alloc =3D get_machine_allocator(obj); - if (p_alloc) { - *p_alloc =3D alloc; - } - - for (;;) { - if (node->type !=3D QNODE_INTERFACE) { - qos_object_start_hw(obj); - parent =3D obj; - } - - /* follow edge and get object for next node constructor */ - current++; - edge =3D qos_graph_get_edge(path[current - 1], path[current]); - node =3D qos_graph_get_node(path[current]); - - if (node->type =3D=3D QNODE_TEST) { - g_assert(qos_graph_edge_get_type(edge) =3D=3D QEDGE_CONSUMED_B= Y); - return obj; - } - - switch (qos_graph_edge_get_type(edge)) { - case QEDGE_PRODUCES: - obj =3D parent->get_driver(parent, path[current]); - break; - - case QEDGE_CONSUMED_BY: - edge_arg =3D qos_graph_edge_get_arg(edge); - obj =3D qos_driver_new(node, obj, alloc, edge_arg); - qos_object_queue_destroy(obj); - break; - - case QEDGE_CONTAINS: - obj =3D parent->get_device(parent, path[current]); - break; - } - } -} =20 /* The argument to run_one_test, which is the test function that is regist= ered * with GTest, is a vector of strings. The first item is the initial comm= and --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500505; cv=pass; d=zohomail.com; s=zohoarc; b=BKI1JO+KnVL3Ja7A3uBu/mftN68DbmdQp7amqNrRzm9+mTxsGZIr7dGsj464hviiKGFXrIymnsbd/gIb8XB4uaYoUj1lPgqRdqUzNC9PD6wMz6KwiT5dM9Rt2iBDn/RFy9QvqA7kwUnS4kEf0ZnaNinkT02TUMg3hmldOmHbOLg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500505; h=Content-Type:Content-Transfer-Encoding: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=Tl0/ILW0g0Hz8hjxyHNzbtrsBdyyLkU/GgwK3UTS5tU=; b=lBpel64lV0KD2+ZASLMkJiMty60b32tBfHXE/duOA++p5ibXZBK66Zp9WbA5HNTebSwa2BU/gH2mCghiR+Z2rBEc23dZMxoVc26YZq+6fSgQ8V+wLr/NkYQXnQ2R5nxw1axjuMYMok0ASBoX86QDXzBFoo/oJwxM8Hoe6SfGnOU= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500505349274.59432327305024; Sun, 19 Jan 2020 22:08:25 -0800 (PST) Received: from localhost ([::1]:59052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQEa-0004ZM-5u for importer@patchew.org; Mon, 20 Jan 2020 01:08:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35328) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1d-0007CG-Kc for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1b-0006R0-RL for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:01 -0500 Received: from mail-bn7nam10on2096.outbound.protection.outlook.com ([40.107.92.96]:25288 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1b-0006Qb-Mb for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:54:59 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:58 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:58 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lGAEeA2nqA3M7jv1ayFIU8W3h2IOOpm3rK5Y1fR80YhnyuYKIchy+I1Z+5r0d8aUAie10TZeI3mYpIuwZ4xiMyeteRDY6rplAqMcxyJOSomEGsAzq0YJ33JEyiZ86E7IcLIuSTNwqW/0DJEHspom18W4mK/T6EBko1F4/60l3Css3Ud37OHF0wGH7SKo89tQltv8D05qwP3X7OrZiifB0NdjVjLieTIOlID7ev4CfPRJ02nQ2TmMK/g53I2BxAoqOA3CMXa2nj30xpEYGdXt1JXOE6H604sTNnIWRXq98pN6+BNQGaidqGj5ARuB/Q1Z49GEI8M6XzRwAVaM/AFN7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Tl0/ILW0g0Hz8hjxyHNzbtrsBdyyLkU/GgwK3UTS5tU=; b=SaISarfNvFpq2dMDwjPL6n5i8LTa8eJh0Mr13tbzc6Qd+tr96rh5tK8SnBtGMEE0ZD9XKK9J/JBWjdvGSICQHcdhQFu3/SjqucomNWpBvHQHyoNRLBwndOe8mU7JNwhP5y33PBFX+aeWaxUihqnfQe9vpDuWaueB2A3dmNv+YF6diWEECylLlZnZs07W4WFReHO3efEyvvjEmpLVakQaA2UiMnjTqViDmKBu9ckWmqK84TlNX8A69AvCmAwsAidTMOnUmz88r2Kgf3Sipy6Xb2xB1LVJuM6yKmtb54yT5/7JlwEd39JfrcSvHUN+RQxSZh59HwTVtRVS1KW/tHfoqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Tl0/ILW0g0Hz8hjxyHNzbtrsBdyyLkU/GgwK3UTS5tU=; b=PBdt3rqyHAXzx8o8+vlBVVIB4CvsPn8LtIg6YVg+WHGJbkUmCG80NK8GdljwxpqaWkc98otMLskhE6jgB5oIid0hhLx/CBASlYn8I6o3IjAqcPD4fsRs20w472Ki1m7HZT5d1h77+ZJTwe5OMJsXJ0wJ92p+G3KisHS0xlQa3Ls= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 11/20] fuzz: add fuzzer skeleton Thread-Topic: [PATCH v7 11/20] fuzz: add fuzzer skeleton Thread-Index: AQHVz1Yl7EIuhCEXAE6SVHuKCAM4Pw== Date: Mon, 20 Jan 2020 05:54:58 +0000 Message-ID: <20200120055410.22322-17-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 06dca6a5-bc3d-4f1d-61d4-08d79d6d4808 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2512; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: uqW1K1UcHeuE1vHNTAnPIFOYCAc1B9DcvO0gneyRME6GHpEeqJlQ2/aBuTbEuGe0VnP9QaS7Lh9lhIgkNUsNXQMD4dX+EIzW3hwm+apyOaSsEJleAmgfZMcM297ebt1FkI7nrWdfFyZupGGplHDXUneWXR6cwRToQ1puOe/jXvzw6KTHk4NS8THzPmBfUhSrR89aikZjZSFPdyatzovijE/Q24lWKKqLfUpRK7/YYuK0FuN3GTGvzQcwECW7mnwA9GJLvpwMiHXHn33sweC8HAnEvBfZKHXVJ67pcHuOKk1u8EZ8ovlpNEvUfYHfuowMT0bE/kXFG45AGHF4IE8TZGCHS06C48YCCkqw6uYrFXkngep3dXTTARaPTBUSepoT/53GnSy5tKnelcDDDwI95DKVzikRuCU0pXck7gZb/CVyyO3lGHl68gj7vq4sNbau Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 06dca6a5-bc3d-4f1d-61d4-08d79d6d4808 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:58.3448 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: KfRsTT9g9IxFy4a/pAKaP/sBIgSWXxMFYqcOp+82kygvty5py5o1gzz3GYFwgrQF X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.96 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" tests/fuzz/fuzz.c serves as the entry point for the virtual-device fuzzer. Namely, libfuzzer invokes the LLVMFuzzerInitialize and LLVMFuzzerTestOneInput functions, both of which are defined in this file. This change adds a "FuzzTarget" struct, along with the fuzz_add_target function, which should be used to define new fuzz targets. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/fuzz/Makefile.include | 6 + tests/qtest/fuzz/fuzz.c | 179 ++++++++++++++++++++++++++++++ tests/qtest/fuzz/fuzz.h | 95 ++++++++++++++++ 3 files changed, 280 insertions(+) create mode 100644 tests/qtest/fuzz/Makefile.include create mode 100644 tests/qtest/fuzz/fuzz.c create mode 100644 tests/qtest/fuzz/fuzz.h diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include new file mode 100644 index 0000000000..8632bb89f4 --- /dev/null +++ b/tests/qtest/fuzz/Makefile.include @@ -0,0 +1,6 @@ +QEMU_PROG_FUZZ=3Dqemu-fuzz-$(TARGET_NAME)$(EXESUF) + +fuzz-obj-y +=3D tests/qtest/libqtest.o +fuzz-obj-y +=3D tests/qtest/fuzz/fuzz.o # Fuzzer skeleton + +FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest diff --git a/tests/qtest/fuzz/fuzz.c b/tests/qtest/fuzz/fuzz.c new file mode 100644 index 0000000000..afceb4300a --- /dev/null +++ b/tests/qtest/fuzz/fuzz.c @@ -0,0 +1,179 @@ +/* + * fuzzing driver + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "sysemu/qtest.h" +#include "sysemu/runstate.h" +#include "sysemu/sysemu.h" +#include "qemu/main-loop.h" +#include "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/qgraph.h" +#include "fuzz.h" + +#define MAX_EVENT_LOOPS 10 + +typedef struct FuzzTargetState { + FuzzTarget *target; + QSLIST_ENTRY(FuzzTargetState) target_list; +} FuzzTargetState; + +typedef QSLIST_HEAD(, FuzzTargetState) FuzzTargetList; + +static const char *fuzz_arch =3D TARGET_NAME; + +static FuzzTargetList *fuzz_target_list; +static FuzzTarget *fuzz_target; +static QTestState *fuzz_qts; + + + +void flush_events(QTestState *s) +{ + int i =3D MAX_EVENT_LOOPS; + while (g_main_context_pending(NULL) && i-- > 0) { + main_loop_wait(false); + } +} + +static QTestState *qtest_setup(void) +{ + qtest_server_set_send_handler(&qtest_client_inproc_recv, &fuzz_qts); + return qtest_inproc_init(&fuzz_qts, false, fuzz_arch, + &qtest_server_inproc_recv); +} + +void fuzz_add_target(const FuzzTarget *target) +{ + FuzzTargetState *tmp; + FuzzTargetState *target_state; + if (!fuzz_target_list) { + fuzz_target_list =3D g_new0(FuzzTargetList, 1); + } + + QSLIST_FOREACH(tmp, fuzz_target_list, target_list) { + if (g_strcmp0(tmp->target->name, target->name) =3D=3D 0) { + fprintf(stderr, "Error: Fuzz target name %s already in use\n", + target->name); + abort(); + } + } + target_state =3D g_new0(FuzzTargetState, 1); + target_state->target =3D g_new0(FuzzTarget, 1); + *(target_state->target) =3D *target; + QSLIST_INSERT_HEAD(fuzz_target_list, target_state, target_list); +} + + + +static void usage(char *path) +{ + printf("Usage: %s --fuzz-target=3DFUZZ_TARGET [LIBFUZZER ARGUMENTS]\n"= , path); + printf("where FUZZ_TARGET is one of:\n"); + FuzzTargetState *tmp; + if (!fuzz_target_list) { + fprintf(stderr, "Fuzz target list not initialized\n"); + abort(); + } + QSLIST_FOREACH(tmp, fuzz_target_list, target_list) { + printf(" * %s : %s\n", tmp->target->name, + tmp->target->description); + } + exit(0); +} + +static FuzzTarget *fuzz_get_target(char* name) +{ + FuzzTargetState *tmp; + if (!fuzz_target_list) { + fprintf(stderr, "Fuzz target list not initialized\n"); + abort(); + } + + QSLIST_FOREACH(tmp, fuzz_target_list, target_list) { + if (strcmp(tmp->target->name, name) =3D=3D 0) { + return tmp->target; + } + } + return NULL; +} + + +/* Executed for each fuzzing-input */ +int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) +{ + /* + * Do the pre-fuzz-initialization before the first fuzzing iteration, + * instead of before the actual fuzz loop. This is needed since libfuz= zer + * may fork off additional workers, prior to the fuzzing loop, and if + * pre_fuzz() sets up e.g. shared memory, this should be done for the + * individual worker processes + */ + static int pre_fuzz_done; + if (!pre_fuzz_done && fuzz_target->pre_fuzz) { + fuzz_target->pre_fuzz(fuzz_qts); + pre_fuzz_done =3D true; + } + + fuzz_target->fuzz(fuzz_qts, Data, Size); + return 0; +} + +/* Executed once, prior to fuzzing */ +int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp) +{ + + char *target_name; + + /* Initialize qgraph and modules */ + qos_graph_init(); + module_call_init(MODULE_INIT_FUZZ_TARGET); + module_call_init(MODULE_INIT_QOM); + module_call_init(MODULE_INIT_LIBQOS); + + if (*argc <=3D 1) { + usage(**argv); + } + + /* Identify the fuzz target */ + target_name =3D (*argv)[1]; + if (!strstr(target_name, "--fuzz-target=3D")) { + usage(**argv); + } + + target_name +=3D strlen("--fuzz-target=3D"); + + fuzz_target =3D fuzz_get_target(target_name); + if (!fuzz_target) { + usage(**argv); + } + + fuzz_qts =3D qtest_setup(); + + if (fuzz_target->pre_vm_init) { + fuzz_target->pre_vm_init(); + } + + /* Run QEMU's softmmu main with the fuzz-target dependent arguments */ + const char *init_cmdline =3D fuzz_target->get_init_cmdline(fuzz_target= ); + + /* Split the runcmd into an argv and argc */ + wordexp_t result; + wordexp(init_cmdline, &result, 0); + + qemu_init(result.we_wordc, result.we_wordv, NULL); + + return 0; +} diff --git a/tests/qtest/fuzz/fuzz.h b/tests/qtest/fuzz/fuzz.h new file mode 100644 index 0000000000..03901d414e --- /dev/null +++ b/tests/qtest/fuzz/fuzz.h @@ -0,0 +1,95 @@ +/* + * fuzzing driver + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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. + * + */ + +#ifndef FUZZER_H_ +#define FUZZER_H_ + +#include "qemu/osdep.h" +#include "qemu/units.h" +#include "qapi/error.h" + +#include "tests/qtest/libqtest.h" + +/** + * A libfuzzer fuzzing target + * + * The QEMU fuzzing binary is built with all available targets, each + * with a unique @name that can be specified on the command-line to + * select which target should run. + * + * A target must implement ->fuzz() to process a random input. If QEMU + * crashes in ->fuzz() then libfuzzer will record a failure. + * + * Fuzzing targets are registered with fuzz_add_target(): + * + * static const FuzzTarget fuzz_target =3D { + * .name =3D "my-device-fifo", + * .description =3D "Fuzz the FIFO buffer registers of my-device", + * ... + * }; + * + * static void register_fuzz_target(void) + * { + * fuzz_add_target(&fuzz_target); + * } + * fuzz_target_init(register_fuzz_target); + */ +typedef struct FuzzTarget { + const char *name; /* target identifier (passed to --fuzz-targe= t=3D)*/ + const char *description; /* help text */ + + + /* + * returns the arg-list that is passed to qemu/softmmu init() + * Cannot be NULL + */ + const char* (*get_init_cmdline)(struct FuzzTarget *); + + /* + * will run once, prior to running qemu/softmmu init. + * eg: set up shared-memory for communication with the child-process + * Can be NULL + */ + void(*pre_vm_init)(void); + + /* + * will run once, after QEMU has been initialized, prior to the fuzz-l= oop. + * eg: detect the memory map + * Can be NULL + */ + void(*pre_fuzz)(QTestState *); + + /* + * accepts and executes an input from libfuzzer. this is repeatedly + * executed during the fuzzing loop. Its should handle setup, input + * execution and cleanup. + * Cannot be NULL + */ + void(*fuzz)(QTestState *, const unsigned char *, size_t); + +} FuzzTarget; + +void flush_events(QTestState *); +void reboot(QTestState *); + +/* + * makes a copy of *target and adds it to the target-list. + * i.e. fine to set up target on the caller's stack + */ +void fuzz_add_target(const FuzzTarget *target); + +int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size); +int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp); + +#endif + --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579501183; cv=pass; d=zohomail.com; s=zohoarc; b=ImdoM8t7UzXutTiZX33beDWr3d/ItOx/ZNxIxOGwLUwWsfTMYUrmQpQurtqk6kqSp8wyLMSYpK9+eUw0SoTqejWRzKLH6V6DT7RpCJiLmHfZkPIt9h51SjMfWA06IhXuUUckjn9qeO0weoQyjjUmEAPUGgH3VoEs57gx2uIdKCs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579501183; h=Content-Type:Content-Transfer-Encoding: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=Ui0cO3mn4zGmGs0rIHRGsmsj5MEjM8q6EfnLFSQsmv4=; b=Dg3hthTNqgrFdSw6556TsiR5jPwpI9p6B/FIw23iWJAWqywWJk65xfzyGMRa7hdhQ8Tq1Pv3ThM0mCHZhJnGGK0AXJ8R1WU6vrcwT7uClRHkatnzIG0BuefeZu8i2hijsVk4TJiCLBxYB2tHRXIRnmOph7uEz8PB04KfjFqqTw4= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157950118398532.4885524459479; Sun, 19 Jan 2020 22:19:43 -0800 (PST) Received: from localhost ([::1]:59204 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQPX-0003Mh-0L for importer@patchew.org; Mon, 20 Jan 2020 01:19:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35341) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1f-0007Es-8f for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1c-0006Rd-PT for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:03 -0500 Received: from mail-bn7nam10on2137.outbound.protection.outlook.com ([40.107.92.137]:56161 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1c-0006RK-Kx for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:00 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:54:59 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:54:59 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AaoNWI6boG0/naGiZhBzznc9/dtwqVk0cgoIabqa5wWO9dt9yCSAtytB9ElfYbS402wIJHtaTSq7soAWB+nq5+1ra4VSWaozbNcV/uqNqRryLFlbFStwYgIhaOHaMjhnNzj0ZM9qK+m2E/lJ6grH89av9NLUW8zhSPwxRVydHYaA+Rjh2l4uaki08xAdVyEYqnB8PXP578fmOExnKq1iCuSYawI1DiQEOVuB2w7WAd9Y4jkqtdvCvZZthuIk1t3U0UnIRsQz/eVlU3AfhI6v5nXfytPi1b/GtQJmvRdO3fogs3ZWfsmki+icZIffTkHXCGPGrMOdB3LB2GujHHckLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ui0cO3mn4zGmGs0rIHRGsmsj5MEjM8q6EfnLFSQsmv4=; b=VFkHZCM7annUsUPAiYNF5vGnTKunYIpLj72eQT2tRV8VKd5bhpgKLcLECeXDzdTmNfPSW1GiNfoG78EdpBjQ7MSZ86JN2+RssgGaIxUQpeIOGy02iS8FfO2hkdlTY3MJo+xEKa8zsww8wbg7OsTeh5TLiVAZ4bKLhR2Eeh6XqsE9BevbNLc/Ki131bGLAd78KEL3ZYMs/iFw/ZR0wjYt9mxGhzqo0k0sPwFauz2+sx75ma/3BNsUmpQQTjv+1bs6mCC3QCnVM421PP93biIZoimWFQBjzgxqk77xb3OjUz/yxv67wmXebYsSdEyGVdWdkRYxlwTq3gV2e87jATI7AA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ui0cO3mn4zGmGs0rIHRGsmsj5MEjM8q6EfnLFSQsmv4=; b=k7/IheOBAQ+WzqHJvGr+2cBq3h7Xb03PGc5Hc74MSc1ZyIcsSXfNYLn/IY51xrGE6yttvs2fWFmtgLGvRX6ovX8D45ZkOvVAhIVRiv9QjUWWnGbGl6nw99BPG4VSDJor6v2QWRRqlyYaW3LSMFccyd4ez2CqVVsstYshbxaArmw= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 12/20] exec: keep ram block across fork when using qtest Thread-Topic: [PATCH v7 12/20] exec: keep ram block across fork when using qtest Thread-Index: AQHVz1YmyMQHZuW7XUiNZvtV7JSQOw== Date: Mon, 20 Jan 2020 05:54:59 +0000 Message-ID: <20200120055410.22322-18-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 305f31b8-2321-429a-8ddd-08d79d6d4880 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4941; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pXIRwzizj6sulw+IzwxNWjEn5VtFWV3sgo8ROLq1mL0FaHRAQD26mw6ptuHv7Z3Nrv9BadE7EoaSRQjtzPp5RyqQJfpi2314p8cS6bns8Axv2GuEqol5q+zWeOW3ErlAapS9XyP0uJucW/nECgQXh+GbbzW6tBtGyMFasOcGO/Og2PU/QGBNeX+NW6bBM6hhBqWF3rngyMD0cloPjkrwU4fZHxfxm1vIbXniycUiyJCZvYbKMTuX3kQ+0YNYQxguQptbAy6l9c3F4RB+rKDtvpBp/zojqhy96PiWo/O6VCA+C5FR4P6RSoo3NPA845b4Z66YLJ2H3cFua5nm6nBGz+RpSQgSbcAm6uq3z92qxF1G4ytn/IXs13Bl7ZOYyS3I+tS7/0VGtOESeehWWPt+/x80atYY2ThsotFgmSsYTFisg9BzUiZGqKzaE484iZHP Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 305f31b8-2321-429a-8ddd-08d79d6d4880 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:54:59.3293 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: HPST2ncAgTM4bT7I8EOnrrg5HWibEjXe8le1tgov4cA4LE9Uq4MvhqEmzO3ZpTbQ X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.137 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: "pbonzini@redhat.com" , "bsd@redhat.com" , Richard Henderson , "stefanha@redhat.com" , "Bulekov, Alexander" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Ram blocks were marked MADV_DONTFORK breaking fuzzing-tests which execute each test-input in a forked process. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- exec.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/exec.c b/exec.c index d4b769d0d4..99368f175b 100644 --- a/exec.c +++ b/exec.c @@ -35,6 +35,7 @@ #include "sysemu/kvm.h" #include "sysemu/sysemu.h" #include "sysemu/tcg.h" +#include "sysemu/qtest.h" #include "qemu/timer.h" #include "qemu/config-file.h" #include "qemu/error-report.h" @@ -2306,8 +2307,15 @@ static void ram_block_add(RAMBlock *new_block, Error= **errp, bool shared) if (new_block->host) { qemu_ram_setup_dump(new_block->host, new_block->max_length); qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_HUG= EPAGE); - /* MADV_DONTFORK is also needed by KVM in absence of synchronous M= MU */ - qemu_madvise(new_block->host, new_block->max_length, QEMU_MADV_DON= TFORK); + /* + * MADV_DONTFORK is also needed by KVM in absence of synchronous M= MU + * Configure it unless the machine is a qtest server, in which case + * KVM is not used and it may be forked (eg for fuzzing purposes). + */ + if (!qtest_enabled()) { + qemu_madvise(new_block->host, new_block->max_length, + QEMU_MADV_DONTFORK); + } ram_block_notify_add(new_block->host, new_block->max_length); } } --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500672; cv=pass; d=zohomail.com; s=zohoarc; b=O+Msrj9bqGP/wHgtpl28VvoaVwDG/1EJFydZVGa8ArhqAk6Fxo1e4kF03Q03sGdAj+kz8TumBGf6Q4N0SloQ+ALF5IPtg4rCKAgQTGQJbpnUXYzY5PbhDGVzzU2bNR5p3v0mmrERPG+Xhe2kd6M1yq4LSE3xmQGnBnxNjsySwhc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500672; h=Content-Type:Content-Transfer-Encoding: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=fryQK8xhDZQ/FTsWZyYBSV50LhpNP2y8Q2iAmhkAd6c=; b=ibEN3ATnIMPlJYV5SFx1FIqmjtdIn00yHgdA7nh5r+FO7lqX73aBBNn0/r+RHt6VcX/VIHbJXj1HyunYT6rjgAPwlYSs6J2+QKlg/azTuW9tg4/yeYY5Znrm0d9OZfEu3M3sZf+YE87EJZK2Z5GdZvatVEaK6F+Z0qC+QbKFCe8= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 157950067208221.65960923377827; Sun, 19 Jan 2020 22:11:12 -0800 (PST) Received: from localhost ([::1]:59092 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQHG-0008Af-Ev for importer@patchew.org; Mon, 20 Jan 2020 01:11:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35347) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1f-0007FY-Le for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1e-0006SP-2f for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:03 -0500 Received: from mail-bn7nam10on2098.outbound.protection.outlook.com ([40.107.92.98]:14528 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1d-0006S7-Tz for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:02 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:00 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:00 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:54:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SN3VMyTSkjWFTs68tRoHYD//KAwpa/OMel2xVU4DcjocEQPjsvh1k6WPP7+7PmUJhfWy6/g/cLKqqSUQHTRrC2Pt8gv3n0E62l0q+B9K50rA0/ykjgas7gcBvI/3FYiLH4nr0EzOyjUa2cZa4jaUf21fmYvuVUxp7InHSDMRN9UNunjt0Z5f075Aljmtb8rF9DJm1ubb24CrT94b/vVd3WDLSanU4BVn5nQxqcsv4Eglsq15Tckgux79eCcvQLq9Xbx34n1/pOWqoH6/Tb0bEWr14/ympm1u6r2k2ffpOHpSZ+Ib22R1RaG7KJ7eG4W8dL0H7b9rPFCfRwzSRk+zkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fryQK8xhDZQ/FTsWZyYBSV50LhpNP2y8Q2iAmhkAd6c=; b=CrrEP5HCNirtM8MltOaujByKKQ9r+CB+xu2x5BPuE6ceyDRALtFUJmcf3G7IDsIVERT+cvIs5DBut5PzWrfMyo0VhJV/l8TLNbxoIjebuTLQERZOHSidRyPM5ieyLsKPCIoeJPDFKCneUTD8Rk0oi34DC3zqlW3ZLiksgtEIMbw+z6NC14erhtR/96mupFRv/lbFptfr4XYvczfMGXl8jpB20uAICgjCIxyoc5Oi7ylG4IoIp2Ncw9TgiJkgaZr7St0S0H9HmKs6obK9e4HmjVqLzueshAu6qzMg6WFSltbfmjaUhSPjbFLcv3tyswo+PGNBM5FzdWMkG6HlESIEMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fryQK8xhDZQ/FTsWZyYBSV50LhpNP2y8Q2iAmhkAd6c=; b=00w2MYKHrwQd/xnZNpjIPoQ2EgEF8CMicSJPX96UZdKNpjQnvIY8rjRd0opSwZByazLDbZStcVONSO+9n3i26627KHFjFQrcH8ZXMbQ67FweiAYzMhPYhbKru0QlWF/JRXA/NKZLcBs/a07ZsMjnq07+gxixpHeg942LCEERBP8= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 13/20] fuzz: support for fork-based fuzzing. Thread-Topic: [PATCH v7 13/20] fuzz: support for fork-based fuzzing. Thread-Index: AQHVz1YnOBDAY/WqDEGgvxlgfET9KA== Date: Mon, 20 Jan 2020 05:55:00 +0000 Message-ID: <20200120055410.22322-19-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e55500ca-a1a9-488e-513c-08d79d6d4941 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(6666004)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: p30TOs4AjVOJvcv/BP5UAFQw6Wj/T7jbD+X9ut+LMSRrX0fPBBC4HUH5H0SbFMjwLGhWNEovK+4Fqfb4zgRLNH2evBHQWAqal1zOMnBaf1siHIPsWR/AUHx2DjxZQIT1dx+h/JERLC/oU23fHDTLjxkoa4WmCd5ad2SXXDBDdzH8vzYKti2mOHHht5xpu+MRtdpYozwhTZKRDWAJTL4J+w/PwgE7Kt0wt/OS5KXc7F5kdr9oq9Qccq8MD/wrZUaHARma+/PPEoH/+UBZX2w1O90UzmMAQRFosWguibs2RaSbiPLCszGTaMYoihxYgGrmiNcL+f2X9ubUxIUGuDcZWqe2ubZ2nP2tkQYCetiDr7g+wQjwIE0Dada1NXwd6keqJZnDhU1/q+ugHO5zFST2ENUZGffz0Dv/GjEzBV3wOHy0jiZ4dAFOqN99zqb6BmvS Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: e55500ca-a1a9-488e-513c-08d79d6d4941 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:00.7295 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: guR2jZCAUe8giJmb1PkahofWhPXt8i6kjz0sTWAMigVcZg7arQdsKCBooA+SfQsn X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.98 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" fork() is a simple way to ensure that state does not leak in between fuzzing runs. Unfortunately, the fuzzer mutation engine relies on bitmaps which contain coverage information for each fuzzing run, and these bitmaps should be copied from the child to the parent(where the mutation occurs). These bitmaps are created through compile-time instrumentation and they are not shared with fork()-ed processes, by default. To address this, we create a shared memory region, adjust its size and map it _over_ the counter region. Furthermore, libfuzzer doesn't generally expose the globals that specify the location of the counters/coverage bitmap. As a workaround, we rely on a custom linker script which forces all of the bitmaps we care about to be placed in a contiguous region, which is easy to locate and mmap over. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/fuzz/Makefile.include | 5 +++ tests/qtest/fuzz/fork_fuzz.c | 55 +++++++++++++++++++++++++++++++ tests/qtest/fuzz/fork_fuzz.h | 23 +++++++++++++ tests/qtest/fuzz/fork_fuzz.ld | 37 +++++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 tests/qtest/fuzz/fork_fuzz.c create mode 100644 tests/qtest/fuzz/fork_fuzz.h create mode 100644 tests/qtest/fuzz/fork_fuzz.ld diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index 8632bb89f4..a90915d56d 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -2,5 +2,10 @@ QEMU_PROG_FUZZ=3Dqemu-fuzz-$(TARGET_NAME)$(EXESUF) =20 fuzz-obj-y +=3D tests/qtest/libqtest.o fuzz-obj-y +=3D tests/qtest/fuzz/fuzz.o # Fuzzer skeleton +fuzz-obj-y +=3D tests/qtest/fuzz/fork_fuzz.o =20 FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest + +# Linker Script to force coverage-counters into known regions which we can= mark +# shared +FUZZ_LDFLAGS +=3D -Xlinker -T$(SRC_PATH)/tests/qtest/fuzz/fork_fuzz.ld diff --git a/tests/qtest/fuzz/fork_fuzz.c b/tests/qtest/fuzz/fork_fuzz.c new file mode 100644 index 0000000000..2bd0851903 --- /dev/null +++ b/tests/qtest/fuzz/fork_fuzz.c @@ -0,0 +1,55 @@ +/* + * Fork-based fuzzing helpers + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "fork_fuzz.h" + + +void counter_shm_init(void) +{ + char *shm_path =3D g_strdup_printf("/qemu-fuzz-cntrs.%d", getpid()); + int fd =3D shm_open(shm_path, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); + g_free(shm_path); + + if (fd =3D=3D -1) { + perror("Error: "); + exit(1); + } + if (ftruncate(fd, &__FUZZ_COUNTERS_END - &__FUZZ_COUNTERS_START) =3D= =3D -1) { + perror("Error: "); + exit(1); + } + /* Copy what's in the counter region to the shm.. */ + void *rptr =3D mmap(NULL , + &__FUZZ_COUNTERS_END - &__FUZZ_COUNTERS_START, + PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + memcpy(rptr, + &__FUZZ_COUNTERS_START, + &__FUZZ_COUNTERS_END - &__FUZZ_COUNTERS_START); + + munmap(rptr, &__FUZZ_COUNTERS_END - &__FUZZ_COUNTERS_START); + + /* And map the shm over the counter region */ + rptr =3D mmap(&__FUZZ_COUNTERS_START, + &__FUZZ_COUNTERS_END - &__FUZZ_COUNTERS_START, + PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0); + + close(fd); + + if (!rptr) { + perror("Error: "); + exit(1); + } +} + + diff --git a/tests/qtest/fuzz/fork_fuzz.h b/tests/qtest/fuzz/fork_fuzz.h new file mode 100644 index 0000000000..9ecb8b58ef --- /dev/null +++ b/tests/qtest/fuzz/fork_fuzz.h @@ -0,0 +1,23 @@ +/* + * Fork-based fuzzing helpers + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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. + * + */ + +#ifndef FORK_FUZZ_H +#define FORK_FUZZ_H + +extern uint8_t __FUZZ_COUNTERS_START; +extern uint8_t __FUZZ_COUNTERS_END; + +void counter_shm_init(void); + +#endif + diff --git a/tests/qtest/fuzz/fork_fuzz.ld b/tests/qtest/fuzz/fork_fuzz.ld new file mode 100644 index 0000000000..b23a59f194 --- /dev/null +++ b/tests/qtest/fuzz/fork_fuzz.ld @@ -0,0 +1,37 @@ +/* We adjust linker script modification to place all of the stuff that nee= ds to + * persist across fuzzing runs into a contiguous seciton of memory. Then, = it is + * easy to re-map the counter-related memory as shared. +*/ + +SECTIONS +{ + .data.fuzz_start : ALIGN(4K) + { + __FUZZ_COUNTERS_START =3D .; + __start___sancov_cntrs =3D .; + *(_*sancov_cntrs); + __stop___sancov_cntrs =3D .; + + /* Lowest stack counter */ + *(__sancov_lowest_stack); + } + .data.fuzz_ordered : + { + /* Coverage counters. They're not necessary for fuzzing, but are use= ful + * for analyzing the fuzzing performance + */ + __start___llvm_prf_cnts =3D .; + *(*llvm_prf_cnts); + __stop___llvm_prf_cnts =3D .; + + /* Internal Libfuzzer TracePC object which contains the ValueProfile= Map */ + FuzzerTracePC*(.bss*); + } + .data.fuzz_end : ALIGN(4K) + { + __FUZZ_COUNTERS_END =3D .; + } +} +/* Dont overwrite the SECTIONS in the default linker script. Instead inser= t the + * above into the default script */ +INSERT AFTER .data; --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500717; cv=pass; d=zohomail.com; s=zohoarc; b=D8PiF5abcSEbCZzMrHrTtLao1DjOr01SQ4U+D4ij22CbDg+vmtPEfkqs+8Ic6uIOAha+bdXqfuciHZVqIbcfvm+IlJTuSR5WTc/6ESoH2jwhgJjCYEA4MrMUwFnjBEkWEfb2vz0vxbptQEvF7wG5/hpJOnVB8VbYstHB2CS4y50= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500717; h=Content-Type:Content-Transfer-Encoding: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=K3/v88HWAuWAPx4PQlybO5l5a9/rWxQ9WHHkxquveJY=; b=bw0+a6LXVitkKw4c9fDWifQd1vTQTVESptDMU3Jo+ibTf6A+MoGqfY6+pU0xFtA50RyNh3Mfdrxaus3LaiMhvkxuUV5UPU5W3thYxZdh5e11dzoh4f+GSuNWI3MYCkwSkfCnwyZ40ZrOeSYqee29hWkYecquvu0ASCF2lLwM32M= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500717797568.7769870314953; Sun, 19 Jan 2020 22:11:57 -0800 (PST) Received: from localhost ([::1]:59094 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQI0-0000dP-2C for importer@patchew.org; Mon, 20 Jan 2020 01:11:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35365) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1h-0007Hf-3U for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1f-0006Sv-22 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:04 -0500 Received: from mail-bn7nam10on2122.outbound.protection.outlook.com ([40.107.92.122]:57128 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1e-0006Sd-Sn for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:03 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:01 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:01 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ut4Cru+uWTe3eh5CFMqZgvz2pvi/2BxSeEQYA5rREkl30im2/2Gja1gg5YlP2zb0rILI/JX0UDUSZZqfz1SjaU+GMPxa1PV2oeBbYqoOG0XpTRUTy70BIM4DDfMJlEcrI07oFFMmilBS8NoSecGz964qpttGNA5WwaR4yzXYzgaWSCqv8jruM7GhDdx5gxBs5w1dEhJCEqoHn+mYex+FzIzueLt7OMYDF3a6IX0bZS69lYFayE6YP7sdmqdFtcmn3dy+74E9iVJjFpflTbvfzOcV8i1dR68tESE9qqg+56xITgG7fgs0uPeXia75tw9FjrbScSBAh+iZDWeDYJ68tw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K3/v88HWAuWAPx4PQlybO5l5a9/rWxQ9WHHkxquveJY=; b=alx7jJtK8TVbhi0rVbuHjSmpZzoDCOfOnhmALX2syN/Y8CMtqeWDWGS0ciNICqDITVF5Ih6Ek4knGV9eDwU+myRGsQxBFGwCAuUEyoLIJW+JpiipraEgUxLex2ZYHqM6eLqMlDH0gAGRLk2T/cEmHPfDQhf9OcANPFyY+QO1AA2BHkkpxTsejr/kuXbyY5HwfjVYlB7+wSglF6wcSEibUxPBvhCanXbvIj2Qjh6KsiSuwjutnEk/DMCFyAnVqdVWFI6dJxB9XWc6Wfc+zSBMdXAIRGogLxqHVsLzLd+KdTca9ctWkV5vhgt0LyQI9TpW2t5gCzGqtXXlrcGpJMcm7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K3/v88HWAuWAPx4PQlybO5l5a9/rWxQ9WHHkxquveJY=; b=d5veXLEuMetrN6xxyfYd+2y2Ue8WnVRU/y0kUVp3zML6vux5isrDgm8h7QdibnGBQ/lHKs6o/pDb5/w4+XXzyrBGaoFYby3yw9bjriW/GKzRIYc2NV4Fwm7tTuVrsyVoStJrpR+Pkdf7vCcX2Z8r338nQjjxwPJh+wHn6BdeBGE= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 14/20] fuzz: add support for qos-assisted fuzz targets Thread-Topic: [PATCH v7 14/20] fuzz: add support for qos-assisted fuzz targets Thread-Index: AQHVz1YnOj+xCYNAl06oCwVpnFIxuw== Date: Mon, 20 Jan 2020 05:55:01 +0000 Message-ID: <20200120055410.22322-20-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 790c33d7-1d84-4395-b163-08d79d6d49f9 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3276; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: so09w5CLEzUTWc0oz94NVd5WAOzoqC8c0B3hIlEzzwNxFzW99+xSCK5xsPZ+/GakCoPaYRV9v5ddBfls4sAWEDN5Bzwj3N7G24ixUjYVa12lrZUNBZZzkNm1qzS6UqDl9CQ36w7tTpIqYADPX7DtFa8mcD/NxObpV+s5TVdfhw1KJcSdNSs0YQrnJhbf8Y+888DO+/j2dCO1iVYQvw72QysqeT+3Wd0NUX7roWtVB9Uo135pNh8UsvKRb3O94kwu77fT2W3CAj7CWZQI8DMYIzAcQiVV/MhT5y857aVf3/Q37CTOecsmDsu/ZhCDkDnEnGrZKaWk0qaxqalx/u/Kz45M1pdddQWg7sQJWwKUumkNVUvJf9h1Z/R/OwmdrB5YU7hrPoCeeJvrr9cLm8I+tYNibafQlP8V05bygFXNrRUfcYjc66ZOjbVIgibvSrWdpQeK2j6Eaq+PeCDbxMjBvJ+2MnTuAFRGjhCLtZUos1k8REDnM3rIPtnvKRhom4mOXS0cHmCQNgQeU9SJOaDXRwERNPTN8EMihVfYLsFruMb+FUmkBH66qACEoHyu7Jc1 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 790c33d7-1d84-4395-b163-08d79d6d49f9 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:01.7279 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: C4ANWNvcaDrrXurlV1L+YVfnoatiTJuyfyiGl6f3HoBEqL6Yl1RHcnQtJ71EJn3z X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.122 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/fuzz/Makefile.include | 2 + tests/qtest/fuzz/qos_fuzz.c | 229 ++++++++++++++++++++++++++++++ tests/qtest/fuzz/qos_fuzz.h | 33 +++++ 3 files changed, 264 insertions(+) create mode 100644 tests/qtest/fuzz/qos_fuzz.c create mode 100644 tests/qtest/fuzz/qos_fuzz.h diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index a90915d56d..e3bdd33ff4 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -1,8 +1,10 @@ QEMU_PROG_FUZZ=3Dqemu-fuzz-$(TARGET_NAME)$(EXESUF) =20 fuzz-obj-y +=3D tests/qtest/libqtest.o +fuzz-obj-y +=3D $(libqos-obj-y) fuzz-obj-y +=3D tests/qtest/fuzz/fuzz.o # Fuzzer skeleton fuzz-obj-y +=3D tests/qtest/fuzz/fork_fuzz.o +fuzz-obj-y +=3D tests/qtest/fuzz/qos_fuzz.o =20 FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest =20 diff --git a/tests/qtest/fuzz/qos_fuzz.c b/tests/qtest/fuzz/qos_fuzz.c new file mode 100644 index 0000000000..efdcc6e9d3 --- /dev/null +++ b/tests/qtest/fuzz/qos_fuzz.c @@ -0,0 +1,229 @@ +/* + * QOS-assisted fuzzing helpers + * + * Copyright (c) 2018 Emanuele Giuseppe Esposito + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see + */ + +#include "qemu/osdep.h" +#include "qemu/units.h" +#include "qapi/error.h" +#include "qemu-common.h" +#include "exec/memory.h" +#include "exec/address-spaces.h" +#include "sysemu/sysemu.h" +#include "qemu/main-loop.h" + +#include "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/malloc.h" +#include "tests/qtest/libqos/qgraph.h" +#include "tests/qtest/libqos/qgraph_internal.h" +#include "tests/qtest/libqos/qos_external.h" + +#include "fuzz.h" +#include "qos_fuzz.h" + +#include "qapi/qapi-commands-machine.h" +#include "qapi/qapi-commands-qom.h" +#include "qapi/qmp/qlist.h" + + +void *fuzz_qos_obj; +QGuestAllocator *fuzz_qos_alloc; + +static const char *fuzz_target_name; +static char **fuzz_path_vec; + +/* + * Replaced the qmp commands with direct qmp_marshal calls. + * Probably there is a better way to do this + */ +static void qos_set_machines_devices_available(void) +{ + QDict *req =3D qdict_new(); + QObject *response; + QDict *args =3D qdict_new(); + QList *lst; + Error *err =3D NULL; + + qmp_marshal_query_machines(NULL, &response, &err); + assert(!err); + lst =3D qobject_to(QList, response); + apply_to_qlist(lst, true); + + qobject_unref(response); + + + qdict_put_str(req, "execute", "qom-list-types"); + qdict_put_str(args, "implements", "device"); + qdict_put_bool(args, "abstract", true); + qdict_put_obj(req, "arguments", (QObject *) args); + + qmp_marshal_qom_list_types(args, &response, &err); + assert(!err); + lst =3D qobject_to(QList, response); + apply_to_qlist(lst, false); + qobject_unref(response); + qobject_unref(req); +} + +static char **current_path; + +void *qos_allocate_objects(QTestState *qts, QGuestAllocator **p_alloc) +{ + return allocate_objects(qts, current_path + 1, p_alloc); +} + +static const char *qos_build_main_args(void) +{ + char **path =3D fuzz_path_vec; + QOSGraphNode *test_node; + GString *cmd_line =3D g_string_new(path[0]); + void *test_arg; + + /* Before test */ + current_path =3D path; + test_node =3D qos_graph_get_node(path[(g_strv_length(path) - 1)]); + test_arg =3D test_node->u.test.arg; + if (test_node->u.test.before) { + test_arg =3D test_node->u.test.before(cmd_line, test_arg); + } + /* Prepend the arguments that we need */ + g_string_prepend(cmd_line, + TARGET_NAME " -display none -machine accel=3Dqtest -m 64 "); + return cmd_line->str; +} + +/* + * This function is largely a copy of qos-test.c:walk_path. Since walk_path + * is itself a callback, its a little annoying to add another argument/lay= er of + * indirection + */ +static void walk_path(QOSGraphNode *orig_path, int len) +{ + QOSGraphNode *path; + QOSGraphEdge *edge; + + /* etype set to QEDGE_CONSUMED_BY so that machine can add to the comma= nd line */ + QOSEdgeType etype =3D QEDGE_CONSUMED_BY; + + /* twice QOS_PATH_MAX_ELEMENT_SIZE since each edge can have its arg */ + char **path_vec =3D g_new0(char *, (QOS_PATH_MAX_ELEMENT_SIZE * 2)); + int path_vec_size =3D 0; + + char *after_cmd, *before_cmd, *after_device; + GString *after_device_str =3D g_string_new(""); + char *node_name =3D orig_path->name, *path_str; + + GString *cmd_line =3D g_string_new(""); + GString *cmd_line2 =3D g_string_new(""); + + path =3D qos_graph_get_node(node_name); /* root */ + node_name =3D qos_graph_edge_get_dest(path->path_edge); /* machine nam= e */ + + path_vec[path_vec_size++] =3D node_name; + path_vec[path_vec_size++] =3D qos_get_machine_type(node_name); + + for (;;) { + path =3D qos_graph_get_node(node_name); + if (!path->path_edge) { + break; + } + + node_name =3D qos_graph_edge_get_dest(path->path_edge); + + /* append node command line + previous edge command line */ + if (path->command_line && etype =3D=3D QEDGE_CONSUMED_BY) { + g_string_append(cmd_line, path->command_line); + g_string_append(cmd_line, after_device_str->str); + g_string_truncate(after_device_str, 0); + } + + path_vec[path_vec_size++] =3D qos_graph_edge_get_name(path->path_e= dge); + /* detect if edge has command line args */ + after_cmd =3D qos_graph_edge_get_after_cmd_line(path->path_edge); + after_device =3D qos_graph_edge_get_extra_device_opts(path->path_e= dge); + before_cmd =3D qos_graph_edge_get_before_cmd_line(path->path_edge); + edge =3D qos_graph_get_edge(path->name, node_name); + etype =3D qos_graph_edge_get_type(edge); + + if (before_cmd) { + g_string_append(cmd_line, before_cmd); + } + if (after_cmd) { + g_string_append(cmd_line2, after_cmd); + } + if (after_device) { + g_string_append(after_device_str, after_device); + } + } + + path_vec[path_vec_size++] =3D NULL; + g_string_append(cmd_line, after_device_str->str); + g_string_free(after_device_str, true); + + g_string_append(cmd_line, cmd_line2->str); + g_string_free(cmd_line2, true); + + /* + * here position 0 has /, position 1 has . + * The path must not have the , qtest_add_data_func adds it. + */ + path_str =3D g_strjoinv("/", path_vec + 1); + + /* Check that this is the test we care about: */ + char *test_name =3D strrchr(path_str, '/') + 1; + if (strcmp(test_name, fuzz_target_name) =3D=3D 0) { + /* + * put arch/machine in position 1 so run_one_test can do its work + * and add the command line at position 0. + */ + path_vec[1] =3D path_vec[0]; + path_vec[0] =3D g_string_free(cmd_line, false); + + fuzz_path_vec =3D path_vec; + } else { + g_free(path_vec); + } + + g_free(path_str); +} + +static const char *qos_get_cmdline(FuzzTarget *t) +{ + /* + * Set a global variable that we use to identify the qos_path for our + * fuzz_target + */ + fuzz_target_name =3D t->name; + qos_set_machines_devices_available(); + qos_graph_foreach_test_path(walk_path); + return qos_build_main_args(); +} + +void fuzz_add_qos_target( + FuzzTarget *fuzz_opts, + const char *interface, + QOSGraphTestOptions *opts + ) +{ + qos_add_test(fuzz_opts->name, interface, NULL, opts); + fuzz_opts->get_init_cmdline =3D qos_get_cmdline; + fuzz_add_target(fuzz_opts); +} + +void qos_init_path(QTestState *s) +{ + fuzz_qos_obj =3D qos_allocate_objects(s , &fuzz_qos_alloc); +} diff --git a/tests/qtest/fuzz/qos_fuzz.h b/tests/qtest/fuzz/qos_fuzz.h new file mode 100644 index 0000000000..477f11b02b --- /dev/null +++ b/tests/qtest/fuzz/qos_fuzz.h @@ -0,0 +1,33 @@ +/* + * QOS-assisted fuzzing helpers + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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. + */ + +#ifndef _QOS_FUZZ_H_ +#define _QOS_FUZZ_H_ + +#include "tests/qtest/fuzz/fuzz.h" +#include "tests/qtest/libqos/qgraph.h" + +int qos_fuzz(const unsigned char *Data, size_t Size); +void qos_setup(void); + +extern void *fuzz_qos_obj; +extern QGuestAllocator *fuzz_qos_alloc; + +void fuzz_add_qos_target( + FuzzTarget *fuzz_opts, + const char *interface, + QOSGraphTestOptions *opts + ); + +void qos_init_path(QTestState *); + +#endif --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500299; cv=pass; d=zohomail.com; s=zohoarc; b=J16JtlYJaXdTSh6DZ5bYu2X3PQG2lopyQB4Ohb5qGh6nXuC3Q9cqqR7JXIdpwaUGJ1h4UxbeOU1OKf2kA7+R+muMJzXJ3lr2g95dkl1WsbKjBcRKQnhnxK/6mHlg1KqxkomexKEHLsd8i5WyTro98U59AuO+ZsrOnns9gPlnyO4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500299; h=Content-Type:Content-Transfer-Encoding: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=FfY1+16kphmDJ7KfW3C1Len7PaAQLoDr0wlMmfRhp+w=; b=eyns58AYiG/Hwm4K53MvVHlCTgfykfgikTN61tf0hIse63f2qkVAYaHaKp3iR6Z5Wd20Gby1EafYcyxBA/YShtYiSCyu5rMzcYfdDzXOo/lYvKfe1RM/Q2JNSCiYxogKyGOmukg+mF9HZ2lga51HJzVpzSqsRGdFbT4f++keQ+s= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500299679629.7723902003161; Sun, 19 Jan 2020 22:04:59 -0800 (PST) Received: from localhost ([::1]:58950 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQBG-0000It-3k for importer@patchew.org; Mon, 20 Jan 2020 01:04:58 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35391) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1j-0007Kv-BV for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1g-0006Tf-01 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:07 -0500 Received: from mail-bn7nam10on2111.outbound.protection.outlook.com ([40.107.92.111]:18623 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1f-0006TL-QT for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:03 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:03 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:03 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GQFiWZmVVxzkY2oALYFK6NE35iqduQU6wTJoacKXw0K2SUunz3LQdPN3/bMoWY+4sAhCYyvslFO265AEzFPmWPND9Wx+f9BnscDw9/x3d06z37jYO8ahxP29jU2K0tj+zzB7d6uxe5eDD2AE0hH7RWx/SGnzJKjs+qpji+Oen+/bh8PGSvUBtBndZhD/jJ+4+kIQCPCguGT6QBRnqpx+S65wFvCjzeqTkZXwQ4A1eklnVUx47YZLskNoQ3IDq5NpVHZ+x25/oL2oEb8O/zlZCGNcZkQ9mfmLiOmpbN77qBD5mg/G+XCtkbQ5bzrtg+fIZVY6RFUT3BThi0TcnziGww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FfY1+16kphmDJ7KfW3C1Len7PaAQLoDr0wlMmfRhp+w=; b=G59Fnu5/L7+aMQ+qKEeNJVh7tlIW0RvdHWGmQfPmwqkgKZpC6EpvE450kAlh6l7Ed6WX7XgD55BK4ONTvh0K/L895ZWCiKCxSwAh7HDgMXQSOHRylrdnrGgmeVglzH+5u8Cp9YX8b71h7Z6a0B6/go6ol3IAV59MTWZbjlfRrWyUwnYWZCoPG9LwgtBM6z1NUba3BXMTHmoY/0n45YMWWqmA3lAIMvTmlyxP53h+YuJyr/jQBRwknRIxom0CYVlaadEN8xxiMndBDFPpkMn3OYKe848AL6mdjmjzadtEnXwlrCQPrzh6RMz6zeN5hoRnsK2p40q0iH30LOuPyYIWjw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FfY1+16kphmDJ7KfW3C1Len7PaAQLoDr0wlMmfRhp+w=; b=J3IaHCAE2gIW49KoTbtsSMPiaVdTwJKP0Zk2vXAoYbyRcreubE+ZYM73ncqH21FkbgO7cTwy3Ak04vr5HQEP306N+B9NY++DXhl4VE5WY11FDF1NfLnxpwqS5NEcj83Xxtvg626n2eg98qqAGwiq7q7nLKMeguzBYPhCkJy1oSs= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 15/20] fuzz: add target/fuzz makefile rules Thread-Topic: [PATCH v7 15/20] fuzz: add target/fuzz makefile rules Thread-Index: AQHVz1YozqjYdhj3yUy1KAakuF80Pw== Date: Mon, 20 Jan 2020 05:55:02 +0000 Message-ID: <20200120055410.22322-21-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 100b29b4-6c82-4aa4-033a-08d79d6d4a84 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:478; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 1Tus7UVIvX3P08BshOIS4GYbkT+CetiMeLONwOE3Nx29pLG81eT8EUwVsgxOPEUjSVBkv9sC7As+06s/BKk4xxaazieAbj5SCR0S0y41NApWJTD1qI8xRhefKvFOQbXQPlTH/otZ7W4QGlZKRtd6xyX9MedN0rueaDFEn8dzsAQ2ZHiLsb8CQBvZcASAKY4+zWvnxL1B295LppgAokO9eiVbp6sMVsUNcS81FbFE600Q9jEWGWLU3Qus95f6DQcoq6v/uZRv7BYdQJEFLh8IG6hnpZPLHA71HiEorUMcA0c4lrnHNcjUxFMJYmo/OU5zJsrzusTKj8Trn922lNKrhFuZhDE+cqbtD+DsMiIZ8QOGLprCl7WsokU4Md53G+2y3ZANKXDB5aDCtDCr5LM8wVUjMyOLDs2pC6k7/kWjrzujFexSC8ihJ8E4Oaydl/S/ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 100b29b4-6c82-4aa4-033a-08d79d6d4a84 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:02.5584 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: SFLvqxpReEiMIDB2vaJRWraOH8xN0Zb32DqUwd9pQT6jVekTdm4aXw7/v8DQwCNG X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.111 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: "pbonzini@redhat.com" , "bsd@redhat.com" , Darren Kenny , "stefanha@redhat.com" , "Bulekov, Alexander" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alexander Bulekov Reviewed-by: Darren Kenny Reviewed-by: Stefan Hajnoczi --- Makefile | 15 ++++++++++++++- Makefile.objs | 2 +- Makefile.target | 16 ++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index e6de7a47bb..dab291455f 100644 --- a/Makefile +++ b/Makefile @@ -464,7 +464,7 @@ config-host.h-timestamp: config-host.mak qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool $(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@,"GEN","$@= ") =20 -TARGET_DIRS_RULES :=3D $(foreach t, all clean install, $(addsuffix /$(t), = $(TARGET_DIRS))) +TARGET_DIRS_RULES :=3D $(foreach t, all fuzz clean install, $(addsuffix /$= (t), $(TARGET_DIRS))) =20 SOFTMMU_ALL_RULES=3D$(filter %-softmmu/all, $(TARGET_DIRS_RULES)) $(SOFTMMU_ALL_RULES): $(authz-obj-y) @@ -478,6 +478,15 @@ ifdef DECOMPRESS_EDK2_BLOBS $(SOFTMMU_ALL_RULES): $(edk2-decompressed) endif =20 +SOFTMMU_FUZZ_RULES=3D$(filter %-softmmu/fuzz, $(TARGET_DIRS_RULES)) +$(SOFTMMU_FUZZ_RULES): $(authz-obj-y) +$(SOFTMMU_FUZZ_RULES): $(block-obj-y) +$(SOFTMMU_FUZZ_RULES): $(chardev-obj-y) +$(SOFTMMU_FUZZ_RULES): $(crypto-obj-y) +$(SOFTMMU_FUZZ_RULES): $(io-obj-y) +$(SOFTMMU_FUZZ_RULES): config-all-devices.mak +$(SOFTMMU_FUZZ_RULES): $(edk2-decompressed) + .PHONY: $(TARGET_DIRS_RULES) # The $(TARGET_DIRS_RULES) are of the form SUBDIR/GOAL, so that # $(dir $@) yields the sub-directory, and $(notdir $@) yields the sub-goal @@ -528,6 +537,9 @@ subdir-slirp: slirp/all $(filter %/all, $(TARGET_DIRS_RULES)): libqemuutil.a $(common-obj-y) \ $(qom-obj-y) =20 +$(filter %/fuzz, $(TARGET_DIRS_RULES)): libqemuutil.a $(common-obj-y) \ + $(qom-obj-y) $(crypto-user-obj-$(CONFIG_USER_ONLY)) + ROM_DIRS =3D $(addprefix pc-bios/, $(ROMS)) ROM_DIRS_RULES=3D$(foreach t, all clean, $(addsuffix /$(t), $(ROM_DIRS))) # Only keep -O and -g cflags @@ -537,6 +549,7 @@ $(ROM_DIRS_RULES): =20 .PHONY: recurse-all recurse-clean recurse-install recurse-all: $(addsuffix /all, $(TARGET_DIRS) $(ROM_DIRS)) +recurse-fuzz: $(addsuffix /fuzz, $(TARGET_DIRS) $(ROM_DIRS)) recurse-clean: $(addsuffix /clean, $(TARGET_DIRS) $(ROM_DIRS)) recurse-install: $(addsuffix /install, $(TARGET_DIRS)) $(addsuffix /install, $(TARGET_DIRS)): all diff --git a/Makefile.objs b/Makefile.objs index 5ab166fed5..9d87a1009e 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -84,8 +84,8 @@ common-obj-$(CONFIG_FDT) +=3D device_tree.o # qapi =20 common-obj-y +=3D qapi/ - softmmu-obj-y =3D main.o + endif =20 ####################################################################### diff --git a/Makefile.target b/Makefile.target index 8dcf3dddd8..fd6fe79495 100644 --- a/Makefile.target +++ b/Makefile.target @@ -227,6 +227,22 @@ ifdef CONFIG_TRACE_SYSTEMTAP rm -f *.stp endif =20 +ifdef CONFIG_FUZZ +include $(SRC_PATH)/tests/qtest/fuzz/Makefile.include +include $(SRC_PATH)/tests/qtest/Makefile.include + +fuzz: fuzz-vars +fuzz-vars: QEMU_CFLAGS :=3D $(FUZZ_CFLAGS) $(QEMU_CFLAGS) +fuzz-vars: QEMU_LDFLAGS :=3D $(FUZZ_LDFLAGS) $(QEMU_LDFLAGS) +fuzz-vars: $(QEMU_PROG_FUZZ) +dummy :=3D $(call unnest-vars,, fuzz-obj-y) + + +$(QEMU_PROG_FUZZ): config-devices.mak $(all-obj-y) $(COMMON_LDADDS) $(fuzz= -obj-y) + $(call LINK, $(filter-out %.mak, $^)) + +endif + install: all ifneq ($(PROGS),) $(call install-prog,$(PROGS),$(DESTDIR)$(bindir)) --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500847; cv=pass; d=zohomail.com; s=zohoarc; b=HqRKHBW6WHh9cZ9MIbdhLEfeDZPr6wk+bq8Il3XLy+9KqwHfkPQisuc0U+vw2JSsa2xY1dDqR/mOa61Ja+cvOjujfPT4x8E5ubuw92uk0joZ3/K98DFWSuxVQ03g0DfTJgrMv/VaErWGTyDrm81k+n7C+pwUqj1YCL4I6DRlHFo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500847; h=Content-ID:Content-Type:Content-Transfer-Encoding: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=dvNYeeaXgAhc60bU8SP/MWFwQDDsLlrZP1iRKlujo9A=; b=msHIlHUtCrGDEBGun+oKyYu6PYOl/7BADwOqzGp0oCEflvseRff4Sz5Z/0VVjIxMEPmdHAwAYOGhh+pGq7qOwhASwpSVejiGZBRuN+j+YP/xFYZTgMoZrRqjXlFmWEe1p1lWqqAf1HaCEI9gAhCm+CoI9EF0ez+G0TXt7mc2VKo= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500847082857.6410078367095; Sun, 19 Jan 2020 22:14:07 -0800 (PST) Received: from localhost ([::1]:59118 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQK5-0004Cp-OO for importer@patchew.org; Mon, 20 Jan 2020 01:14:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35389) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1j-0007Ks-83 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1h-0006UK-54 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:07 -0500 Received: from mail-bn7nam10on2106.outbound.protection.outlook.com ([40.107.92.106]:1376 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1h-0006Tr-0W for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:05 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:04 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:04 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y092sJNmoxdgCWsouClObyaCoG2/Z9ZE0xnW9xetubVe4nUsWbDH/sOlf2mIOe4grVqCOANn2qKHR4bEBM6gy3h8VcRQMdbqy31ScJZxudGKAVrM3372r0QELHHJxvNHo/WzCEdy5pEjFWZMcGz5kmW28v0KvXr6SuMPo4Nik4/vmQlwb9TxToQbg30ia/LrUghiCVFOWzEpyUomxwufZ1Rz4kXoBlqSDjNglmKUvZpIlXk5FgSNEsfC+szUhTkqn7+q0nMEzcStRvN1wmXafbF+7sMyp7rk5prKgJWRpVIl0wA0w2bjEWatNyQgNCmEVivk1gH+rOMkB7k8vEY47w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dvNYeeaXgAhc60bU8SP/MWFwQDDsLlrZP1iRKlujo9A=; b=a4/UdlntJoDcFJJ0qEy5N/4xq0dvMhwOy8/x+s5cSphIyb7uJ1L6ygMlZUSE94g6XHxhrIMBy9cqd+pfJu3zci1b2IXD7ul5gzqrlWsO7tgSQi/he9fcoMh/Z++MUQ6xjLxkW0MywpcYmji2Jnqu5hj4m7lnevD0ruN6qihCKC6pZ/HmC90zh7Ex96G3fJ52R/CNbcxbRyyyDFxJUOB812KleuEe3lZIUT7tMdTFzkUFgfyRKmxArvlYJVHvl1Y8AnzPgH5hvHv9WTvQ4lsD9labSNl4vApzagSoDCdl0Zp9PzquBhFPCFRtdbPPlXgmq7IEJtzketQ1jAA+dnUh5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dvNYeeaXgAhc60bU8SP/MWFwQDDsLlrZP1iRKlujo9A=; b=e5anO+0iKEhazDS6GENl+VG/Y/b8Dpn0TMXG9dPVdM1ZbZJgK2wBnsC89RsIOq4ClkZjEEShjJoQ9kmtBQ1kXDlgu6Hp+JpTex0dDDJBAvsOPXoj7eV9l+3jcxt+F9BpoT5HwH6+WXRBR5T+jJSmY8wFRF9+u6wJEo7Xn3TQ+I0= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 16/20] fuzz: add configure flag --enable-fuzzing Thread-Topic: [PATCH v7 16/20] fuzz: add configure flag --enable-fuzzing Thread-Index: AQHVz1YogdWBjjfeR0OaAS+bGjs0Eg== Date: Mon, 20 Jan 2020 05:55:03 +0000 Message-ID: <20200120055410.22322-22-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5a1273b8-fc3d-45c2-e5a4-08d79d6d4af9 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:962; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iqvuJ03dwg/6pbqNG6QUueOOZmYISa8nAUS9KXQlECexZ3NQhecJoQmyhDmc7pSGM6W5iBC+e4nShYhXsvT/C9ly7sJkgOcdERab6jGKP3f0SyMGsJY54ETcbhdtNPuX9kR2nBxEL7vCQkNkBoL42MPmhw6YZmq4usf+XNs8E3GH8Qcyw1qcXnNktNRAwu8w5cH9FH7UEeIsIb7FgkCFym0tw2AZu3E87tTJJYO4QAK7oR/wE1CU5DT9JM7+3nBO1f4uYrTr7eGMj04kuUTHN2xO968M5NZqre851WvVKuTeH4yS97wmTmtallvTPMz2FWsdG8mJUe3kGFD9zeC5ydvenLfWAJah84t65sWvFY/rYIjfoM5ycxBtGXSSMsYryZRZteE0f4Liertcsxje+noC/tNCv+u+ttsYrpWUFnDaqGJuJG8fdTs9cdR1uSE7 Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 5a1273b8-fc3d-45c2-e5a4-08d79d6d4af9 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:03.5329 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ZoiBYnTKXzXBE28/khl9wdN9oW+lnJAO2wIyMBiSkkKumgY3jNE/xPWMJER5SmGK X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.106 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: "pbonzini@redhat.com" , "bsd@redhat.com" , =?utf-8?B?UGhpbGlwcGUgTWF0aGlldS1EYXVkw6k=?= , "stefanha@redhat.com" , "Bulekov, Alexander" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- configure | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/configure b/configure index 08c3a1c1f0..17aa5d02ee 100755 --- a/configure +++ b/configure @@ -504,6 +504,7 @@ debug_mutex=3D"no" libpmem=3D"" default_devices=3D"yes" plugins=3D"no" +fuzzing=3D"no" =20 supported_cpu=3D"no" supported_os=3D"no" @@ -634,6 +635,15 @@ int main(void) { return 0; } EOF } =20 +write_c_fuzzer_skeleton() { + cat > $TMPC < +#include +int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); +int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } +EOF +} + if check_define __linux__ ; then targetos=3D"Linux" elif check_define _WIN32 ; then @@ -1540,6 +1550,10 @@ for opt do ;; --disable-containers) use_containers=3D"no" ;; + --enable-fuzzing) fuzzing=3Dyes + ;; + --disable-fuzzing) fuzzing=3Dno + ;; *) echo "ERROR: unknown option $opt" echo "Try '$0 --help' for more information" @@ -5992,6 +6006,15 @@ EOF fi fi =20 +########################################## +# checks for fuzzer +if test "$fuzzing" =3D "yes" ; then + write_c_fuzzer_skeleton + if compile_prog "$CPU_CFLAGS -Werror -fsanitize=3Daddress,fuzzer" ""; th= en + have_fuzzer=3Dyes + fi +fi + ########################################## # check for libpmem =20 @@ -6576,6 +6599,7 @@ echo "libpmem support $libpmem" echo "libudev $libudev" echo "default devices $default_devices" echo "plugin support $plugins" +echo "fuzzing support $fuzzing" =20 if test "$supported_cpu" =3D "no"; then echo @@ -7400,6 +7424,16 @@ fi if test "$sheepdog" =3D "yes" ; then echo "CONFIG_SHEEPDOG=3Dy" >> $config_host_mak fi +if test "$fuzzing" =3D "yes" ; then + if test "$have_fuzzer" =3D "yes"; then + FUZZ_LDFLAGS=3D" -fsanitize=3Daddress,fuzzer" + FUZZ_CFLAGS=3D" -fsanitize=3Daddress,fuzzer" + CFLAGS=3D" -fsanitize=3Daddress,fuzzer" + else + error_exit "Your compiler doesn't support -fsanitize=3Daddress,fuzzer" + exit 1 + fi +fi =20 if test "$plugins" =3D "yes" ; then echo "CONFIG_PLUGIN=3Dy" >> $config_host_mak @@ -7502,6 +7536,11 @@ if test "$libudev" !=3D "no"; then echo "CONFIG_LIBUDEV=3Dy" >> $config_host_mak echo "LIBUDEV_LIBS=3D$libudev_libs" >> $config_host_mak fi +if test "$fuzzing" !=3D "no"; then + echo "CONFIG_FUZZ=3Dy" >> $config_host_mak + echo "FUZZ_CFLAGS=3D$FUZZ_CFLAGS" >> $config_host_mak + echo "FUZZ_LDFLAGS=3D$FUZZ_LDFLAGS" >> $config_host_mak +fi =20 if test "$edk2_blobs" =3D "yes" ; then echo "DECOMPRESS_EDK2_BLOBS=3Dy" >> $config_host_mak --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500996; cv=pass; d=zohomail.com; s=zohoarc; b=Urm0OcJKTqz5gz7WYV7/7CVX1gA1t1ak5Vk7FnwNA75iAjClUR63UzoJnfMmxLM52VRh83zbaOJIqmZOEvWKK9zvx5APWYADP11BNR5RIicoSSn9A56pgKAIQp0L/p6XA7oYUfaLiae1T9JhKzGhvaZYKhDRwG95tGK8vnRa26c= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500996; h=Content-Type:Content-Transfer-Encoding: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=k/ubUos4wtL/P5M5qxu+ll1T+//2CDHmQI7QwjUhLZE=; b=Di2EF0OOO3O0fVh9IVLOnb9+ntCt1up+c+779ZAivluPWqQVxN63y4n4mofjL1gf3NhVnBKVdO0eP0RUU6S8+5XR2qEk4iUurGLeZyDSbsBoS2WQlJtH4IkZCk4aemvsyrYnw4VPZwrdSDJtpLft6sufFGBTCJE3kI4UmofHwDw= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500996557642.9063191719999; Sun, 19 Jan 2020 22:16:36 -0800 (PST) Received: from localhost ([::1]:59154 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQMV-0007EY-4E for importer@patchew.org; Mon, 20 Jan 2020 01:16:35 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35392) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1j-0007Kx-BX for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1h-0006Us-Ta for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:07 -0500 Received: from mail-bn7nam10on2117.outbound.protection.outlook.com ([40.107.92.117]:63553 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1h-0006US-P2 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:05 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:04 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:04 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z30vFxhd0dJvLL6XoqztuTrAnyDK2psndBdIev43UWMj6Wfc4O/w5eI2lc/6opsGOy8cg3oI3j+U5Dv2EMglWFgSSlPRY7LVFLU+noPcO5kNBIe3bezcQ4MukIxqhClVP4FkUx4lhmHGadKu2z/b9oMWljviAbW9WSsy81mC50UagRQOdWDMBVjdLy5f72lzRhO9x6un/9Rz1Wm/OT4vMRy8BxhMkTKR+14DVBBgCy1QsO5zsVyMv6fVUi3XhGny7kv8wdO1q9FEb5n0kdBZwEqTjHSFk+k0KEh50sz1NlC0U+hwsPpXTyVaVyBrSs9/ep8ROP4KwZ8/EAdM7Jldog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k/ubUos4wtL/P5M5qxu+ll1T+//2CDHmQI7QwjUhLZE=; b=JN+AO3L/RBtySBZ0FiUCQ+bzEM5YuwE+UJH09anoeIMfd5doZFqYiNklXWKd8r/CWxOYYKwNZt4tPMPMXhijbt1CEtvtH7xcp0VY1bv+RgsabnlGkb1m58qzuBOYsatdvDvfT9vqKX+r28e2Fv/jgJvM/LuxYfeJijrIZR0k23VC21AiZR2orQPfElIdl9gXBlP/8LwfekuNHSCvPIEG6rgd9EsArsk4DKorP86ffoQkMCJs0OHF2/lFKLji31aaZ5zGE0VCkM1oZF9FWinKRWoGDpXKJBOZxJNapcxC0/I5k7TYWHgRv5JnM35yxkOm5BJRJphFo3FP2axXEnffUQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k/ubUos4wtL/P5M5qxu+ll1T+//2CDHmQI7QwjUhLZE=; b=ETeAhB1maQbgba+dGoGrSXnk+z/5x2OiXGUVN+pBorYRYbVN/V5KqjsVtL6ur0laLwLUftbaBX6ILfD+UNDo64z6MkvMq+P5bPUpInfV3xgoRYos/d0dbHYVJI1OWf16qKlLWw+igXdkUEDedNJWmdBD11a0uwtEGrtVA0FuqyE= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 17/20] fuzz: add documentation to docs/devel/ Thread-Topic: [PATCH v7 17/20] fuzz: add documentation to docs/devel/ Thread-Index: AQHVz1YpLEtYFJT2PECngL6ZrM1U/Q== Date: Mon, 20 Jan 2020 05:55:04 +0000 Message-ID: <20200120055410.22322-23-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ecc62dcc-21ea-4bc3-532c-08d79d6d4bac x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wk8Ooe0e6JQfoS3T7ZONZrjyZ9j7sNYwOHimkN/v8SXoAdlPn1w9ld1NedkBmlUsY5swR4q0lzCxzePg7NjrL2KQ1a0+sOh4cIUj3varRqYQvPNK8+Ll5+WhmxufBzIcC1lbOGXtaHJ5zb5meN29FuZ5rlPUXM23/P65AVYlAqfGUmKK3zBUQdUzOIX5O6gCYsMOxXPEvmtn3A1g7qUMbgrCQGF4GsQ/NgCS4eGUTb6t/6gfb6DbD4bnvuQwY0q4IHy318PME2ch9Ww67tEs3nPNc/1bf816ubiZ6KpCLsQh3xZWm9mJnJR3df8mzCcEJ/gKsrSeXmCmgZKQPtRefe4avkpgPYm+5JG2vrBnlUd7eDBPsdCEqoV0/Gcn1tUebOtKMFcbSgGRBzrrpivKOsB8a6RSYeDngJn0PT5A5gUY33r488lLdlSKSw0YA1tG Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: ecc62dcc-21ea-4bc3-532c-08d79d6d4bac X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:04.6573 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1aBTZ/0faw9x9RzY113wlOsRIPpUBLisrQ1syXTxZvJaNxn45Z9Ov70qkK4tUFAN X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.117 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: "pbonzini@redhat.com" , "bsd@redhat.com" , "stefanha@redhat.com" , "Bulekov, Alexander" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- docs/devel/fuzzing.txt | 119 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 docs/devel/fuzzing.txt diff --git a/docs/devel/fuzzing.txt b/docs/devel/fuzzing.txt new file mode 100644 index 0000000000..b0cceb2a6b --- /dev/null +++ b/docs/devel/fuzzing.txt @@ -0,0 +1,119 @@ +=3D Fuzzing =3D + +=3D=3D Introduction =3D=3D + +This document describes the virtual-device fuzzing infrastructure in QEMU = and +how to use it to implement additional fuzzers. + +=3D=3D Basics =3D=3D + +Fuzzing operates by passing inputs to an entry point/target function. The +fuzzer tracks the code coverage triggered by the input. Based on these +findings, the fuzzer mutates the input and repeats the fuzzing.=20 + +To fuzz QEMU, we rely on libfuzzer. Unlike other fuzzers such as AFL, libf= uzzer +is an _in-process_ fuzzer. For the developer, this means that it is their +responsibility to ensure that state is reset between fuzzing-runs. + +=3D=3D Building the fuzzers =3D=3D + +NOTE: If possible, build a 32-bit binary. When forking, the 32-bit fuzzer = is +much faster, since the page-map has a smaller size. This is due to the fac= t that +AddressSanitizer mmaps ~20TB of memory, as part of its detection. This res= ults +in a large page-map, and a much slower fork(). + +To build the fuzzers, install a recent version of clang: +Configure with (substitute the clang binaries with the version you install= ed): + + CC=3Dclang-8 CXX=3Dclang++-8 /path/to/configure --enable-fuzzing + +Fuzz targets are built similarly to system/softmmu: + + make i386-softmmu/fuzz + +This builds ./i386-softmmu/qemu-fuzz-i386 + +The first option to this command is: --fuzz_taget=3DFUZZ_NAME +To list all of the available fuzzers run qemu-fuzz-i386 with no arguments. + +eg: + ./i386-softmmu/qemu-fuzz-i386 --fuzz-target=3Dvirtio-net-fork-fuzz + +Internally, libfuzzer parses all arguments that do not begin with "--". +Information about these is available by passing -help=3D1 + +Now the only thing left to do is wait for the fuzzer to trigger potential +crashes. + +=3D=3D Adding a new fuzzer =3D=3D +Coverage over virtual devices can be improved by adding additional fuzzers= .=20 +Fuzzers are kept in tests/fuzz/ and should be added to +tests/fuzz/Makefile.include + +Fuzzers can rely on both qtest and libqos to communicate with virtual devi= ces. + +1. Create a new source file. For example ``tests/fuzz/fuzz-foo-device.c``. + +2. Write the fuzzing code using the libqtest/libqos API. See existing fuzz= ers +for reference. + +3. Register the fuzzer in ``tests/fuzz/Makefile.include`` by appending the +corresponding object to fuzz-obj-y + +Fuzzers can be more-or-less thought of as special qtest programs which can +modify the qtest commands and/or qtest command arguments based on inputs +provided by libfuzzer. Libfuzzer passes a byte array and length. Commonly = the +fuzzer loops over the byte-array interpreting it as a list of qtest comman= ds, +addresses, or values. + + +=3D Implementation Details =3D + +=3D=3D The Fuzzer's Lifecycle =3D=3D + +The fuzzer has two entrypoints that libfuzzer calls. libfuzzer provides it= 's +own main(), which performs some setup, and calls the entrypoints: + +LLVMFuzzerInitialize: called prior to fuzzing. Used to initialize all of t= he +necessary state + +LLVMFuzzerTestOneInput: called for each fuzzing run. Processes the input a= nd +resets the state at the end of each run. + +In more detail: + +LLVMFuzzerInitialize parses the arguments to the fuzzer (must start with t= wo +dashes, so they are ignored by libfuzzer main()). Currently, the arguments +select the fuzz target. Then, the qtest client is initialized. If the targ= et +requires qos, qgraph is set up and the QOM/LIBQOS modules are initialized. +Then the QGraph is walked and the QEMU cmd_line is determined and saved. + +After this, the vl.c:qemu__main is called to set up the guest. There are +target-specific hooks that can be called before and after qemu_main, for +additional setup(e.g. PCI setup, or VM snapshotting). + +LLVMFuzzerTestOneInput: Uses qtest/qos functions to act based on the fuzz +input. It is also responsible for manually calling the main loop/main_loop= _wait +to ensure that bottom halves are executed and any cleanup required before = the +next input.=20 + + +Since the same process is reused for many fuzzing runs, QEMU state needs to +be reset at the end of each run. There are currently two implemented +options for resetting state:=20 +1. Reboot the guest between runs. + Pros: Straightforward and fast for simple fuzz targets.=20 + Cons: Depending on the device, does not reset all device state. If the + device requires some initialization prior to being ready for fuzzing + (common for QOS-based targets), this initialization needs to be done af= ter + each reboot. + Example target: i440fx-qtest-reboot-fuzz +2. Run each test case in a separate forked process and copy the coverage + information back to the parent. This is fairly similar to AFL's "deferr= ed" + fork-server mode [3] + Pros: Relatively fast. Devices only need to be initialized once. No need + to do slow reboots or vmloads. + Cons: Not officially supported by libfuzzer. Does not work well for dev= ices + that rely on dedicated threads. + Example target: virtio-net-fork-fuzz + --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500954; cv=pass; d=zohomail.com; s=zohoarc; b=gWYpMD/Cu9D/HhzAB94V/Sh3ZMDSyEj8NQWFbxR7URnhI/gO4zh0OU9jsu3My/XDaa2jXGOKvQHQJBV+M4lnswzJwivwiXhVPhikfMzHMzZp4X40R6OJJ4la6vWLvjDdB8gQCV94MwvUeH01gYTyrPEZftZXl5JawawBjkkDnlk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500954; h=Content-Type:Content-Transfer-Encoding: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=/jacTnSYQO9B6P4X+uTDjis9yDkqwXHMLQYl0ahzxws=; b=iTE1eWeK1SkcHWt8hDXSIwZtVE8+MtHkkvG1GzXRZEUAkjxXbseINBWzn74syleJYytwn7zLV11sWhCFz1c18ggbZxyooGgYTb15guijg3WHAzITezqhYudhA6ZvtrbmHvgLL9pt40ssunu7SjadObN8Qmy9P0FQ/lNGAjDnVjw= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15795009545821003.8155327818122; Sun, 19 Jan 2020 22:15:54 -0800 (PST) Received: from localhost ([::1]:59142 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQLp-0006X3-6W for importer@patchew.org; Mon, 20 Jan 2020 01:15:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35445) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1q-0007Tz-MY for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1j-0006VX-56 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:14 -0500 Received: from mail-bn7nam10on2107.outbound.protection.outlook.com ([40.107.92.107]:56064 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1i-0006V3-V7 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:07 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:05 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:05 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Odkc+EPPSdhHMCEPye4v/LeEx2rS1dKxmNoAvtvf4F5x8mDi5yjaAbXF41Ekb7Ha7qI9tV3dRLuSt8CwSge20cDfBK6wv3uxEmOjLNO7iTAZalHZi7renqFb1hecslERjh3RDsvSt7kM5tGtcWFsER0HsttnksK+4WSfn55UFWcBm5ZeVPDKR+a3oA0kehbBfzqRuji54SMmXr1wegp7DH6PJpzXbors5D4gQ08Qh74r4wMTcZslT+gTp4zHxURoYUiK+lDmN7Vi3BveE7k9LbodBtxeQ8rI++MVhWoyA3QBXv/Kra1XH+U+6DehkN97BSsQPoqdYB3BQrI5V6dWbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/jacTnSYQO9B6P4X+uTDjis9yDkqwXHMLQYl0ahzxws=; b=C3z7TN0gtsKx19FEn2gsiEEH2+l21LubQO+7uvavKVuWKXlGWGICzagHfl2+v20G4+eQ+enH4jvp3Few7jAzFxkP9eBIhdGv6lgs1tCWI8wbALTtb/+VDhacXYuQ56ab9iJfGhB7YE7derKDER7NYVwXVvtrh7OKIUET8rFQ2FokYP4MbkHm7UwuRcEjE/Klw6VHGRmMLzR4sW9FyAfr3a1Irqsatt4LClKi4Zg4oonuN1BqR1pMsgvxCRuZ05uv0vvBkl53peUnPcxrj/D3F1cyEa7hLcKS382EFb5LonEZccHEmF/JZzaLnite2kxzXqHml+YLhNgcN/4hI3d82Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/jacTnSYQO9B6P4X+uTDjis9yDkqwXHMLQYl0ahzxws=; b=bVit6hRiXrMmC0Z3/hAqSkMWErvWx3R+8DU8CcrTSOidcQhQ/NiBTdMitiNch4/HiR600L/chiZtN1jW8O+4XG8QZZIjKfcBl/ejYvnaWcD6JiEFZoFEJIJZYeVZRdFXPbt3NgYn+95oINNS3//017NC4MI8uYsUgJmwpLXRt9M= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 17/20] fuzz: add i440fx fuzz targets Thread-Topic: [PATCH v7 17/20] fuzz: add i440fx fuzz targets Thread-Index: AQHVz1YpRpqO6qKd7ke6IKkiB7MQ6g== Date: Mon, 20 Jan 2020 05:55:05 +0000 Message-ID: <20200120055410.22322-24-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e9849722-e91f-457b-20b3-08d79d6d4c57 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3826; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7l9HcSP1rT6c7j1jr1M0HF44dVDMnNJj0Du5igx2Zkh9+dsyWd69mAoXifQdRSRZWnfbEApuCm+m0tfWUoOPrzDsAIBRHQDaYNG+xzPpYIFJdPQjAjx0xf8PQioKumbqVksj6quCxdT3My7qkCE5Q7gluHd7LRo4GEHNDpXGwMGmBuM3UBJBxQg1gUqPfd8d9Yt58ZFjBBjxPLVHeupWB+A4s3oYJG/jOv5V/bkFZSDvw8nf+Lpvm3gCBpYbc/taGLefWpMLE2AXtF+8gvm732vXFdaUSvYYkR0wSJbOQPDcQrqmnBkJZ2WSZ7OvSaes63elzDanrbBDfaQa7Wt8KDoiJpxqBoGEwjvVw5d9R3G4ZXlHy6g+WELsS2MipX8z9L94YWTxXfMCPWM6pbiGAt2AEmBM+ih6tPZTuuRjnmwkJvY+ey4fF1F/Duafmbwk Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: e9849722-e91f-457b-20b3-08d79d6d4c57 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:05.7077 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: fmVehqvPmCplUcBtzD1Zdtg9eBLNNxqoAAqgG77spiPNQz45YJEHdF3ArkfcTS6w X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.107 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" These three targets should simply fuzz reads/writes to a couple ioports, but they mostly serve as examples of different ways to write targets. They demonstrate using qtest and qos for fuzzing, as well as using rebooting and forking to reset state, or not resetting it at all. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/fuzz/Makefile.include | 3 + tests/qtest/fuzz/i440fx_fuzz.c | 178 ++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 tests/qtest/fuzz/i440fx_fuzz.c diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index e3bdd33ff4..38b8cdd9f1 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -6,6 +6,9 @@ fuzz-obj-y +=3D tests/qtest/fuzz/fuzz.o # Fuzzer skeleton fuzz-obj-y +=3D tests/qtest/fuzz/fork_fuzz.o fuzz-obj-y +=3D tests/qtest/fuzz/qos_fuzz.o =20 +# Targets +fuzz-obj-y +=3D tests/qtest/fuzz/i440fx_fuzz.o + FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest =20 # Linker Script to force coverage-counters into known regions which we can= mark diff --git a/tests/qtest/fuzz/i440fx_fuzz.c b/tests/qtest/fuzz/i440fx_fuzz.c new file mode 100644 index 0000000000..c7791182b8 --- /dev/null +++ b/tests/qtest/fuzz/i440fx_fuzz.c @@ -0,0 +1,178 @@ +/* + * I440FX Fuzzing Target + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "qemu/main-loop.h" +#include "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/pci.h" +#include "tests/qtest/libqos/pci-pc.h" +#include "fuzz.h" +#include "fuzz/qos_fuzz.h" +#include "fuzz/fork_fuzz.h" + + +#define I440FX_PCI_HOST_BRIDGE_CFG 0xcf8 +#define I440FX_PCI_HOST_BRIDGE_DATA 0xcfc + +enum action_id { + WRITEB, + WRITEW, + WRITEL, + READB, + READW, + READL, + ACTION_MAX +}; + +static void i440fx_fuzz_qtest(QTestState *s, + const unsigned char *Data, size_t Size) { + typedef struct QTestFuzzAction { + uint32_t value; + uint8_t id; + uint8_t addr; + } QTestFuzzAction; + QTestFuzzAction a; + + while (Size >=3D sizeof(a)) { + memcpy(&a, Data, sizeof(a)); + uint16_t addr =3D a.addr % 2 ? I440FX_PCI_HOST_BRIDGE_CFG : + I440FX_PCI_HOST_BRIDGE_DATA; + switch (a.id % ACTION_MAX) { + case WRITEB: + qtest_outb(s, addr, (uint8_t)a.value); + break; + case WRITEW: + qtest_outw(s, addr, (uint16_t)a.value); + break; + case WRITEL: + qtest_outl(s, addr, (uint32_t)a.value); + break; + case READB: + qtest_inb(s, addr); + break; + case READW: + qtest_inw(s, addr); + break; + case READL: + qtest_inl(s, addr); + break; + } + Size -=3D sizeof(a); + Data +=3D sizeof(a); + } + flush_events(s); +} + +static void i440fx_fuzz_qos(QTestState *s, + const unsigned char *Data, size_t Size) { + + typedef struct QOSFuzzAction { + uint32_t value; + int devfn; + uint8_t offset; + uint8_t id; + } QOSFuzzAction; + + static QPCIBus *bus; + if (!bus) { + bus =3D qpci_new_pc(s, fuzz_qos_alloc); + } + + QOSFuzzAction a; + while (Size >=3D sizeof(a)) { + memcpy(&a, Data, sizeof(a)); + switch (a.id % ACTION_MAX) { + case WRITEB: + bus->config_writeb(bus, a.devfn, a.offset, (uint8_t)a.value); + break; + case WRITEW: + bus->config_writew(bus, a.devfn, a.offset, (uint16_t)a.value); + break; + case WRITEL: + bus->config_writel(bus, a.devfn, a.offset, (uint32_t)a.value); + break; + case READB: + bus->config_readb(bus, a.devfn, a.offset); + break; + case READW: + bus->config_readw(bus, a.devfn, a.offset); + break; + case READL: + bus->config_readl(bus, a.devfn, a.offset); + break; + } + Size -=3D sizeof(a); + Data +=3D sizeof(a); + } + flush_events(s); +} + +static void i440fx_fuzz_qos_fork(QTestState *s, + const unsigned char *Data, size_t Size) { + if (fork() =3D=3D 0) { + i440fx_fuzz_qos(s, Data, Size); + _Exit(0); + } else { + wait(NULL); + } +} + +static const char *i440fx_qtest_argv =3D TARGET_NAME " -machine accel=3Dqt= est" + "-m 0 -display none"; +static const char *i440fx_argv(FuzzTarget *t) +{ + return i440fx_qtest_argv; +} + +static void fork_init(void) +{ + counter_shm_init(); +} + +static void register_pci_fuzz_targets(void) +{ + /* Uses simple qtest commands and reboots to reset state */ + fuzz_add_target(&(FuzzTarget){ + .name =3D "i440fx-qtest-reboot-fuzz", + .description =3D "Fuzz the i440fx using raw qtest commands= and" + "rebooting after each run", + .get_init_cmdline =3D i440fx_argv, + .fuzz =3D i440fx_fuzz_qtest}); + + /* Uses libqos and forks to prevent state leakage */ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "i440fx-qos-fork-fuzz", + .description =3D "Fuzz the i440fx using raw qtest commands= and" + "rebooting after each run", + .pre_vm_init =3D &fork_init, + .fuzz =3D i440fx_fuzz_qos_fork,}, + "i440FX-pcihost", + &(QOSGraphTestOptions){} + ); + + /* + * Uses libqos. Doesn't do anything to reset state. Note that if we we= re to + * reboot after each run, we would also have to redo the qos-related + * initialization (qos_init_path) + */ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "i440fx-qos-noreset-fuzz", + .description =3D "Fuzz the i440fx using raw qtest commands= and" + "rebooting after each run", + .fuzz =3D i440fx_fuzz_qos,}, + "i440FX-pcihost", + &(QOSGraphTestOptions){} + ); +} + +fuzz_target_init(register_pci_fuzz_targets); --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579501131; cv=pass; d=zohomail.com; s=zohoarc; b=Kv7VjXaqE41uSFBETln1o0Wxe/GQC3/GmWaWq82TW5oMeSJ+3sXMyGHCtHhnujQrD2sNEc2yJxqjWEdiOlfx85E69IEL62YJkKM+ubdYboCXYSHOuc/O5Vwn0c51haZEX6cAfUZfia9EUPywH0VCi33ORoWBOhAmxBcQPX1wi84= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579501131; h=Content-Type:Content-Transfer-Encoding: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=/jacTnSYQO9B6P4X+uTDjis9yDkqwXHMLQYl0ahzxws=; b=i66/iR3812RnvX/YfgwrHBDk7y3TvbnbL7Lp1YVEYhsgwoLueVxDV1ouX0ASud99GvP0E0duBhmVelEWVTV1mz6qQ9JyArNkgQCuZ3eBnv+sxrF1SFtEgqURf9D2jauP5z4cCLJlKwrHPAYH9nxP+eyHuQf0wzYoY/jz/n3UxJ0= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579501131680845.3438593245764; Sun, 19 Jan 2020 22:18:51 -0800 (PST) Received: from localhost ([::1]:59172 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQOg-0001aQ-9z for importer@patchew.org; Mon, 20 Jan 2020 01:18:50 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35440) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1q-0007To-HM for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1l-0006WX-Bv for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:13 -0500 Received: from mail-bn7nam10on2119.outbound.protection.outlook.com ([40.107.92.119]:62817 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1l-0006WJ-6h for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:09 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:08 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:08 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kgMA63CuMok0J2tlAzRty+kqb1MoZ3C+BUaRuZCBFaTqRo5+yGkh7eIWauNpL+QE1jY8j7ttqvIiO7C6aJdpu/0++Vg9qwd4y35lmz1TiilCREUNF2k9EwXDSlvHz3V0Z/uB7qS5XORF9j36EnlosORr/X/NC8TLugOpi9mki7nDzXvE74Ix1rOxAd4SzpHl0Uy1bvKatSO/ePDr+0KbPjY8aBdW+Ans/dM6imnKxs2WG++IvYxRZtf66Ba/lQH0Wi/cg+QL+uixKQsRF33A75kD3S7mv49zFuaMjb7GAneY37YsZQtGRKn2o38DjbfTORJAkbKP+eqfUc5BpwLNrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/jacTnSYQO9B6P4X+uTDjis9yDkqwXHMLQYl0ahzxws=; b=hTFO8h4I15RUPgB4q7UO1Ca5rscAqPrKV1ILrfcbXr1Vloa+1nDWsBv5r3uhy5HtLFIhURwaVqOYTnzOI+eFycr3MRXXr8TlHp4l/e5A9GUQzpFTaL3WP3JcSrOKRlQWSI++vwVNF+JWR/bvEWnQOFU0fvEUyAsytkrdPZ5xQzaeIFwyo9ghA0kgSBqinivN/hIQhMZAJOQqV/ZV5/VKs+6WSRc4kEM3mCAjeD/bpaTkaw289/I1hqLq6w0oWbpvV79o4nHKDTru2eJxrOAzLqhtJLVBFG+kG/3ZFMAO+88cdfFOYBVFRzIG5qXG+xumk140B+ZbgCyu8WwqiHOXhQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/jacTnSYQO9B6P4X+uTDjis9yDkqwXHMLQYl0ahzxws=; b=X5MXrZVKAjp2MBontRCxCrNqAa3s6W8CrjcKShEDbDFs6jooDX3gN6kz+527iX6rO7DkgIqpwaKIccCftyM+Wxwfoj++RC5/biFla9cQovpgUteISHNzBjqUVZBr6sQ8/9yoxCXUxN2fizk9yQnNKGAAoC0eNsAwMoVFujE6CfU= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 18/20] fuzz: add i440fx fuzz targets Thread-Topic: [PATCH v7 18/20] fuzz: add i440fx fuzz targets Thread-Index: AQHVz1Yq8eXbP3BrGEGCFlxKHoGxlw== Date: Mon, 20 Jan 2020 05:55:06 +0000 Message-ID: <20200120055410.22322-25-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9c633653-0e31-4667-50d8-08d79d6d4d13 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3826; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SHuWbeOYx8CgfcXKeqkYaprI+86OdRLZ57WWXJOFoJcdHIvThczxD2h8EZFCV4DGWPbAeuONeCHE9Nb455f3Jlqom1VQWz9xaf1bau6rtuf9x1Z/w51JscqqkfUzToB2Qbx5DqElbCe3FOXaHpF4495TYonyft5xmNYKTVmFbtKgCmBhHsTgFlbpdWRdlwRvSC5DE4aVWCfkRAuHU1qDeUWMjnXNqymd47bqDz/mc34B9X5u0vHXSieTVus93/HKUnlmJL9hjedCtCog//wbv1ZZFlspFWoSziipVrLTon/F75ztjOIULB2govmNrAqXn1BFzwOYbeimuqo6D8pyY5qIXmC+y5XW59s1R48OPW6hUIcAth+TJML89O5RxlOhXgJCbe/W57rO+/5FfV3vBh8XYbSvvf4v8/qEKZZS4wNvgmN+aGzETDMVVrqSgbNP Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 9c633653-0e31-4667-50d8-08d79d6d4d13 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:07.9874 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: VF53VDehaP32OvqFixOTT/00BskkCtH885ggcSOEoX9uXNsf7+B05TYUSBA5EmYh X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.119 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" These three targets should simply fuzz reads/writes to a couple ioports, but they mostly serve as examples of different ways to write targets. They demonstrate using qtest and qos for fuzzing, as well as using rebooting and forking to reset state, or not resetting it at all. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/fuzz/Makefile.include | 3 + tests/qtest/fuzz/i440fx_fuzz.c | 178 ++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 tests/qtest/fuzz/i440fx_fuzz.c diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index e3bdd33ff4..38b8cdd9f1 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -6,6 +6,9 @@ fuzz-obj-y +=3D tests/qtest/fuzz/fuzz.o # Fuzzer skeleton fuzz-obj-y +=3D tests/qtest/fuzz/fork_fuzz.o fuzz-obj-y +=3D tests/qtest/fuzz/qos_fuzz.o =20 +# Targets +fuzz-obj-y +=3D tests/qtest/fuzz/i440fx_fuzz.o + FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest =20 # Linker Script to force coverage-counters into known regions which we can= mark diff --git a/tests/qtest/fuzz/i440fx_fuzz.c b/tests/qtest/fuzz/i440fx_fuzz.c new file mode 100644 index 0000000000..c7791182b8 --- /dev/null +++ b/tests/qtest/fuzz/i440fx_fuzz.c @@ -0,0 +1,178 @@ +/* + * I440FX Fuzzing Target + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "qemu/main-loop.h" +#include "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/pci.h" +#include "tests/qtest/libqos/pci-pc.h" +#include "fuzz.h" +#include "fuzz/qos_fuzz.h" +#include "fuzz/fork_fuzz.h" + + +#define I440FX_PCI_HOST_BRIDGE_CFG 0xcf8 +#define I440FX_PCI_HOST_BRIDGE_DATA 0xcfc + +enum action_id { + WRITEB, + WRITEW, + WRITEL, + READB, + READW, + READL, + ACTION_MAX +}; + +static void i440fx_fuzz_qtest(QTestState *s, + const unsigned char *Data, size_t Size) { + typedef struct QTestFuzzAction { + uint32_t value; + uint8_t id; + uint8_t addr; + } QTestFuzzAction; + QTestFuzzAction a; + + while (Size >=3D sizeof(a)) { + memcpy(&a, Data, sizeof(a)); + uint16_t addr =3D a.addr % 2 ? I440FX_PCI_HOST_BRIDGE_CFG : + I440FX_PCI_HOST_BRIDGE_DATA; + switch (a.id % ACTION_MAX) { + case WRITEB: + qtest_outb(s, addr, (uint8_t)a.value); + break; + case WRITEW: + qtest_outw(s, addr, (uint16_t)a.value); + break; + case WRITEL: + qtest_outl(s, addr, (uint32_t)a.value); + break; + case READB: + qtest_inb(s, addr); + break; + case READW: + qtest_inw(s, addr); + break; + case READL: + qtest_inl(s, addr); + break; + } + Size -=3D sizeof(a); + Data +=3D sizeof(a); + } + flush_events(s); +} + +static void i440fx_fuzz_qos(QTestState *s, + const unsigned char *Data, size_t Size) { + + typedef struct QOSFuzzAction { + uint32_t value; + int devfn; + uint8_t offset; + uint8_t id; + } QOSFuzzAction; + + static QPCIBus *bus; + if (!bus) { + bus =3D qpci_new_pc(s, fuzz_qos_alloc); + } + + QOSFuzzAction a; + while (Size >=3D sizeof(a)) { + memcpy(&a, Data, sizeof(a)); + switch (a.id % ACTION_MAX) { + case WRITEB: + bus->config_writeb(bus, a.devfn, a.offset, (uint8_t)a.value); + break; + case WRITEW: + bus->config_writew(bus, a.devfn, a.offset, (uint16_t)a.value); + break; + case WRITEL: + bus->config_writel(bus, a.devfn, a.offset, (uint32_t)a.value); + break; + case READB: + bus->config_readb(bus, a.devfn, a.offset); + break; + case READW: + bus->config_readw(bus, a.devfn, a.offset); + break; + case READL: + bus->config_readl(bus, a.devfn, a.offset); + break; + } + Size -=3D sizeof(a); + Data +=3D sizeof(a); + } + flush_events(s); +} + +static void i440fx_fuzz_qos_fork(QTestState *s, + const unsigned char *Data, size_t Size) { + if (fork() =3D=3D 0) { + i440fx_fuzz_qos(s, Data, Size); + _Exit(0); + } else { + wait(NULL); + } +} + +static const char *i440fx_qtest_argv =3D TARGET_NAME " -machine accel=3Dqt= est" + "-m 0 -display none"; +static const char *i440fx_argv(FuzzTarget *t) +{ + return i440fx_qtest_argv; +} + +static void fork_init(void) +{ + counter_shm_init(); +} + +static void register_pci_fuzz_targets(void) +{ + /* Uses simple qtest commands and reboots to reset state */ + fuzz_add_target(&(FuzzTarget){ + .name =3D "i440fx-qtest-reboot-fuzz", + .description =3D "Fuzz the i440fx using raw qtest commands= and" + "rebooting after each run", + .get_init_cmdline =3D i440fx_argv, + .fuzz =3D i440fx_fuzz_qtest}); + + /* Uses libqos and forks to prevent state leakage */ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "i440fx-qos-fork-fuzz", + .description =3D "Fuzz the i440fx using raw qtest commands= and" + "rebooting after each run", + .pre_vm_init =3D &fork_init, + .fuzz =3D i440fx_fuzz_qos_fork,}, + "i440FX-pcihost", + &(QOSGraphTestOptions){} + ); + + /* + * Uses libqos. Doesn't do anything to reset state. Note that if we we= re to + * reboot after each run, we would also have to redo the qos-related + * initialization (qos_init_path) + */ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "i440fx-qos-noreset-fuzz", + .description =3D "Fuzz the i440fx using raw qtest commands= and" + "rebooting after each run", + .fuzz =3D i440fx_fuzz_qos,}, + "i440FX-pcihost", + &(QOSGraphTestOptions){} + ); +} + +fuzz_target_init(register_pci_fuzz_targets); --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500823; cv=pass; d=zohomail.com; s=zohoarc; b=hsn/Z3jmXCBFjQ+VgpuF1+enQOWC2dFb01BsYHxd0VGF9VysgH5wYsb7pvGBnexwPLL++hbmg/jyPFLWees75ArjKFsQuhvsXHQL+lrnw34JmbMgy6eroeoCluQRJAAZpvhbTh4899QJ19cHAi64I8TQHG+XHwVdjBgONDRZ2lg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500823; h=Content-Type:Content-Transfer-Encoding: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=K9nZbM1cHG8+T2w6lWAIJ8R9dKsYeRQJZHQu6VGGuXI=; b=ILXCI9JgVzpV89RTgLvwNU4evR4h7npJ3m3izZuSCQPLuMHhoRoT5KZYMHzqnHxHEXjq3/if+NCrra3DyEjKmeHyjcrluxQ08dXry7DLjtDZD5OqE32zFBZWa1ZbgDGHJ9I/ipJq9jHAinZEdDJQQsiFtSoGZIfAHWc1S61LFxY= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500823142422.8792031735952; Sun, 19 Jan 2020 22:13:43 -0800 (PST) Received: from localhost ([::1]:59116 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQJh-0003ax-G7 for importer@patchew.org; Mon, 20 Jan 2020 01:13:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35444) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1q-0007Tx-LX for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1l-0006Ww-Td for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:14 -0500 Received: from mail-bn7nam10on2137.outbound.protection.outlook.com ([40.107.92.137]:7744 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1l-0006Wd-O6 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:09 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:08 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:08 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WJMarrCqvyI5uH94AJrL2+vMj/bXMrZzcY5TvrrLm+S+z9Jmg5GOdOJiFGEZyL32BUv7O/QgF4XwxA3pDWbqL0Va3IFSPazCC2TGZhHe/dEg5Sedm0F4wKSMHz2Vr0dmqmTUrGSMJ7yvoGIktkmDiVCSqwcyjx4rhpk9qtUPunIF+UeA6D/TL7mZk4AEOIwpy06O9Gv86JHDhopnXgp7wkwhR1QWdFGBnaqWv9Yb7nd6PjJXCqivUQC/vLgjZCB2dGVLZFsLnCq7Pzh8FVCyx1fjOb7jadSZL3qZidrEHhUVQWXXjew9u6frlY76RkBpX+CFOJcsHqlr0JiunqDVzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K9nZbM1cHG8+T2w6lWAIJ8R9dKsYeRQJZHQu6VGGuXI=; b=CYeQXP7W0mIvwGUtXC7iHnu4b6KLCtqUeeP5pV58J0q8911lLIjJTtJy+QBQUkCD6cP5I/iew3FFiwUAGJASMc+4zXvPasSv1UTKxV4zdMTryBqJgSTaZ+KNTmRoTOQMKLm4IL/VmoAmOW5eHyC/I0GhZj0hF7DLEMGtZ/PSxaSI1is7ydDVZ+1pRC1edOGXTHE+k1uBYmI4yWsYQmIla3URDz4xs7TZ4oNUbG41WIGUfv4ibbg43FJNDEzWOtFKZZSgX8ZLVd+6i+Ui3cz3bIuu1Ew+LWjntmGR0dLpZMGXTSu6FRgu498Hv8Ftivll5UBEzynWh3JI1m2UiXqB8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K9nZbM1cHG8+T2w6lWAIJ8R9dKsYeRQJZHQu6VGGuXI=; b=EevIPBX8Xp5cE5QO81X6WeowKSzvIscjZJIeT2VcUSp3awOqq2ckeB1qtKV984gtoacRm21MPWMqCYvMo1CiF7HckrJFmV16ExVKf50V7S/IIiu9fKNxSFyZwCUVq7vWQn/SP/6TNH17/E6/jpJBYj4I498NZ6IOOFIBfUj8BSM= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 18/20] fuzz: add virtio-net fuzz target Thread-Topic: [PATCH v7 18/20] fuzz: add virtio-net fuzz target Thread-Index: AQHVz1YrCuOUdpnUh0q1DYVR7GBu5w== Date: Mon, 20 Jan 2020 05:55:08 +0000 Message-ID: <20200120055410.22322-26-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 26a23474-76e1-4b37-dcfa-08d79d6d4e43 x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2399; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ko1rOK1uRYLWpk8vrmFkCcQZWuJcsjija0MbBI6MjXe58ue62c4Mi2RPIYyd3FdcZGdUNYucHxfF1u33Wq17v2d+uHO/9iu2+hwDS5rT8WwNkcLW5Pc5U/x4fd5ZuRYYQhXd/17Z+DExCCCk4QMstOtcK/wDxFX/8DJyWevQSVqj3TpmiYAzD7wn/pW0aK8OY4TNdF65H6RpPpc2b2ZNHNky8txT+j6JmtPR1Ns60qGfwWD3Sqmuj3+S65ZbsZ40R3VrL14o/V5PgZiEOJjxQVm8mE3H/NlqSRm922UhsjbW7OX2RVmDlp10D2ohScdnDV/zcLbebJGY5X7/il0pipOJlv7ajXSzffIhB2n3pjr7Ru+mehS6lqhuNiX6g4e6yIMFrX3qinX4JBank2DLMh3UPyerNZ5SzV2z3R9Wa5fmjPG7+fr5+VS1m4nzo1zd Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 26a23474-76e1-4b37-dcfa-08d79d6d4e43 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:08.7700 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GpyoylSEj0QeHzKHUqsmOYa+jgKEswFMyulDt4TfdBDqMS23tCueQQLx1r4bYUls X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.137 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" The virtio-net fuzz target feeds inputs to all three virtio-net virtqueues, and uses forking to avoid leaking state between fuzz runs. Signed-off-by: Alexander Bulekov --- tests/qtest/fuzz/Makefile.include | 1 + tests/qtest/fuzz/virtio_net_fuzz.c | 190 +++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 tests/qtest/fuzz/virtio_net_fuzz.c diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index 38b8cdd9f1..77385777ef 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -8,6 +8,7 @@ fuzz-obj-y +=3D tests/qtest/fuzz/qos_fuzz.o =20 # Targets fuzz-obj-y +=3D tests/qtest/fuzz/i440fx_fuzz.o +fuzz-obj-y +=3D tests/qtest/fuzz/virtio_net_fuzz.o =20 FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest =20 diff --git a/tests/qtest/fuzz/virtio_net_fuzz.c b/tests/qtest/fuzz/virtio_n= et_fuzz.c new file mode 100644 index 0000000000..3b1b79fd93 --- /dev/null +++ b/tests/qtest/fuzz/virtio_net_fuzz.c @@ -0,0 +1,190 @@ +/* + * virtio-net Fuzzing Target + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/virtio-net.h" +#include "fuzz.h" +#include "fork_fuzz.h" +#include "qos_fuzz.h" + +#define QVIRTIO_NET_TIMEOUT_US (30 * 1000 * 1000) +#define QVIRTIO_RX_VQ 0 +#define QVIRTIO_TX_VQ 1 +#define QVIRTIO_CTRL_VQ 2 + +#define VIRTIO_CONFIG_S_NEEDS_RESET 0x40 + +static int *sv; + +static void virtio_net_fuzz_multi(QTestState *s, + const unsigned char *Data, size_t Size, bool check_used) +{ + typedef struct vq_action { + uint8_t queue; + uint8_t length; + uint8_t write; + uint8_t next; + uint8_t rx; + } vq_action; + + uint32_t free_head =3D 0; + + QGuestAllocator *t_alloc =3D fuzz_qos_alloc; + + QVirtioNet *net_if =3D fuzz_qos_obj; + QVirtioDevice *dev =3D net_if->vdev; + QVirtQueue *q; + vq_action vqa; + while (Size >=3D sizeof(vqa)) { + memcpy(&vqa, Data, sizeof(vqa)); + Data +=3D sizeof(vqa); + Size -=3D sizeof(vqa); + + q =3D net_if->queues[vqa.queue % 3]; + + vqa.length =3D vqa.length >=3D Size ? Size : vqa.length; + if (vqa.rx && sv) { + write(sv[0], Data, vqa.length); + } else { + vqa.rx =3D 0; + uint64_t req_addr =3D guest_alloc(t_alloc, vqa.length); + /* + * If checking used ring, ensure that the fuzzer doesn't trigg= er + * trivial asserion failure on zero-zied buffer + */ + qtest_memwrite(s, req_addr, Data, vqa.length); + + + free_head =3D qvirtqueue_add(s, q, req_addr, vqa.length, + vqa.write, vqa.next); + qvirtqueue_add(s, q, req_addr, vqa.length, vqa.write , vqa.nex= t); + qvirtqueue_kick(s, dev, q, free_head); + } + + /* + * normally, we could just use qvirtio_wait_used_elem, but since we + * must manually run the main-loop for all the bhs to run, we use + * this hack with flush_events(), to run the main_loop + */ + gint64 start_time =3D g_get_monotonic_time(); + for (;;) { + /* Run the main loop */ + qtest_clock_step(s, 100); + flush_events(s); + /* Poll the used vring only if we added to the TX or CTRL vq */ + if (check_used && !vqa.rx && q !=3D net_if->queues[QVIRTIO_RX_= VQ]) { + uint32_t got_desc_idx; + /* Input led to a virtio_error */ + if (dev->bus->get_status(dev) & VIRTIO_CONFIG_S_NEEDS_RESE= T) { + break; + } + if (dev->bus->get_queue_isr_status(dev, q) && + qvirtqueue_get_buf(s, q, &got_desc_idx, NULL)) { + g_assert_cmpint(got_desc_idx, =3D=3D, free_head); + break; + } + g_assert(g_get_monotonic_time() - start_time + <=3D QVIRTIO_NET_TIMEOUT_US); + } else { + break; + } + } + Data +=3D vqa.length; + Size -=3D vqa.length; + } +} + +static void virtio_net_fork_fuzz(QTestState *s, + const unsigned char *Data, size_t Size) +{ + if (fork() =3D=3D 0) { + virtio_net_fuzz_multi(s, Data, Size, false); + flush_events(s); + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_net_fork_fuzz_check_used(QTestState *s, + const unsigned char *Data, size_t Size) +{ + if (fork() =3D=3D 0) { + virtio_net_fuzz_multi(s, Data, Size, true); + flush_events(s); + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_net_pre_fuzz(QTestState *s) +{ + qos_init_path(s); + counter_shm_init(); +} + +static void *virtio_net_test_setup_socket(GString *cmd_line, void *arg) +{ + if (!sv) { + sv =3D g_new(int, 2); + int ret =3D socketpair(PF_UNIX, SOCK_STREAM, 0, sv); + fcntl(sv[0], F_SETFL, O_NONBLOCK); + g_assert_cmpint(ret, !=3D, -1); + } + g_string_append_printf(cmd_line, " -netdev socket,fd=3D%d,id=3Dhs0 ", = sv[1]); + return arg; +} + +static void *virtio_net_test_setup_user(GString *cmd_line, void *arg) +{ + g_string_append_printf(cmd_line, " -netdev user,id=3Dhs0 "); + return arg; +} + +static void register_virtio_net_fuzz_targets(void) +{ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-net-socket", + .description =3D "Fuzz the virtio-net virtual queues. Fuzz inc= oming " + "traffic using the socket backend", + .pre_fuzz =3D &virtio_net_pre_fuzz, + .fuzz =3D virtio_net_fork_fuzz,}, + "virtio-net", + &(QOSGraphTestOptions){.before =3D virtio_net_test_setup_socke= t} + ); + + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-net-socket-check-used", + .description =3D "Fuzz the virtio-net virtual queues. Wait for= the " + "descriptors to be used. Timeout may indicate improperly handl= ed " + "input", + .pre_fuzz =3D &virtio_net_pre_fuzz, + .fuzz =3D virtio_net_fork_fuzz_check_used,}, + "virtio-net", + &(QOSGraphTestOptions){.before =3D virtio_net_test_setup_socke= t} + ); + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-net-slirp", + .description =3D "Fuzz the virtio-net virtual queues with the = slirp " + " backend. Warning: May result in network traffic emitted from= the " + " process. Run in an isolated network environment.", + .pre_fuzz =3D &virtio_net_pre_fuzz, + .fuzz =3D virtio_net_fork_fuzz,}, + "virtio-net", + &(QOSGraphTestOptions){.before =3D virtio_net_test_setup_user} + ); +} + +fuzz_target_init(register_virtio_net_fuzz_targets); --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579500494; cv=pass; d=zohomail.com; s=zohoarc; b=Huyxc54GBFynyzroHPSrjzFKjLunqbtnV5MfJ4GNvfeNRI5u/hrKLNRmlBqpSUmRYadfroXNTQ8QnO/gLnMOOyG57LJbS8z6eDzfnumNNGG7jKewP5Vhq2g4naw8RbQ1+mCHqvBwjhZlZQ4NnoA7JpN92h0rfNlKTXnNA7YW4KI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579500494; h=Content-Type:Content-Transfer-Encoding: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=S1iW1YSnhR2Q4tcvdA9noTP2UB1kdSEfm0N7alL1p/I=; b=PxMwgzPftM1LMH/fDGXANOBXlWmkgqK2E00VKJoUmqfJ3E/1enk8Vag+8AxtrhIiFQJoDLzdj9yCWMofr55y+4NwJJ2DskcBFKsKLFfE7Kz2UHQpni76ANmVG2y3jSXwSteuSVXXYqaacPpo8eI+k1Q/ual+xhx5Feq0wgbIDPc= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579500494731365.8074540941649; Sun, 19 Jan 2020 22:08:14 -0800 (PST) Received: from localhost ([::1]:59046 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQEP-0004Pr-0d for importer@patchew.org; Mon, 20 Jan 2020 01:08:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35473) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1s-0007VY-CJ for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1q-0006ZH-7Q for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:16 -0500 Received: from mail-bn7nam10on2102.outbound.protection.outlook.com ([40.107.92.102]:54912 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1o-0006Y0-MF for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:12 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:11 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:10 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q6SJq79RC+HKomv3YkCLbpTdjqhcrhjMJaBxr/MaFmuJz9KNDVrDvYGu0QWNHYnDr0vswRUee8ehKp5uqqaL5vMg6VV1XL5dRumjZPErSA66qeuAiW5QCluq0xt+stdt2PxO3seTzKmwnxR7dspgGC2lXDPS+SacmLw+K1UmFQCG2Wt+SF81RxomwfV0ATDDCRdxd6uRlPhFNmu4VxEAqx9uzUAZtWoyO2GLieNMRVVuG3IVC/UgKYNkEpjoM71vUBsfv1EU/JWxvubnTdh+WQUnjNmMU5oClfxP9or9joTZIdeQWnqZgJJkCucQjBRoUkr8zDef40QIN7lTCPmS1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S1iW1YSnhR2Q4tcvdA9noTP2UB1kdSEfm0N7alL1p/I=; b=km7li5FuDyQSQel99cJx3vQ7c3tdsBJS82QMJHbouDptImuqTCTZAbtoWPWwqdiag6Bo6XUNgyvzH/O1lO6704nYB2cDa/DhczhzHk6r8Axy09aHQCBDKsjfEt6c/GXPUfovvrS+Te3rIBfX1mbedXoWeC8o2kUxUGdwFKNSIYCK4pM3gxolmpsKd1cUuXuO0D7mhxy8jjT9vsAlV/SaSxhrWWBl+P/NUHyjt8kW/nMV0CWDUpqVGbZ6ceBanZKkXsXI9V4wh4XtQEMCPbad84TSK33Y4p3Ip5vpWmOdX6cKdWCT7+e+45B0l2EU8hAIMmbeQQR2eF/BUV1hryJO+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S1iW1YSnhR2Q4tcvdA9noTP2UB1kdSEfm0N7alL1p/I=; b=UIMu8aXLblbvnEA7iHIW4nzk3pjSCA/5kh6yXQen/8z3WrlZjHDSgdxASOXqGgXGiKW3hHMWJYjgAeb28KbdePq3fJun5haRL+vgAeF08MlWPAObt0HszWNzmgeH9qLVFG3RbruzghrbdrwLAhrhZY2HI7HMIjt6UMg8FLpi3uo= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 19/20] fuzz: add virtio-scsi fuzz target Thread-Topic: [PATCH v7 19/20] fuzz: add virtio-scsi fuzz target Thread-Index: AQHVz1YscpBbXOe9vEqX83WYFJAEcg== Date: Mon, 20 Jan 2020 05:55:10 +0000 Message-ID: <20200120055410.22322-28-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 66307ed5-4fae-43c3-231d-08d79d6d4f3c x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:317; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(6666004)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bFUFQnnSzkDO3FRLHlCH6386iuMRMUVILQKjkAKWwtKfwjmdYNg2pDuSsM2oroAOGGyezT1Z1NNRBn82BYcwyN46B+RSYd/Z7+B1qQmegX+FsFi9InJWRq2ZDb/ZGq2CuHKUICnm+kSBxE7Pgdf+E/KBEPbpaXm2OUdluqp6uTfKyEw6MH97iR5iOaCj8k1ERxNGgqD15+jb2+1rRSHXh2M7lCXBVB4BCxXjV2aJcrecanVG3hzpJKEDyADJqzDHx/sAJUjDMuxTR8hCJg4uE0gRr6m2SXlU3zvaKG6ZD9fiip7o3h0iQg4Ggn8M5HY2AqBtmpzF9GmtOpGCVy8hjRFqcyZy2d8acjomEx1Zc+o6WQJUSF3K8NF/mMWBDFJO/+ON8MZYNGe7cLwVbFrGIYohnEpt4ZpQqfikct5telFJwbrGqZ4pbZat1swso0S4 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 66307ed5-4fae-43c3-231d-08d79d6d4f3c X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:10.5700 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: d5MBI8/E5BIsv/fklkQRlHsE6xLk62HdQU64/HIPTvzHKMLtHrGbkDnZkIPUQiN7 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.102 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" The virtio-scsi fuzz target sets up and fuzzes the available virtio-scsi queues. After an element is placed on a queue, the fuzzer can select whether to perform a kick, or continue adding elements. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/fuzz/Makefile.include | 1 + tests/qtest/fuzz/virtio_scsi_fuzz.c | 200 ++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 tests/qtest/fuzz/virtio_scsi_fuzz.c diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index 77385777ef..cde3e9636c 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -9,6 +9,7 @@ fuzz-obj-y +=3D tests/qtest/fuzz/qos_fuzz.o # Targets fuzz-obj-y +=3D tests/qtest/fuzz/i440fx_fuzz.o fuzz-obj-y +=3D tests/qtest/fuzz/virtio_net_fuzz.o +fuzz-obj-y +=3D tests/qtest/fuzz/virtio_scsi_fuzz.o =20 FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest =20 diff --git a/tests/qtest/fuzz/virtio_scsi_fuzz.c b/tests/qtest/fuzz/virtio_= scsi_fuzz.c new file mode 100644 index 0000000000..ee7ca5448c --- /dev/null +++ b/tests/qtest/fuzz/virtio_scsi_fuzz.c @@ -0,0 +1,200 @@ +/* + * virtio-serial Fuzzing Target + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/virtio-net.h" +#include "libqos/virtio-scsi.h" +#include "libqos/virtio.h" +#include "libqos/virtio-pci.h" +#include "standard-headers/linux/virtio_ids.h" +#include "standard-headers/linux/virtio_pci.h" +#include "standard-headers/linux/virtio_scsi.h" +#include "fuzz.h" +#include "fork_fuzz.h" +#include "qos_fuzz.h" + +#define PCI_SLOT 0x02 +#define PCI_FN 0x00 +#define QVIRTIO_SCSI_TIMEOUT_US (1 * 1000 * 1000) + +#define MAX_NUM_QUEUES 64 + +/* Based on tests/virtio-scsi-test.c */ +typedef struct { + int num_queues; + QVirtQueue *vq[MAX_NUM_QUEUES + 2]; +} QVirtioSCSIQueues; + +static QVirtioSCSIQueues *qvirtio_scsi_init(QVirtioDevice *dev, uint64_t m= ask) +{ + QVirtioSCSIQueues *vs; + uint64_t feat; + int i; + + vs =3D g_new0(QVirtioSCSIQueues, 1); + + feat =3D qvirtio_get_features(dev); + if (mask) { + feat &=3D ~QVIRTIO_F_BAD_FEATURE | mask; + } else { + feat &=3D ~(QVIRTIO_F_BAD_FEATURE | (1ull << VIRTIO_RING_F_EVENT_I= DX)); + } + qvirtio_set_features(dev, feat); + + vs->num_queues =3D qvirtio_config_readl(dev, 0); + + for (i =3D 0; i < vs->num_queues + 2; i++) { + vs->vq[i] =3D qvirtqueue_setup(dev, fuzz_qos_alloc, i); + } + + qvirtio_set_driver_ok(dev); + + return vs; +} + +static void virtio_scsi_fuzz(QTestState *s, QVirtioSCSIQueues* queues, + const unsigned char *Data, size_t Size) +{ + typedef struct vq_action { + uint8_t queue; + uint8_t length; + uint8_t write; + uint8_t next; + uint8_t kick; + } vq_action; + + uint32_t free_head[MAX_NUM_QUEUES + 2] =3D {0}; + QGuestAllocator *t_alloc =3D fuzz_qos_alloc; + + QVirtioSCSI *scsi =3D fuzz_qos_obj; + QVirtioDevice *dev =3D scsi->vdev; + QVirtQueue *q; + vq_action vqa; + while (Size >=3D sizeof(vqa)) { + memcpy(&vqa, Data, sizeof(vqa)); + + Data +=3D sizeof(vqa); + Size -=3D sizeof(vqa); + + vqa.queue =3D vqa.queue % queues->num_queues; + vqa.length =3D vqa.length >=3D Size ? Size : vqa.length; + vqa.write =3D vqa.write & 1; + vqa.next =3D vqa.next & 1; + vqa.kick =3D vqa.kick & 1; + + + q =3D queues->vq[vqa.queue]; + + uint64_t req_addr =3D guest_alloc(t_alloc, vqa.length); + qtest_memwrite(s, req_addr, Data, vqa.length); + if (free_head[vqa.queue] =3D=3D 0) { + free_head[vqa.queue] =3D qvirtqueue_add(s, q, req_addr, vqa.le= ngth, + vqa.write, vqa.next); + } else { + qvirtqueue_add(s, q, req_addr, vqa.length, vqa.write , vqa.nex= t); + } + + if (vqa.kick) { + qvirtqueue_kick(s, dev, q, free_head[vqa.queue]); + free_head[vqa.queue] =3D 0; + } + Data +=3D vqa.length; + Size -=3D vqa.length; + } + for (int i =3D 0; i < MAX_NUM_QUEUES + 2; i++) { + if (free_head[i]) { + qvirtqueue_kick(s, dev, queues->vq[i], free_head[i]); + } + } +} + +static void virtio_scsi_fork_fuzz(QTestState *s, + const unsigned char *Data, size_t Size) +{ + QVirtioSCSI *scsi =3D fuzz_qos_obj; + static QVirtioSCSIQueues *queues; + if (!queues) { + queues =3D qvirtio_scsi_init(scsi->vdev, 0); + } + if (fork() =3D=3D 0) { + virtio_scsi_fuzz(s, queues, Data, Size); + flush_events(s); + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_scsi_with_flag_fuzz(QTestState *s, + const unsigned char *Data, size_t Size) +{ + QVirtioSCSI *scsi =3D fuzz_qos_obj; + static QVirtioSCSIQueues *queues; + + if (fork() =3D=3D 0) { + if (Size >=3D sizeof(uint64_t)) { + queues =3D qvirtio_scsi_init(scsi->vdev, *(uint64_t *)Data); + virtio_scsi_fuzz(s, queues, + Data + sizeof(uint64_t), Size - sizeof(uint64= _t)); + flush_events(s); + } + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_scsi_pre_fuzz(QTestState *s) +{ + qos_init_path(s); + counter_shm_init(); +} + +static void *virtio_scsi_test_setup(GString *cmd_line, void *arg) +{ + g_string_append(cmd_line, + " -drive file=3Dblkdebug::null-co://," + "file.image.read-zeroes=3Don," + "if=3Dnone,id=3Ddr1,format=3Draw,file.align=3D4k " + "-device scsi-hd,drive=3Ddr1,lun=3D0,scsi-id=3D1"); + return arg; +} + + +static void register_virtio_scsi_fuzz_targets(void) +{ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-scsi-fuzz", + .description =3D "Fuzz the virtio-net virtual queues, fork= ing" + "for each fuzz run", + .pre_vm_init =3D &counter_shm_init, + .pre_fuzz =3D &virtio_scsi_pre_fuzz, + .fuzz =3D virtio_scsi_fork_fuzz,}, + "virtio-scsi", + &(QOSGraphTestOptions){.before =3D virtio_scsi_test_setup} + ); + + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-scsi-flags-fuzz", + .description =3D "Fuzz the virtio-net virtual queues, fork= ing" + "for each fuzz run (also fuzzes the virtio flags)", + .pre_vm_init =3D &counter_shm_init, + .pre_fuzz =3D &virtio_scsi_pre_fuzz, + .fuzz =3D virtio_scsi_with_flag_fuzz,}, + "virtio-scsi", + &(QOSGraphTestOptions){.before =3D virtio_scsi_test_setup} + ); +} + +fuzz_target_init(register_virtio_scsi_fuzz_targets); --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579501102; cv=pass; d=zohomail.com; s=zohoarc; b=RKUCHBnF14g1iEkXwvJL8dxedjZgHcSjqde4GKVA6yqAeL5MkpzkqV8tyvBOA0Lt1cFONqaYdgjYQqghY5sZpVrSbtEMan8O3oN/JIpSuZ/PXq6mv2V7CsUzPhENnS25oC86HI+GfnKd0PD9HRKnZ2jFrwCcShJhiyKdgkQWZOA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579501102; h=Content-Type:Content-Transfer-Encoding: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=K9nZbM1cHG8+T2w6lWAIJ8R9dKsYeRQJZHQu6VGGuXI=; b=LaGZeDJjUuFDuzUs/t8TYQg7fH3QdrSYD9Lllr1mjGcM2Et6PV4oNc4UxDKWgdHOs1uxhsLMcvkLUdaHua9+bsAQyaDL7Zh4cMTi2VjYWUMVnH39tSZNDX0ygptjZ1M+bCX23vdZadwBEoITujBIFUXfQfN0mWSh+tiweyztKV4= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579501102108698.0716370465586; Sun, 19 Jan 2020 22:18:22 -0800 (PST) Received: from localhost ([::1]:59170 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQOC-0000qe-I0 for importer@patchew.org; Mon, 20 Jan 2020 01:18:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35469) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1r-0007VK-Uu for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1n-0006Xf-4U for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:15 -0500 Received: from mail-bn7nam10on2138.outbound.protection.outlook.com ([40.107.92.138]:8033 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1m-0006XG-TL for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:11 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:09 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:09 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NW14/RBRe2gOyEIQM+kWZKTDQOqGuXdJt0Nep5P5g5OSXtk8GMXqSGZ6AlVl6C1BxObMffkpMuwySwkMwfR0G+mheFwqY0qm82IxEXwEcz43yu+X4IZ/MiytYEcOcEHUNy5zMHYuG8fa+R/k6q/sL4l61ibPy2WlXocPxmSEDsfsVxtB+T11a5xnb/WlyUncR9N5jxZ5pOAxFdr+wrwrABRp2BnjSt8iWoxVeBilSs4HUee3fJKYTTEc2vt56WQUIBohVH+GdeeWq/syG92iHgd01HRTPlLrfj0LTPo62ofLtA1IRIzvsAknblz3Z3MDfJLVP0iwaAthtoaPa522Cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K9nZbM1cHG8+T2w6lWAIJ8R9dKsYeRQJZHQu6VGGuXI=; b=jJee7TZFEUJdIm7Q4DT0dlgmfneb3//imE70z0Nk0Csn2YpUG4YZ7gWTtVr+zv4n0q9DW0UH7ImA+DLsXzD04ktYUfj/2/2MevyQgMcxewK+nTXSoss/LFy3wGXZ4p4KnpgSH9RqwxyIK1YAmksLv2nP9Ka8XOKub67CnxMY8g4wv6K+TIJWHYTBE/qXCDjcxlIIW26BF4jTmt/soOYTlMrZGA/7lhXEOuZnsHSyEXlTDDxGRrIABXwPLKPLwcCPdth8W8M/7gIgNy7kLI76u9VGXIzUYCU27pjAYyeUjjLKXSWWWIgMOjoBPq5KUqJhHTKQpnEuCcL1pj3ulZcVzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K9nZbM1cHG8+T2w6lWAIJ8R9dKsYeRQJZHQu6VGGuXI=; b=tAU89b/atJugyBjqmDamm1m2GHDn3cnccQ2gm6qIyPkV27nC7WaAARJJRLXpqrQo5QOTYelWW1IIhcigKvZNi/GVxe3/3b8JFiZz28Bg/U4ErjETx1DiHBryMJU+gwtZ2hADPhraznVdFKO+a9xnwUVfbdsm3VomCtxg2vvqJVY= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 19/20] fuzz: add virtio-net fuzz target Thread-Topic: [PATCH v7 19/20] fuzz: add virtio-net fuzz target Thread-Index: AQHVz1YsiWU6AR3b7k+J/q9tyDwWfA== Date: Mon, 20 Jan 2020 05:55:09 +0000 Message-ID: <20200120055410.22322-27-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6461ff53-8d73-414a-08fc-08d79d6d4ebc x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2399; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dCBR5yf5hd+tFKQZfggLxucOphrL3DsCymE5ztTNFzMEmQw6Ot0uldpnA0EJf7yiUpG8e882W8ZHcuMC4kZ5YPgNZvwQ0ASeelT6nMqlOss3FTHkZRp7wylNweQDopeGHnmrR6V0qGOGRZWjT3Y0xzfnfheET9ZtH1zbHjQAcTC4ZCz20nLQF+xq/BYzeruLZ+QWDK7lMHoI5SX3eIIfWpsIcrFmaqP4MCLOv/b0Sb4lp9pxh/D+t6PTR7gLE718lcS9AptmwD64UbHrcuvwLbo3Tyv0ZK3lZsLnOFmHgH0H2uI9G42sWA4YAycXD6RrIMuVywqrQjniFeO1UNQ9dmN4RpzoDzuyh/4hQGTIjhTId1+G3JZkTAWajWHx4qGfLyeLeP9uCrE3wl4zuowJaq01LVmkEH3IV49Vvg7oWU/Z0qJPmVy4PuGwLNpUYwI3 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 6461ff53-8d73-414a-08fc-08d79d6d4ebc X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:09.5695 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: N59+pjzU+BaHUJa34EVcppiFojWj9n92kif0Eh9TwQXjQ2sI9Fn2TpA7J+GyiPUM X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.138 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" The virtio-net fuzz target feeds inputs to all three virtio-net virtqueues, and uses forking to avoid leaking state between fuzz runs. Signed-off-by: Alexander Bulekov --- tests/qtest/fuzz/Makefile.include | 1 + tests/qtest/fuzz/virtio_net_fuzz.c | 190 +++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 tests/qtest/fuzz/virtio_net_fuzz.c diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index 38b8cdd9f1..77385777ef 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -8,6 +8,7 @@ fuzz-obj-y +=3D tests/qtest/fuzz/qos_fuzz.o =20 # Targets fuzz-obj-y +=3D tests/qtest/fuzz/i440fx_fuzz.o +fuzz-obj-y +=3D tests/qtest/fuzz/virtio_net_fuzz.o =20 FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest =20 diff --git a/tests/qtest/fuzz/virtio_net_fuzz.c b/tests/qtest/fuzz/virtio_n= et_fuzz.c new file mode 100644 index 0000000000..3b1b79fd93 --- /dev/null +++ b/tests/qtest/fuzz/virtio_net_fuzz.c @@ -0,0 +1,190 @@ +/* + * virtio-net Fuzzing Target + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/virtio-net.h" +#include "fuzz.h" +#include "fork_fuzz.h" +#include "qos_fuzz.h" + +#define QVIRTIO_NET_TIMEOUT_US (30 * 1000 * 1000) +#define QVIRTIO_RX_VQ 0 +#define QVIRTIO_TX_VQ 1 +#define QVIRTIO_CTRL_VQ 2 + +#define VIRTIO_CONFIG_S_NEEDS_RESET 0x40 + +static int *sv; + +static void virtio_net_fuzz_multi(QTestState *s, + const unsigned char *Data, size_t Size, bool check_used) +{ + typedef struct vq_action { + uint8_t queue; + uint8_t length; + uint8_t write; + uint8_t next; + uint8_t rx; + } vq_action; + + uint32_t free_head =3D 0; + + QGuestAllocator *t_alloc =3D fuzz_qos_alloc; + + QVirtioNet *net_if =3D fuzz_qos_obj; + QVirtioDevice *dev =3D net_if->vdev; + QVirtQueue *q; + vq_action vqa; + while (Size >=3D sizeof(vqa)) { + memcpy(&vqa, Data, sizeof(vqa)); + Data +=3D sizeof(vqa); + Size -=3D sizeof(vqa); + + q =3D net_if->queues[vqa.queue % 3]; + + vqa.length =3D vqa.length >=3D Size ? Size : vqa.length; + if (vqa.rx && sv) { + write(sv[0], Data, vqa.length); + } else { + vqa.rx =3D 0; + uint64_t req_addr =3D guest_alloc(t_alloc, vqa.length); + /* + * If checking used ring, ensure that the fuzzer doesn't trigg= er + * trivial asserion failure on zero-zied buffer + */ + qtest_memwrite(s, req_addr, Data, vqa.length); + + + free_head =3D qvirtqueue_add(s, q, req_addr, vqa.length, + vqa.write, vqa.next); + qvirtqueue_add(s, q, req_addr, vqa.length, vqa.write , vqa.nex= t); + qvirtqueue_kick(s, dev, q, free_head); + } + + /* + * normally, we could just use qvirtio_wait_used_elem, but since we + * must manually run the main-loop for all the bhs to run, we use + * this hack with flush_events(), to run the main_loop + */ + gint64 start_time =3D g_get_monotonic_time(); + for (;;) { + /* Run the main loop */ + qtest_clock_step(s, 100); + flush_events(s); + /* Poll the used vring only if we added to the TX or CTRL vq */ + if (check_used && !vqa.rx && q !=3D net_if->queues[QVIRTIO_RX_= VQ]) { + uint32_t got_desc_idx; + /* Input led to a virtio_error */ + if (dev->bus->get_status(dev) & VIRTIO_CONFIG_S_NEEDS_RESE= T) { + break; + } + if (dev->bus->get_queue_isr_status(dev, q) && + qvirtqueue_get_buf(s, q, &got_desc_idx, NULL)) { + g_assert_cmpint(got_desc_idx, =3D=3D, free_head); + break; + } + g_assert(g_get_monotonic_time() - start_time + <=3D QVIRTIO_NET_TIMEOUT_US); + } else { + break; + } + } + Data +=3D vqa.length; + Size -=3D vqa.length; + } +} + +static void virtio_net_fork_fuzz(QTestState *s, + const unsigned char *Data, size_t Size) +{ + if (fork() =3D=3D 0) { + virtio_net_fuzz_multi(s, Data, Size, false); + flush_events(s); + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_net_fork_fuzz_check_used(QTestState *s, + const unsigned char *Data, size_t Size) +{ + if (fork() =3D=3D 0) { + virtio_net_fuzz_multi(s, Data, Size, true); + flush_events(s); + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_net_pre_fuzz(QTestState *s) +{ + qos_init_path(s); + counter_shm_init(); +} + +static void *virtio_net_test_setup_socket(GString *cmd_line, void *arg) +{ + if (!sv) { + sv =3D g_new(int, 2); + int ret =3D socketpair(PF_UNIX, SOCK_STREAM, 0, sv); + fcntl(sv[0], F_SETFL, O_NONBLOCK); + g_assert_cmpint(ret, !=3D, -1); + } + g_string_append_printf(cmd_line, " -netdev socket,fd=3D%d,id=3Dhs0 ", = sv[1]); + return arg; +} + +static void *virtio_net_test_setup_user(GString *cmd_line, void *arg) +{ + g_string_append_printf(cmd_line, " -netdev user,id=3Dhs0 "); + return arg; +} + +static void register_virtio_net_fuzz_targets(void) +{ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-net-socket", + .description =3D "Fuzz the virtio-net virtual queues. Fuzz inc= oming " + "traffic using the socket backend", + .pre_fuzz =3D &virtio_net_pre_fuzz, + .fuzz =3D virtio_net_fork_fuzz,}, + "virtio-net", + &(QOSGraphTestOptions){.before =3D virtio_net_test_setup_socke= t} + ); + + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-net-socket-check-used", + .description =3D "Fuzz the virtio-net virtual queues. Wait for= the " + "descriptors to be used. Timeout may indicate improperly handl= ed " + "input", + .pre_fuzz =3D &virtio_net_pre_fuzz, + .fuzz =3D virtio_net_fork_fuzz_check_used,}, + "virtio-net", + &(QOSGraphTestOptions){.before =3D virtio_net_test_setup_socke= t} + ); + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-net-slirp", + .description =3D "Fuzz the virtio-net virtual queues with the = slirp " + " backend. Warning: May result in network traffic emitted from= the " + " process. Run in an isolated network environment.", + .pre_fuzz =3D &virtio_net_pre_fuzz, + .fuzz =3D virtio_net_fork_fuzz,}, + "virtio-net", + &(QOSGraphTestOptions){.before =3D virtio_net_test_setup_user} + ); +} + +fuzz_target_init(register_virtio_net_fuzz_targets); --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579501350; cv=pass; d=zohomail.com; s=zohoarc; b=O+tUauHp7Yey6n4u4C7pDg92HAps7uf6ODjiPiuVxKPCs/BenIn4sJlxWwiJpXNfJknifETKlXet3pCn9UA0sPwg0p+kpeAsw2yCMTYgOCIR4XIZ4QhN2G8lvU48hW3k31ESYvu6GDqBD7NGHQ7+Yv7XRatSAmkjo4LeMkPs5SI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579501350; h=Content-Type:Content-Transfer-Encoding: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=23rREpJOr49xI2ix6ikkwHcbZDyhY36SLSiC5Wi+0gA=; b=iQyrcozgzP9F26ORaGaLvcC3ZoiUQCkZsuyj6VSXz1iUcYTPuTCW15vepYzRcC/6z1C60AqYD3yoDmEcRfgLP+mA7LM6n2FMDG+TZo+lLZpMVqNH1Rzsf2zxdSk0HF/R+7Brmz33LOvhPhmwiTZiyeA12J3AGIh2qU6f2tiIlSY= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579501350748404.16535924766754; Sun, 19 Jan 2020 22:22:30 -0800 (PST) Received: from localhost ([::1]:59238 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQSD-00066z-FM for importer@patchew.org; Mon, 20 Jan 2020 01:22:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35492) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1u-0007XZ-D9 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1r-0006a7-LL for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:18 -0500 Received: from mail-bn7nam10on2102.outbound.protection.outlook.com ([40.107.92.102]:54912 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1q-0006Y0-Lj for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:14 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:11 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:11 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=do8OL84SG0M/2S0zGBoUnR6ZNT6D5IoOB6KM3K6fVXIbIymvckK+F7qNB958c7R0bvrTq7XhOJH9Sn6k8brubOzL0f1ViLVPccaHUz4MgtrcQGbDQrCJRwv/GcGvsoHzUv6ZynbuDs5pgSusx6dL4pAxwicHjH2dP8V0mMZYJfI0zc+x/BTmV08NfCpuiriVNw+AxcCtKRKBr4j0mjwqqacxceqQIwjPQq5htgJUwYkVW3A0uhoz7X4UBSncSnTzln5V3SvTCFrIGyP5QAnwBoZjhhAQt+Z2caHq5uOxwwnw8oPeoDQh4gQ/2Y/CZshvSghzTynQt8JVlBPlwCCKjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=23rREpJOr49xI2ix6ikkwHcbZDyhY36SLSiC5Wi+0gA=; b=oPz6FqboVW2UenFFZMUKvr/ZuxMuvOmgrDlWP+tTfL3zsgvcxsJPIejHwBmc7Wv/KIQ5+i78ReQ7LH6vyHQgreqb/XWNPKYWao2E2Ff6Nnh4Zjlajpy7+FiNFQxoqj4aFJRO7juDCyNYO9SAEMmMh31H62h7+9cOHKbdFsPeedi7uK+ri7cUTY0DvQNQla3hI0u/L7VRWIS6QRxmtEPAIe1BGnqgSPs13KRncpyIorpFE9ZWWHP++2kE8haYFEyQ++WjvpB1tcmOFzLfansI7NvyndUeYzBfSrj7ya7rC3z8H7F+eMN0vJR2YoM12B7yenmUP52ilgimTX6N73pSgg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=23rREpJOr49xI2ix6ikkwHcbZDyhY36SLSiC5Wi+0gA=; b=L6OR/ubXq3jfddZUhoAItK9y0M/aKksXhuvk8Ba7dVRY6Ek94YmgsGlDLuZFjKAOZ6mB83rSohGjHfzBIPtDE7Om5Qerv2uHw2RkgJIM6ZTvu7TZTzFJUGpGuqGWoATIwa8Arip8+h3CQikky6MjDW0SbEYwWUYHPxtxpodHWFs= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 20/20] fuzz: add documentation to docs/devel/ Thread-Topic: [PATCH v7 20/20] fuzz: add documentation to docs/devel/ Thread-Index: AQHVz1YtIR+5cpVOEEaKC9s+5EC5WA== Date: Mon, 20 Jan 2020 05:55:11 +0000 Message-ID: <20200120055410.22322-29-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9455f267-2aa5-419a-1845-08d79d6d4fde x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: tKrWcoqDQhCX/UJectaNZdWV+F9sTeABgEvEkF0N658Orb+dLDDZuGtQzFZbMfU2ZduXU9BC+OUFqgJ0h8Gtrl1sSY9wK0XfMZcCsbf5EK1omcuSYlAPRGaMFhpiNHI2RuHW2MapwZEnWS/xPq1ZJiujdKi3uPGIhMB3ltG2lqkJPSq4FCVvKlcE6Sp4Bxl4Dit0+AH5sf725Ak102TpP/N4RT7gqIXJWNuf1pxdSixR8hKwcVcYaI8ScjdTTZZri0hbY7UTaLlAt4wLzSbci3PSnJaHN6vHpEICYTGi5LSAvrdmGxwAABM1yMNzTXTCDn8gSqCOUuksZMz+DjmGNFBn5KxKOxPcAwoSebaOJHPyEULIXPZf+csrX3TTxxTWabjv1y8DDHCFmIX6AZpRS4QHe6Vh4qXzIcnWzVl/OUNYlF+Qgd//n2Qb2S9rAbO9 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 9455f267-2aa5-419a-1845-08d79d6d4fde X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:11.6194 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GoPtDp45nhLaq9gdgmUIDM9k1AXfqE0msfuBkrvHD/DevgpM6VjeWt5TOM8UKv9A X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.102 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: "pbonzini@redhat.com" , "bsd@redhat.com" , "stefanha@redhat.com" , "Bulekov, Alexander" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- docs/devel/fuzzing.txt | 116 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 docs/devel/fuzzing.txt diff --git a/docs/devel/fuzzing.txt b/docs/devel/fuzzing.txt new file mode 100644 index 0000000000..324d2cd92b --- /dev/null +++ b/docs/devel/fuzzing.txt @@ -0,0 +1,116 @@ +=3D Fuzzing =3D + +=3D=3D Introduction =3D=3D + +This document describes the virtual-device fuzzing infrastructure in QEMU = and +how to use it to implement additional fuzzers. + +=3D=3D Basics =3D=3D + +Fuzzing operates by passing inputs to an entry point/target function. The +fuzzer tracks the code coverage triggered by the input. Based on these +findings, the fuzzer mutates the input and repeats the fuzzing. + +To fuzz QEMU, we rely on libfuzzer. Unlike other fuzzers such as AFL, libf= uzzer +is an _in-process_ fuzzer. For the developer, this means that it is their +responsibility to ensure that state is reset between fuzzing-runs. + +=3D=3D Building the fuzzers =3D=3D + +NOTE: If possible, build a 32-bit binary. When forking, the 32-bit fuzzer = is +much faster, since the page-map has a smaller size. This is due to the fac= t that +AddressSanitizer mmaps ~20TB of memory, as part of its detection. This res= ults +in a large page-map, and a much slower fork(). + +To build the fuzzers, install a recent version of clang: +Configure with (substitute the clang binaries with the version you install= ed): + + CC=3Dclang-8 CXX=3Dclang++-8 /path/to/configure --enable-fuzzing + +Fuzz targets are built similarly to system/softmmu: + + make i386-softmmu/fuzz + +This builds ./i386-softmmu/qemu-fuzz-i386 + +The first option to this command is: --fuzz_taget=3DFUZZ_NAME +To list all of the available fuzzers run qemu-fuzz-i386 with no arguments. + +eg: + ./i386-softmmu/qemu-fuzz-i386 --fuzz-target=3Dvirtio-net-fork-fuzz + +Internally, libfuzzer parses all arguments that do not begin with "--". +Information about these is available by passing -help=3D1 + +Now the only thing left to do is wait for the fuzzer to trigger potential +crashes. + +=3D=3D Adding a new fuzzer =3D=3D +Coverage over virtual devices can be improved by adding additional fuzzers. +Fuzzers are kept in tests/qtest/fuzz/ and should be added to +tests/qtest/fuzz/Makefile.include + +Fuzzers can rely on both qtest and libqos to communicate with virtual devi= ces. + +1. Create a new source file. For example ``tests/qtest/fuzz/foo-device-fuz= z.c``. + +2. Write the fuzzing code using the libqtest/libqos API. See existing fuzz= ers +for reference. + +3. Register the fuzzer in ``tests/fuzz/Makefile.include`` by appending the +corresponding object to fuzz-obj-y + +Fuzzers can be more-or-less thought of as special qtest programs which can +modify the qtest commands and/or qtest command arguments based on inputs +provided by libfuzzer. Libfuzzer passes a byte array and length. Commonly = the +fuzzer loops over the byte-array interpreting it as a list of qtest comman= ds, +addresses, or values. + +=3D Implementation Details =3D + +=3D=3D The Fuzzer's Lifecycle =3D=3D + +The fuzzer has two entrypoints that libfuzzer calls. libfuzzer provides it= 's +own main(), which performs some setup, and calls the entrypoints: + +LLVMFuzzerInitialize: called prior to fuzzing. Used to initialize all of t= he +necessary state + +LLVMFuzzerTestOneInput: called for each fuzzing run. Processes the input a= nd +resets the state at the end of each run. + +In more detail: + +LLVMFuzzerInitialize parses the arguments to the fuzzer (must start with t= wo +dashes, so they are ignored by libfuzzer main()). Currently, the arguments +select the fuzz target. Then, the qtest client is initialized. If the targ= et +requires qos, qgraph is set up and the QOM/LIBQOS modules are initialized. +Then the QGraph is walked and the QEMU cmd_line is determined and saved. + +After this, the vl.c:qemu__main is called to set up the guest. There are +target-specific hooks that can be called before and after qemu_main, for +additional setup(e.g. PCI setup, or VM snapshotting). + +LLVMFuzzerTestOneInput: Uses qtest/qos functions to act based on the fuzz +input. It is also responsible for manually calling the main loop/main_loop= _wait +to ensure that bottom halves are executed and any cleanup required before = the +next input. + +Since the same process is reused for many fuzzing runs, QEMU state needs to +be reset at the end of each run. There are currently two implemented +options for resetting state: +1. Reboot the guest between runs. + Pros: Straightforward and fast for simple fuzz targets. + Cons: Depending on the device, does not reset all device state. If the + device requires some initialization prior to being ready for fuzzing + (common for QOS-based targets), this initialization needs to be done af= ter + each reboot. + Example target: i440fx-qtest-reboot-fuzz +2. Run each test case in a separate forked process and copy the coverage + information back to the parent. This is fairly similar to AFL's "deferr= ed" + fork-server mode [3] + Pros: Relatively fast. Devices only need to be initialized once. No need + to do slow reboots or vmloads. + Cons: Not officially supported by libfuzzer. Does not work well for dev= ices + that rely on dedicated threads. + Example target: virtio-net-fork-fuzz --=20 2.23.0 From nobody Fri May 3 17:20:56 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) ARC-Seal: i=2; a=rsa-sha256; t=1579501276; cv=pass; d=zohomail.com; s=zohoarc; b=IB3yS4qqiLoYskrEHhHNHmHfXZnIaj2sbJHn7ZcUqLYThGyN/ykgR6E9TbbBISGStdCA7PvbPfbmFOwZvhTGBvrIjpumv1pap4J6ngAH/+uRWbes4Y5nEA6VUshxqzGBQ6u4ZvzrecUDRiUUN3+weF6fs9fI3/pRUFq3aGudjok= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1579501276; h=Content-Type:Content-Transfer-Encoding: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=S1iW1YSnhR2Q4tcvdA9noTP2UB1kdSEfm0N7alL1p/I=; b=msfyZmxFvbL3J3JNe5msjyUr+U/t/Y4rlXpITwEvNwwAxAqOhFh4UeIe4dg0eoybNwx08zj1sT/TEbl5EeQXsqeWFzZpXflNfYBj2PP1xsS8uxn6snn+MI7xWkkbEFLjm394dl9OEl/uDp2xGgqmwsqo9SCbMx8+qzlQPedi7Oo= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=bu.edu) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1579501276890558.2613328461554; Sun, 19 Jan 2020 22:21:16 -0800 (PST) Received: from localhost ([::1]:59232 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQR1-0004tK-OO for importer@patchew.org; Mon, 20 Jan 2020 01:21:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:35493) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1itQ1u-0007Xa-Dk for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1itQ1s-0006aj-I5 for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:18 -0500 Received: from mail-bn7nam10on2102.outbound.protection.outlook.com ([40.107.92.102]:54912 helo=NAM10-BN7-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1itQ1s-0006Y0-2a for qemu-devel@nongnu.org; Mon, 20 Jan 2020 00:55:16 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (52.135.102.32) by SN6PR03MB4399.namprd03.prod.outlook.com (20.178.6.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.23; Mon, 20 Jan 2020 05:55:13 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::9c11:10cd:6e97:bbe8%7]) with mapi id 15.20.2644.024; Mon, 20 Jan 2020 05:55:13 +0000 Received: from mozz.bu.edu (128.197.127.33) by MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2644.20 via Frontend Transport; Mon, 20 Jan 2020 05:55:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I5SpLqMUS3jCojXlXpOnD9ojLsU9cRWIWXJQRoan0n05XL0ke/B06YYlIoBVWjkfUaUueXuZRbZIWWd1rY7zN2vT9f2k2wmHHxnp2YJ2gmDpIhpYngHk77eP+UX+LBi7cLpvUZkKmr9Lhqb4/pvuZ2iZtK0qt2OLxal/2ewiXg2JIEgJuwhew4HskilMj/c99wFsXaDLmT8+J2A0BMymI8xpi5X9C9iKLJUtQd4fq9TyyOpMHxGshkJhspWv+5n2OJnhLlrpt2V6vxQKxcHPX7kVxD+Z1+x8pZjpDkX5WwKEjUsBPr7KD6d9RWIXRRl1DbERad4rP7Jd/5IcC87FdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S1iW1YSnhR2Q4tcvdA9noTP2UB1kdSEfm0N7alL1p/I=; b=JU8vnerje1/+mHl/7Ch+CZk0UQDfaKm5zoth8JeQyBCuv60CfpH2pS1pODcqizvZ8g4SJNc3uGqqFU8e1Ibc7pelsyqh82l7dIgwVjTm611uyWvsH7hrFLL1KPzgIyLr8oPEr+8PcUHLPfRAFPGwb0F8esadZyjDJkVcHOD+r3sBgSpsJW7hMhaWd5SVBeqCelc3R20JH7xs7iBVTeHiKPMo+grIS2ij6nFIbCYqQSNbRWLiO0kfD48/fmnmUR8WFoVM/TXYjgZ7+XenhMuOh6TbDo0NHTbviZbte32K9ugeIljbUaQDpmemwJmD4nKDoXdk8s5T8gOslX0g/zYyEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=bu.edu; dmarc=pass action=none header.from=bu.edu; dkim=pass header.d=bu.edu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bushare.onmicrosoft.com; s=selector2-bushare-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S1iW1YSnhR2Q4tcvdA9noTP2UB1kdSEfm0N7alL1p/I=; b=zV5RVYOqIR/Pq4zUmNHxPwX4Fy3I05pv36sP3Fp5bc+aVJX13yqChvcyvPk/xdIloEJbc5zSLxQTtV5PdpGTKKzGScRchscCWg0avFzwDWmqYWbhnSNlCmlIYjL85SyE5bnGrUmIvM8f1v2sc/rZHX2ZdMTtq3lNvR0b0e00igw= From: "Bulekov, Alexander" To: "qemu-devel@nongnu.org" Subject: [PATCH v7 20/20] fuzz: add virtio-scsi fuzz target Thread-Topic: [PATCH v7 20/20] fuzz: add virtio-scsi fuzz target Thread-Index: AQHVz1YuZoWWVRJhQUmoP23RVO6eRg== Date: Mon, 20 Jan 2020 05:55:13 +0000 Message-ID: <20200120055410.22322-30-alxndr@bu.edu> References: <20200120055410.22322-1-alxndr@bu.edu> In-Reply-To: <20200120055410.22322-1-alxndr@bu.edu> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.23.0 x-originating-ip: [128.197.127.33] x-clientproxiedby: MN2PR20CA0032.namprd20.prod.outlook.com (2603:10b6:208:e8::45) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) authentication-results: spf=none (sender IP is ) smtp.mailfrom=alxndr@bu.edu; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: bab89e83-6f8c-4655-7a30-08d79d6d507b x-ms-traffictypediagnostic: SN6PR03MB4399: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:317; x-forefront-prvs: 0288CD37D9 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(4636009)(136003)(366004)(39860400002)(346002)(376002)(396003)(189003)(199004)(5660300002)(956004)(2616005)(8936002)(86362001)(6916009)(6486002)(7696005)(1076003)(52116002)(316002)(71200400001)(16526019)(186003)(786003)(478600001)(2906002)(26005)(81166006)(66946007)(66476007)(64756008)(36756003)(8676002)(75432002)(81156014)(66446008)(4326008)(66556008)(54906003); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR03MB4399; H:SN6PR03MB3871.namprd03.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; 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: None (protection.outlook.com: bu.edu does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bkScRJkgYQ7lJgFGTPZDFzv8eLGVNbH8Ss9Q4+GDFZ7aLf+Tkj5F/t1ZroCP4AFU66SZW8LQvyf1KvVe0b1jRYyQ1ruAoqHctf+ALmtZjs3oM7UqLJj1sZftDNrNI6ExdbbVO/6/GlsgXTLLi5YzotE91bR+mfAno+Sv4yStzUDOjfLAiJm3QIcV0J/oFxHV9PcEHmcHBJcDbvh3Bb+YvJ+9b/lB71xjvFbxqloGLPfsQUM5kTmBbXRDQWGGZpglf440HP/tREHD1RvMA/E2uxekZSQMEQCjRY5pjOI9VBiMRVOj40nhldxNZomz+UmRfnMVC+j2eQqEObGxMg3vJJ8oTupMJ4SojjVToMBEdDrQNXwg54BZOYcYXxmHu+IuaCfWPXlq8L3gpRf3Hc9LCCIPm4JJm/jF/hRgcsFAE9HId/EIHgUbw8fDQmjj2cVV Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: bab89e83-6f8c-4655-7a30-08d79d6d507b X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jan 2020 05:55:13.7662 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: d57d32cc-c121-488f-b07b-dfe705680c71 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: jCW/9BpdpUoJ2KGJ6lZqAP77Ec5twFIg4bWdAPn2hwZOeFaTr0iV0O4k27bqXg04 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4399 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.92.102 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 , Thomas Huth , "Bulekov, Alexander" , "bsd@redhat.com" , "stefanha@redhat.com" , "pbonzini@redhat.com" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @bushare.onmicrosoft.com) Content-Type: text/plain; charset="utf-8" The virtio-scsi fuzz target sets up and fuzzes the available virtio-scsi queues. After an element is placed on a queue, the fuzzer can select whether to perform a kick, or continue adding elements. Signed-off-by: Alexander Bulekov Reviewed-by: Stefan Hajnoczi --- tests/qtest/fuzz/Makefile.include | 1 + tests/qtest/fuzz/virtio_scsi_fuzz.c | 200 ++++++++++++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 tests/qtest/fuzz/virtio_scsi_fuzz.c diff --git a/tests/qtest/fuzz/Makefile.include b/tests/qtest/fuzz/Makefile.= include index 77385777ef..cde3e9636c 100644 --- a/tests/qtest/fuzz/Makefile.include +++ b/tests/qtest/fuzz/Makefile.include @@ -9,6 +9,7 @@ fuzz-obj-y +=3D tests/qtest/fuzz/qos_fuzz.o # Targets fuzz-obj-y +=3D tests/qtest/fuzz/i440fx_fuzz.o fuzz-obj-y +=3D tests/qtest/fuzz/virtio_net_fuzz.o +fuzz-obj-y +=3D tests/qtest/fuzz/virtio_scsi_fuzz.o =20 FUZZ_CFLAGS +=3D -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest =20 diff --git a/tests/qtest/fuzz/virtio_scsi_fuzz.c b/tests/qtest/fuzz/virtio_= scsi_fuzz.c new file mode 100644 index 0000000000..ee7ca5448c --- /dev/null +++ b/tests/qtest/fuzz/virtio_scsi_fuzz.c @@ -0,0 +1,200 @@ +/* + * virtio-serial Fuzzing Target + * + * Copyright Red Hat Inc., 2019 + * + * Authors: + * Alexander Bulekov + * + * 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 "tests/qtest/libqtest.h" +#include "tests/qtest/libqos/virtio-net.h" +#include "libqos/virtio-scsi.h" +#include "libqos/virtio.h" +#include "libqos/virtio-pci.h" +#include "standard-headers/linux/virtio_ids.h" +#include "standard-headers/linux/virtio_pci.h" +#include "standard-headers/linux/virtio_scsi.h" +#include "fuzz.h" +#include "fork_fuzz.h" +#include "qos_fuzz.h" + +#define PCI_SLOT 0x02 +#define PCI_FN 0x00 +#define QVIRTIO_SCSI_TIMEOUT_US (1 * 1000 * 1000) + +#define MAX_NUM_QUEUES 64 + +/* Based on tests/virtio-scsi-test.c */ +typedef struct { + int num_queues; + QVirtQueue *vq[MAX_NUM_QUEUES + 2]; +} QVirtioSCSIQueues; + +static QVirtioSCSIQueues *qvirtio_scsi_init(QVirtioDevice *dev, uint64_t m= ask) +{ + QVirtioSCSIQueues *vs; + uint64_t feat; + int i; + + vs =3D g_new0(QVirtioSCSIQueues, 1); + + feat =3D qvirtio_get_features(dev); + if (mask) { + feat &=3D ~QVIRTIO_F_BAD_FEATURE | mask; + } else { + feat &=3D ~(QVIRTIO_F_BAD_FEATURE | (1ull << VIRTIO_RING_F_EVENT_I= DX)); + } + qvirtio_set_features(dev, feat); + + vs->num_queues =3D qvirtio_config_readl(dev, 0); + + for (i =3D 0; i < vs->num_queues + 2; i++) { + vs->vq[i] =3D qvirtqueue_setup(dev, fuzz_qos_alloc, i); + } + + qvirtio_set_driver_ok(dev); + + return vs; +} + +static void virtio_scsi_fuzz(QTestState *s, QVirtioSCSIQueues* queues, + const unsigned char *Data, size_t Size) +{ + typedef struct vq_action { + uint8_t queue; + uint8_t length; + uint8_t write; + uint8_t next; + uint8_t kick; + } vq_action; + + uint32_t free_head[MAX_NUM_QUEUES + 2] =3D {0}; + QGuestAllocator *t_alloc =3D fuzz_qos_alloc; + + QVirtioSCSI *scsi =3D fuzz_qos_obj; + QVirtioDevice *dev =3D scsi->vdev; + QVirtQueue *q; + vq_action vqa; + while (Size >=3D sizeof(vqa)) { + memcpy(&vqa, Data, sizeof(vqa)); + + Data +=3D sizeof(vqa); + Size -=3D sizeof(vqa); + + vqa.queue =3D vqa.queue % queues->num_queues; + vqa.length =3D vqa.length >=3D Size ? Size : vqa.length; + vqa.write =3D vqa.write & 1; + vqa.next =3D vqa.next & 1; + vqa.kick =3D vqa.kick & 1; + + + q =3D queues->vq[vqa.queue]; + + uint64_t req_addr =3D guest_alloc(t_alloc, vqa.length); + qtest_memwrite(s, req_addr, Data, vqa.length); + if (free_head[vqa.queue] =3D=3D 0) { + free_head[vqa.queue] =3D qvirtqueue_add(s, q, req_addr, vqa.le= ngth, + vqa.write, vqa.next); + } else { + qvirtqueue_add(s, q, req_addr, vqa.length, vqa.write , vqa.nex= t); + } + + if (vqa.kick) { + qvirtqueue_kick(s, dev, q, free_head[vqa.queue]); + free_head[vqa.queue] =3D 0; + } + Data +=3D vqa.length; + Size -=3D vqa.length; + } + for (int i =3D 0; i < MAX_NUM_QUEUES + 2; i++) { + if (free_head[i]) { + qvirtqueue_kick(s, dev, queues->vq[i], free_head[i]); + } + } +} + +static void virtio_scsi_fork_fuzz(QTestState *s, + const unsigned char *Data, size_t Size) +{ + QVirtioSCSI *scsi =3D fuzz_qos_obj; + static QVirtioSCSIQueues *queues; + if (!queues) { + queues =3D qvirtio_scsi_init(scsi->vdev, 0); + } + if (fork() =3D=3D 0) { + virtio_scsi_fuzz(s, queues, Data, Size); + flush_events(s); + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_scsi_with_flag_fuzz(QTestState *s, + const unsigned char *Data, size_t Size) +{ + QVirtioSCSI *scsi =3D fuzz_qos_obj; + static QVirtioSCSIQueues *queues; + + if (fork() =3D=3D 0) { + if (Size >=3D sizeof(uint64_t)) { + queues =3D qvirtio_scsi_init(scsi->vdev, *(uint64_t *)Data); + virtio_scsi_fuzz(s, queues, + Data + sizeof(uint64_t), Size - sizeof(uint64= _t)); + flush_events(s); + } + _Exit(0); + } else { + wait(NULL); + } +} + +static void virtio_scsi_pre_fuzz(QTestState *s) +{ + qos_init_path(s); + counter_shm_init(); +} + +static void *virtio_scsi_test_setup(GString *cmd_line, void *arg) +{ + g_string_append(cmd_line, + " -drive file=3Dblkdebug::null-co://," + "file.image.read-zeroes=3Don," + "if=3Dnone,id=3Ddr1,format=3Draw,file.align=3D4k " + "-device scsi-hd,drive=3Ddr1,lun=3D0,scsi-id=3D1"); + return arg; +} + + +static void register_virtio_scsi_fuzz_targets(void) +{ + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-scsi-fuzz", + .description =3D "Fuzz the virtio-net virtual queues, fork= ing" + "for each fuzz run", + .pre_vm_init =3D &counter_shm_init, + .pre_fuzz =3D &virtio_scsi_pre_fuzz, + .fuzz =3D virtio_scsi_fork_fuzz,}, + "virtio-scsi", + &(QOSGraphTestOptions){.before =3D virtio_scsi_test_setup} + ); + + fuzz_add_qos_target(&(FuzzTarget){ + .name =3D "virtio-scsi-flags-fuzz", + .description =3D "Fuzz the virtio-net virtual queues, fork= ing" + "for each fuzz run (also fuzzes the virtio flags)", + .pre_vm_init =3D &counter_shm_init, + .pre_fuzz =3D &virtio_scsi_pre_fuzz, + .fuzz =3D virtio_scsi_with_flag_fuzz,}, + "virtio-scsi", + &(QOSGraphTestOptions){.before =3D virtio_scsi_test_setup} + ); +} + +fuzz_target_init(register_virtio_scsi_fuzz_targets); --=20 2.23.0