From nobody Sat May 18 19:24:30 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=1615677739; cv=pass; d=zohomail.com; s=zohoarc; b=VySgU6b558SF5Tk5J8FgOgSStr4kyLwr2tjiO/EICM0CoUn7ft646/Jk++2+R5CQ78Xtz1KGsIp7JDVMUfBCHY+9h/15m9p8mO+hrjOFIv4BNXTSur/p6MjSHnl+IqsjfeGUS3IbYJ9oa/ZbSrKWXxPDAq9HXyhWuML8FWwV5nY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615677739; 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=VD3m0M64JMLogNeZhqK7ekR4YtDnSmVhwD6UCuCJxwE=; b=hOhKQdA3ya4IiUUFTvxSvxh8gJp4116Jh+ePDt56rhF5E3zU4Se6GjQv2D7I1sC75YFBQTuValryCoG7qhQcKpgYHq8l8p5GcfV+Ofja6tV2JzZ23+u5ioEo/MaPET3wga/oBxmnx9y0XltiOZ1MDby468+FdzvgzhCW3otiehk= 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 1615677739425546.4414433223351; Sat, 13 Mar 2021 15:22:19 -0800 (PST) Received: from localhost ([::1]:42052 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lLDaL-0007Uj-CH for importer@patchew.org; Sat, 13 Mar 2021 18:22:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55226) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lLDY3-00066s-J3 for qemu-devel@nongnu.org; Sat, 13 Mar 2021 18:19:55 -0500 Received: from mail-mw2nam10on2091.outbound.protection.outlook.com ([40.107.94.91]:5920 helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lLDY1-0002Tn-47 for qemu-devel@nongnu.org; Sat, 13 Mar 2021 18:19:55 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) by SN6PR03MB4446.namprd03.prod.outlook.com (2603:10b6:805:f6::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.31; Sat, 13 Mar 2021 23:19:12 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::dda8:67d8:8d23:74c6]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::dda8:67d8:8d23:74c6%6]) with mapi id 15.20.3912.031; Sat, 13 Mar 2021 23:19:12 +0000 Received: from stormtrooper.vrmnet (72.74.210.193) by MN2PR10CA0020.namprd10.prod.outlook.com (2603:10b6:208:120::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32 via Frontend Transport; Sat, 13 Mar 2021 23:19:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DvMUGMefBl/+z5phGlwU8tQGX0b8ZmK7m8BciM9FxgOSuSrpzcJbyE5H07A4IUhQTAh7BopseCYitS5Pk4RcvwqYDVEtZNAyR3S6Q8w7LUm/aghMDFQ5CMPycM7cPWqJq0wMvFNhp+pqKLfGXJPXdSBqmLvxx1Mo4z+4kmlOAHnQVMVVmRXBVYr5wdAV73MhTA8irDOWHl0H79toj1xjRFHARUsR2WmVa1KT6VyQECyTm+7NZfH8guE3dA35XGIhj5wFk/mEs7IPeA6OYP3rSvgnXdG1froAPw6r4EFL4JdDvNqPR+u1/UK0xAzexfp/MCWHHDIO1K7vw7LQOYaasA== 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=VD3m0M64JMLogNeZhqK7ekR4YtDnSmVhwD6UCuCJxwE=; b=UOSDbKWGPsFw6PA66ZDt3I9KOtZZMNxP5oka27nrSoJLsavLQjjY8dsOAiIUk7cWuNcAEQNhNsAxyEOoYcThGH2JkZiXXitPohqbcM/8V7TjZWZp47zRoYhLvK6A+N0XH2eDoF5LE+n7miXiutYlV/fXEZa6vyHtzFvnbicTGXUanSHdBvrDND7CH0k0mRM6+dxk/RLBNpvEF/fy1I6MHTnbLoW3ocbFchruwHEeZpGyW9tMKeOi5rFkdFqKVo3BEx2N+/dYYK8qFDCyB0jiiw3+MurWIeSzJ1RRD3d09+M2whZM5tYvsoTKzC8pVuCf/7kh6ugUWlb/jgOCkobyKA== 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=VD3m0M64JMLogNeZhqK7ekR4YtDnSmVhwD6UCuCJxwE=; b=7gwAQkGMjKa3+fp9JORaJidIduY863BiX1uyp7USHwyr5ZEHw1PcR6Dp0pG6WOU+eZDWPESUXkWrtDbnk/msVjxBFNfN1jzMyg/1LmexK1QeTiY9OaMPCnRIdbRF8pk91fKWFask2Y9vlTN8c4XMAHieggJj56QnwUSOYOZlfZA= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bu.edu; From: Alexander Bulekov To: qemu-devel@nongnu.org Subject: [PATCH v2 1/3] memory: add a sparse memory device for fuzzing Date: Sat, 13 Mar 2021 18:18:57 -0500 Message-Id: <20210313231859.941263-2-alxndr@bu.edu> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210313231859.941263-1-alxndr@bu.edu> References: <20210313231859.941263-1-alxndr@bu.edu> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [72.74.210.193] X-ClientProxiedBy: MN2PR10CA0020.namprd10.prod.outlook.com (2603:10b6:208:120::33) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cd6a77e0-561b-4b31-1886-08d8e6766991 X-MS-TrafficTypeDiagnostic: SN6PR03MB4446: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:182; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rGF4cmUV3/q8DPtMjBNiw8dmg1LQpqcgaVwvRFn6V6PA1m0tL0VwNRJ9gnp1/5C4v1Mwk91RZfz+pdKOSx36MWJm0LcUIY97QhUSQb+sbC5XlMlozNe/RXYvJUzdpv36p+cfW9O4OM2MXFevGbBgtcg6C4bqaIcUePcYVPwIcG1b2rX2iJWNaW/bDWb7Jrbya9Qr2JfOWeDVbzB7uAvLaH3ZHyGHk0WDvkU0f9GIU41/O2bXNnqv8SSf847DHtIdt4Zv1sn1qPSKzGaQWKMRP1yHOdUpFa1B34Z7ftskjc0Jx/UUyR54n09G7uKMmEkOsBs1QHr44szXL9K8pWgbRsPvYVCcRCAEoz55xVvSHG71wrg1cfm4rXPvwaxtsBykDeLF4MsdKfHf0Piw00eepw7Li+DWmpsuxuZlCbpr3vAl09Qqip7WX4rbWfQwZql6JDTbP4IwbXcc92p8pbx4DnkkB2549InDhml5mO2yHNxNYeOAmWHPFI1DtzMqQ2WUNW9ftz6lS1nruNmuf0uSkAHsORd8aV9QYODAQ90r1XIM0BWVGHfkVQlVzAozhvsE X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR03MB3871.namprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(376002)(396003)(39860400002)(366004)(346002)(478600001)(2616005)(86362001)(8676002)(6916009)(6506007)(956004)(36756003)(786003)(54906003)(6486002)(316002)(2906002)(6666004)(4326008)(186003)(52116002)(6512007)(26005)(16526019)(8936002)(66556008)(66946007)(5660300002)(66476007)(83380400001)(1076003)(75432002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?in/91A0uhiibVm3g2xQ7V9nG3fOF3xx4ywfZYEOEVxFvMSKGQWWsolS9G/Zx?= =?us-ascii?Q?uFkAfCMjBdJ9MwGcyryUROjPe2sLPccBGV5d0ehEQw+xszA0MBYSvVyc/itK?= =?us-ascii?Q?ndt07ZKzJmL3VVKV4ZrrmA6zBc6Z/qted8D+/TXUB92RSidpPDrc9LHpxaxU?= =?us-ascii?Q?eIszZT7jhkEf6X1PGcSOyI3zezYpmB2FG/1sbr3a5CD0OE5+ji7uatvPZ/51?= =?us-ascii?Q?7eBsUyfNcnIsdmzO7dXZa1E1Gzry9dGVQslKOrH7pODJH8ow9jK1IH8jjZR0?= =?us-ascii?Q?919cUH1TJWX4EQr3pWVrB2cWBuuIQn91+m/bNbrHNDS0TXD2zeiv4D9xPZmi?= =?us-ascii?Q?GDGiCqb0JOqMRuqvCVuHHjdq4e3GyV80zxgfB9IPBhJHfnJI26I+6bb8hvQX?= =?us-ascii?Q?Y8UalxUMrC1vJ0oQmSpQt0A5t3GhbZNV5wdhnmV9vFnWMRXv/UIpBFRWjutf?= =?us-ascii?Q?lOV88LymoXiQRJopew3IfIHRIHsAJSxQiJ0anJu9CLCRb/grWoYBCuC+LDg1?= =?us-ascii?Q?YW4wdT/Fyngw1rgW9HR8Fg8YvZNmD2wpsoeYX3LysIJn6dHcfQZwPwZTNA+Q?= =?us-ascii?Q?ze3pyI+u42ee9KYN+43GcA6Fj1pIKkUChH7+wxV9D983lLZHk/diJle9E32l?= =?us-ascii?Q?YCBDvGlwaDbiP75v5CEFhX2Oj2YeqLfG4w+pB1F7PdAtLDLdUafwd3rmYYP4?= =?us-ascii?Q?oknufDXVEpwEoSotPR98++NRkPojLstURXBtZC3CRafZk6w2zuSNpMnuOdME?= =?us-ascii?Q?6bPpjYerrKMv7y1IzT3bn3Cy3yo7EGNQa9UvcY0tiQw4YmJHLTI/SIdxfjKd?= =?us-ascii?Q?O5/83X0i7nbOvlDDJQrdqY07oF7KKJSxbEgQX4owjVtvxK0VxtsOjj8VI2e2?= =?us-ascii?Q?UmB4Rs0UdUvpZ9zkHevkyV60IsBcKTsTDN2YxwujQASve781FMiLTXDkhVZN?= =?us-ascii?Q?jVS11/GOtZGCpTs1U9QKxjnNvjSouchbfEA6qfwhO41Qooj+PnqlRO+nXCZ9?= =?us-ascii?Q?MtLVNPAq/UTsxNSlQuczQF+EBP9I3mDdXr7FeRLmtvjhY4tk6rHn/KPNPVRc?= =?us-ascii?Q?MGzF/AYIG80stKhk6/WG2dGrFnT5kKoIWPJ9dCXgrc4m7JDejGSA/COaHcl2?= =?us-ascii?Q?1/JWcfBoQ3AJpkBMBmWXr2Sx+1DRZsQdT0DSDa3mgE167j1XUQFD207Va+O2?= =?us-ascii?Q?mc1xU+jJuQRCSOjq8M8mt11RxTqyO8f81Kxtla5RkRhAjU8W0fTMJCTSMQnJ?= =?us-ascii?Q?6y/tqkZ/bO2DKu5HzEHwCdA0WHdIxIpyxyLy8acink2wDsvxhmS0RzgUbhKL?= =?us-ascii?Q?XN5rQxqsdFKCtw6dqkc6M5Gu?= X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: cd6a77e0-561b-4b31-1886-08d8e6766991 X-MS-Exchange-CrossTenant-AuthSource: SN6PR03MB3871.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2021 23:19:12.7066 (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: 9e1WgMe+A+kdNymYKVhMQjo7XihE/HQDaUVKcyBVEbF0xh5KS6Y2zPTxr+qr0l6Z X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4446 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.94.91; envelope-from=alxndr@bu.edu; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HK_RANDOM_ENVFROM=0.001, HK_RANDOM_FROM=0.999, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , darren.kenny@oracle.com, "Michael S. Tsirkin" , f4bug@amsat.org, Alexander Bulekov , bsd@redhat.com, stefanha@redhat.com, Igor Mammedov , 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" For testing, it can be useful to simulate an enormous amount of memory (e.g. 2^64 RAM). This adds an MMIO device that acts as sparse memory. When something writes a nonzero value to a sparse-mem address, we allocate a block of memory. This block is kept around, until all of the bytes within the block are zero-ed. The device has a very low priority (so it can be mapped beneath actual RAM, and virtual device MMIO regions). Signed-off-by: Alexander Bulekov --- MAINTAINERS | 1 + hw/mem/meson.build | 1 + hw/mem/sparse-mem.c | 152 ++++++++++++++++++++++++++++++++++++ include/hw/mem/sparse-mem.h | 19 +++++ 4 files changed, 173 insertions(+) create mode 100644 hw/mem/sparse-mem.c create mode 100644 include/hw/mem/sparse-mem.h diff --git a/MAINTAINERS b/MAINTAINERS index f22d83c178..9e3d8b1401 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2618,6 +2618,7 @@ R: Thomas Huth S: Maintained F: tests/qtest/fuzz/ F: scripts/oss-fuzz/ +F: hw/mem/sparse-mem.c F: docs/devel/fuzzing.rst =20 Register API diff --git a/hw/mem/meson.build b/hw/mem/meson.build index 0d22f2b572..ef79e04678 100644 --- a/hw/mem/meson.build +++ b/hw/mem/meson.build @@ -1,5 +1,6 @@ mem_ss =3D ss.source_set() mem_ss.add(files('memory-device.c')) +mem_ss.add(when: 'CONFIG_FUZZ', if_true: files('sparse-mem.c')) mem_ss.add(when: 'CONFIG_DIMM', if_true: files('pc-dimm.c')) mem_ss.add(when: 'CONFIG_NPCM7XX', if_true: files('npcm7xx_mc.c')) mem_ss.add(when: 'CONFIG_NVDIMM', if_true: files('nvdimm.c')) diff --git a/hw/mem/sparse-mem.c b/hw/mem/sparse-mem.c new file mode 100644 index 0000000000..575a287f59 --- /dev/null +++ b/hw/mem/sparse-mem.c @@ -0,0 +1,152 @@ +/* + * A sparse memory device. Useful for fuzzing + * + * Copyright Red Hat Inc., 2021 + * + * 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 "exec/address-spaces.h" +#include "hw/qdev-properties.h" +#include "hw/sysbus.h" +#include "qapi/error.h" +#include "qemu/units.h" +#include "sysemu/qtest.h" +#include "hw/mem/sparse-mem.h" + +#define SPARSE_MEM(obj) OBJECT_CHECK(SparseMemState, (obj), TYPE_SPARSE_ME= M) +#define SPARSE_BLOCK_SIZE 0x1000 + +typedef struct SparseMemState { + SysBusDevice parent_obj; + MemoryRegion mmio; + uint64_t baseaddr; + uint64_t length; + uint64_t size_used; + uint64_t maxsize; + GHashTable *mapped; +} SparseMemState; + +typedef struct sparse_mem_block { + uint8_t data[SPARSE_BLOCK_SIZE]; +} sparse_mem_block; + +static uint64_t sparse_mem_read(void *opaque, hwaddr addr, unsigned int si= ze) +{ + printf("SPARSEREAD %lx\n", addr); + SparseMemState *s =3D opaque; + uint64_t ret =3D 0; + size_t pfn =3D addr / SPARSE_BLOCK_SIZE; + size_t offset =3D addr % SPARSE_BLOCK_SIZE; + sparse_mem_block *block; + + block =3D g_hash_table_lookup(s->mapped, (void *)pfn); + if (block) { + assert(offset + size <=3D sizeof(block->data)); + memcpy(&ret, block->data + offset, size); + } + return ret; +} + +static void sparse_mem_write(void *opaque, hwaddr addr, uint64_t v, + unsigned int size) +{ + SparseMemState *s =3D opaque; + size_t pfn =3D addr / SPARSE_BLOCK_SIZE; + size_t offset =3D addr % SPARSE_BLOCK_SIZE; + sparse_mem_block *block; + + if (!g_hash_table_lookup(s->mapped, (void *)pfn) && + s->size_used + SPARSE_BLOCK_SIZE < s->maxsize && v) { + g_hash_table_insert(s->mapped, (void *)pfn, + g_new0(sparse_mem_block, 1)); + s->size_used +=3D sizeof(block->data); + } + block =3D g_hash_table_lookup(s->mapped, (void *)pfn); + if (!block) { + return; + } + + assert(offset + size <=3D sizeof(block->data)); + + memcpy(block->data + offset, &v, size); + +} + +static const MemoryRegionOps sparse_mem_ops =3D { + .read =3D sparse_mem_read, + .write =3D sparse_mem_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 8, + .unaligned =3D false, + }, +}; + +static Property sparse_mem_properties[] =3D { + /* The base address of the memory */ + DEFINE_PROP_UINT64("baseaddr", SparseMemState, baseaddr, 0x0), + /* The length of the sparse memory region */ + DEFINE_PROP_UINT64("length", SparseMemState, length, UINT64_MAX), + /* Max amount of actual memory that can be used to back the sparse mem= ory */ + DEFINE_PROP_UINT64("maxsize", SparseMemState, maxsize, 10 * MiB), + DEFINE_PROP_END_OF_LIST(), +}; + +MemoryRegion *sparse_mem_init(uint64_t addr, uint64_t length) +{ + DeviceState *dev; + + dev =3D qdev_new(TYPE_SPARSE_MEM); + qdev_prop_set_uint64(dev, "baseaddr", addr); + qdev_prop_set_uint64(dev, "length", length); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + sysbus_mmio_map_overlap(SYS_BUS_DEVICE(dev), 0, addr, -10000); + return &SPARSE_MEM(dev)->mmio; +} + +static void sparse_mem_realize(DeviceState *dev, Error **errp) +{ + SparseMemState *s =3D SPARSE_MEM(dev); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(dev); + + if (!qtest_enabled()) { + error_setg(errp, "sparse_mem device should only be used " + "for testing with QTest"); + return; + } + + assert(s->baseaddr + s->length > s->baseaddr); + + s->mapped =3D g_hash_table_new(NULL, NULL); + memory_region_init_io(&s->mmio, OBJECT(s), &sparse_mem_ops, s, + "sparse-mem", s->length); + sysbus_init_mmio(sbd, &s->mmio); +} + +static void sparse_mem_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + device_class_set_props(dc, sparse_mem_properties); + + dc->desc =3D "Sparse Memory Device"; + dc->realize =3D sparse_mem_realize; +} + +static const TypeInfo sparse_mem_types[] =3D { + { + .name =3D TYPE_SPARSE_MEM, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(SparseMemState), + .class_init =3D sparse_mem_class_init, + }, +}; +DEFINE_TYPES(sparse_mem_types); diff --git a/include/hw/mem/sparse-mem.h b/include/hw/mem/sparse-mem.h new file mode 100644 index 0000000000..f9863b154b --- /dev/null +++ b/include/hw/mem/sparse-mem.h @@ -0,0 +1,19 @@ +/* + * A sparse memory device. Useful for fuzzing + * + * Copyright Red Hat Inc., 2021 + * + * 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 SPARSE_MEM_H +#define SPARSE_MEM_H +#define TYPE_SPARSE_MEM "sparse-mem" + +MemoryRegion *sparse_mem_init(uint64_t addr, uint64_t length); + +#endif --=20 2.28.0 From nobody Sat May 18 19:24:30 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=1615677740; cv=pass; d=zohomail.com; s=zohoarc; b=hWuWf9nHpqhQTfccCVASeKn0ilXrbXZcBjlNxe0xOng7p2XhkFnZio+KabgUXf872hjvr861B3jou7iEyaRZbY9eX5LbkVq1gtUYf1H0Hccp5SECjB2nZbb2y544TV9joyfx+IefeBbhLo1i48AmEi1YWUP/QjZU/JuIhQFJiH0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615677740; 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=u3L0cjYgNt1bZpFJLlf05V2s9m4BLkZYW3OmbWinEg0=; b=PDdnlwYuf6XAEh8XPhWUP3ElcKnDJEXD4CSdThCTCDO55vUa6zwf6HASlphyhXFf+2ABE+c5w5MmqNUvLAKUtYk96XeAE58+cJiVKUxkF2u6namOBtRz3+9Hr3uuIbLsKuyFAZIb1jZdn78WSpTWo6UH+IXj4QsK0R+04xexEbo= 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 1615677740139929.522599700085; Sat, 13 Mar 2021 15:22:20 -0800 (PST) Received: from localhost ([::1]:42156 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lLDaM-0007XM-NV for importer@patchew.org; Sat, 13 Mar 2021 18:22:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55242) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lLDY5-000674-8Y for qemu-devel@nongnu.org; Sat, 13 Mar 2021 18:19:57 -0500 Received: from mail-mw2nam10on2091.outbound.protection.outlook.com ([40.107.94.91]:5920 helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lLDY3-0002Tn-UW for qemu-devel@nongnu.org; Sat, 13 Mar 2021 18:19:57 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) by SN6PR03MB4446.namprd03.prod.outlook.com (2603:10b6:805:f6::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.31; Sat, 13 Mar 2021 23:19:13 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::dda8:67d8:8d23:74c6]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::dda8:67d8:8d23:74c6%6]) with mapi id 15.20.3912.031; Sat, 13 Mar 2021 23:19:13 +0000 Received: from stormtrooper.vrmnet (72.74.210.193) by MN2PR10CA0020.namprd10.prod.outlook.com (2603:10b6:208:120::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32 via Frontend Transport; Sat, 13 Mar 2021 23:19:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BeucYoUUMchb/u6CBGAPsnmttULcsDh19+zCMEcpMYrVdNbWiN6JoHBPyl8hNyJD5FwISu5Af2eURoPoWEnnu2VbXXydLefwrVAx4yiBIPPx9FUciBPfE7FhBJiV5F7qOHYgL1Tr2nev96eDhW067Pa6M/QPMkTjP62Sx8JZoQlmbACBesafXyum7HgedbtyshwpPuXIT+zvKNxd4NQyqwAAtg5V3ZTbqIMu8I4psqBI1QXzxf3l2KmZavq2xAMo/CxkXqKLwCpVo86CrZrx1Ml1fAuauhaZzkxHHVWZnRo8+NGZbDcU723W8fXCmbmQDcp1YbCm0LqqI+3QC6aqqQ== 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=u3L0cjYgNt1bZpFJLlf05V2s9m4BLkZYW3OmbWinEg0=; b=IsOT4MeFZJE3Drchg9lmdwY8Fw7CY5yiCjRfRi8NaVAF14dvVnbEzE21aU9flSuZvepaNe5XsxTmGbOmrJch1hGDyXaHSdRD1EKByiIpEE12JNZHyWlQ1YTHPmuN+hPsL8GjmIhPIdpD4tRq55bTZ8EBtncI2wif6+8nO7LxAVVJEYB3UVmloIPz2+eOPdWApnB/hShzoxckl36zmQF9A9Ro87Xj8jKA+NLF6rVO3qy09rgGyLkw1bp+1ks1KkFpRzPdlZeoeFm48RhAvuiUPBEEl0hMWNYXUAEROgoP3AtmYe7GpHqYGqPteQ8tM6U50LjuVmhhtVIwL2koeVkcPg== 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=u3L0cjYgNt1bZpFJLlf05V2s9m4BLkZYW3OmbWinEg0=; b=bm4AHdq+9u08JBLdvttQBSxO/MngkTeSMg0ECDrHtXOGrbAkZIhS6ZRQ9DsBIKFFJ2XrbDDd+8hRx/TUyS8GCxKxvs9ApMb+1fJ33GAcR7yU/Icu8ieM/ZWsqqbN9vDoVRvyXkqTXM7VqSFXXpzrQy9041ucpkfsUMi0rnKWrxQ= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bu.edu; From: Alexander Bulekov To: qemu-devel@nongnu.org Subject: [PATCH v2 2/3] fuzz: configure a sparse-mem device, by default Date: Sat, 13 Mar 2021 18:18:58 -0500 Message-Id: <20210313231859.941263-3-alxndr@bu.edu> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210313231859.941263-1-alxndr@bu.edu> References: <20210313231859.941263-1-alxndr@bu.edu> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [72.74.210.193] X-ClientProxiedBy: MN2PR10CA0020.namprd10.prod.outlook.com (2603:10b6:208:120::33) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4cd530bf-c1f7-40ca-a010-08d8e6766a39 X-MS-TrafficTypeDiagnostic: SN6PR03MB4446: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:298; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: a8ajRHpDkPCyQ8ofanNCQ874YyEqdGKnFT3EjgxC0vR7GAev7wzG0PZJLy7CEZqUiLKZD+v+IWJoA8CmshHaMihl98sK3k3uCeSYl9EsYJ8zURwWdG/Vzswo3dfnxOCxDM1J7USmqJUv0kQkQ6e8IMiCx9VG+ruvYEwRNWnmsksYMrUlHKiOUcp5EGLTT0WEwaGQ6hcCLtSluD25dyHp5MGailzhMcjFE6YV2gWuUT7wHdPxD1RcTdpr7OFNxNv7xjm7+h0kWzFUy73im/N8mDgaJ5QB2+Katn+9CnwH4tSrzmtVyvhwR8SP5QpTeAV4GxA4E7jMdUp+WQDzlxOcig2E3G//TYrmy+gZl+uHfz75YZR20ZbOmlfhzD2wnHXeC6LTo/SNBhoVFcz7LbCUVTfhkwVy9dTpxw7ZhMEwh6cXn3kcZN0YHI3LlGAm7hA7DBKSuk0Dltln7wUUlY8JsC38dkTFkwDCzIb/CNjI8OCsNcTTxAboG8KOE2zTk6ud2Zn176YwmtqS6DnJHFiEqXHOwnrEZTGVP3uggjdFsL6WPJfnc7LvU9EVto8HU5Cj X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR03MB3871.namprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(376002)(396003)(39860400002)(366004)(346002)(478600001)(2616005)(86362001)(8676002)(6916009)(6506007)(956004)(36756003)(786003)(54906003)(6486002)(316002)(2906002)(6666004)(4326008)(186003)(52116002)(6512007)(26005)(16526019)(8936002)(66556008)(66946007)(5660300002)(66476007)(83380400001)(1076003)(75432002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?f1vNWNzzVHQP1U4n10ccSOL4XRj9D7rEgKhv72UTLJ4MHiS//UvdoWuY3SiS?= =?us-ascii?Q?cLRKTrpi5x7lBXRpShn06Nv6JDEM/+u69ixXNFrAWFJtNAxBVHFPzPZ0hWRL?= =?us-ascii?Q?gUFFi8jqmY/v0Sst3A+fCSQ4+soMtdN+rhHxf1A/i4LNcIX2ZGBodclG7TAm?= =?us-ascii?Q?USYN2vHaZREhVVe6J1EfoO+XdxVJAiCYYNiGoedebyr30G/pdLOzBlgb1XtK?= =?us-ascii?Q?RZVeUjgi8MKyF6CGDgNs4n+hZTL4Fn4LIpnjbc3ZQx3Qcq0aI0IydAMLZlpx?= =?us-ascii?Q?fjtERmGsB8YBd60igRy77aYA7vt5aLl0NJ9UTjVLbAsaHpWHDO6e/vy7fas8?= =?us-ascii?Q?2sfh8SKmY4sROZOws315RsGIW9cJPP+zFTYXmkasDw425gyC5lOaoBLgQJfX?= =?us-ascii?Q?2sz+vn/IDozSn+UOinwJgLmX7w8h0L7KskFfXqimpvYcSNCEuzAM3aHAwMje?= =?us-ascii?Q?lX5lHT4GdcduY8BCKaofCZq/FQ87C/X9aHrZITI9o+N0lqYTZfNTVlZKrk7I?= =?us-ascii?Q?GVLVtd3nBUNWyZsfg6Qa7nzfHyR9QAEsUvDALkdIz4nAFQPvyTM+/cUmvZbG?= =?us-ascii?Q?fnCY4fVyq89lpKf/jUvNEwf1yq0CfdiWa6342RBZUp+gIxvYgXof90oqSh4Z?= =?us-ascii?Q?AP7VD62WsahdW9Of3MYPGUxqx3pICVg6ndNNGam9xdkTlBgTd2E6q7fCmqyS?= =?us-ascii?Q?FnHAq9jcSxdiDRpkNAR4dL+Aehm2OwxzoPWKMYModpJoKPELtx5M6x6lbqUL?= =?us-ascii?Q?wHZZ8+HhZ6JtNyHBOmt2Qc8pYBi7QDGadOFpsgvU0lPa9RuZPeLmAFSRl8SA?= =?us-ascii?Q?597puXabCt4N2X/4uZrMEzkD+ZB7Mh3HkY5nuWpELphJD/IpIlfocW7M7t7Q?= =?us-ascii?Q?64aWkjNqUtAmYtmjeyWTda8YcUkp/BaQpmD3J9hrH4cH/9EjzhHCpXc3/nZN?= =?us-ascii?Q?YNpNRgUVKXyWGQkw1CPfE+WHwAxYy9AYcHnPd1vGOkmz/TrBonoyeGdgdx58?= =?us-ascii?Q?kVBSONrSqiN+E0kt1bK2d5Mpgfs0PP2naxc5cn83Qpm0GL2dQAagrdctjBdM?= =?us-ascii?Q?Sui4/9+CoHE+ywVVWgxW67B593/H46zlNrit2Mc/gXLjdY1JhKP4PeEI2a3P?= =?us-ascii?Q?iU3DTJNrdQ1F/DnGcR7MO0vApz3MdVL9ICwITozqcavrWa2mrwKBytvTl8+6?= =?us-ascii?Q?ldrFhvcc4AeYV9l1gUGnQ+iR4LTwAwgNnaoYV/kt6ygcG0dO+5GJ1rvQm+ii?= =?us-ascii?Q?1TKsEEZTk7lpzLiYMnGrq4W066LdPFJtFSDrnCg65x/UqhCsyMAwHM7ApyYT?= =?us-ascii?Q?sX5GRWKUcY7pl1HEc6DyC7PB?= X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 4cd530bf-c1f7-40ca-a010-08d8e6766a39 X-MS-Exchange-CrossTenant-AuthSource: SN6PR03MB3871.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2021 23:19:13.7103 (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: MLVEuq4ahAaqacEAipE1TGM+o+rRqPSRRhvcFV6mlVzMU8g9fHPhwEiN0eTHnv6r X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4446 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.94.91; envelope-from=alxndr@bu.edu; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HK_RANDOM_ENVFROM=0.001, HK_RANDOM_FROM=0.999, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Thomas Huth , darren.kenny@oracle.com, f4bug@amsat.org, Alexander Bulekov , 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 generic-fuzzer often provides randomized DMA addresses to virtual-devices. For a 64-bit address-space, the chance of these randomized addresses coinciding with RAM regions, is fairly small. Even though the fuzzer's instrumentation eventually finds valid addresses, this can take some-time, and slows-down fuzzing progress (especially, when multiple DMA buffers are involved). To work around this, create "fake" sparse-memory that spans all of the 64-bit address-space. Adjust the DMA call-back to populate this sparse memory, correspondingly Signed-off-by: Alexander Bulekov Reviewed-by: Darren Kenny --- tests/qtest/fuzz/generic_fuzz.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuz= z.c index 387ae2020a..b5fe27aae1 100644 --- a/tests/qtest/fuzz/generic_fuzz.c +++ b/tests/qtest/fuzz/generic_fuzz.c @@ -28,6 +28,7 @@ #include "hw/pci/pci.h" #include "hw/boards.h" #include "generic_fuzz_configs.h" +#include "hw/mem/sparse-mem.h" =20 /* * SEPARATOR is used to separate "operations" in the fuzz input @@ -64,6 +65,8 @@ static useconds_t timeout =3D DEFAULT_TIMEOUT_US; =20 static bool qtest_log_enabled; =20 +MemoryRegion *sparse_mem_mr; + /* * A pattern used to populate a DMA region or perform a memwrite. This is * useful for e.g. populating tables of unique addresses. @@ -191,8 +194,7 @@ void fuzz_dma_read_cb(size_t addr, size_t len, MemoryRe= gion *mr) */ if (dma_patterns->len =3D=3D 0 || len =3D=3D 0 - || mr !=3D current_machine->ram - || addr > current_machine->ram_size) { + || (mr !=3D current_machine->ram && mr !=3D sparse_mem_mr)) { return; } =20 @@ -238,7 +240,7 @@ void fuzz_dma_read_cb(size_t addr, size_t len, MemoryRe= gion *mr) MEMTXATTRS_UNSPECIFIED); =20 if (!(memory_region_is_ram(mr1) || - memory_region_is_romd(mr1))) { + memory_region_is_romd(mr1)) && mr1 !=3D sparse_mem_mr) { l =3D memory_access_size(mr1, l, addr1); } else { /* ROM/RAM case */ @@ -814,6 +816,12 @@ static void generic_pre_fuzz(QTestState *s) } qts_global =3D s; =20 + /* + * Create a special device that we can use to back DMA buffers at very + * high memory addresses + */ + sparse_mem_mr =3D sparse_mem_init(0, UINT64_MAX); + dma_regions =3D g_array_new(false, false, sizeof(address_range)); dma_patterns =3D g_array_new(false, false, sizeof(pattern)); =20 --=20 2.28.0 From nobody Sat May 18 19:24:30 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=1615677740; cv=pass; d=zohomail.com; s=zohoarc; b=hoMyg/vGs8v6gcZzXPGu6ax2bPjlKXH+R3Y1SbOaNM19xE1MYPoj4AN1MdRwrP8SdU/IAp0nPnSFpSCO0SASJqnRkWBuXqpztXXPXHzNexMZ7XCDMv7dYNYk84t5IyEzncklgZH4uJTcUJ4p5jk4Lf3bR+AIQ4nc7qKisBVOS+4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615677740; 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=WdOYX4cjbKQxdwbRlvK+GzGKEb9KVd6iBI+IPwJI2U8=; b=AFvfjLDVSvdf17j9m3MCIw822UO2E3062yikyllSwucYO3g8Ei/T4EdGbHUzY7q/kz8u5cbgEznvudpnmEuNEhTbnz9mF7bG0M98zBLqxrNcNCCi/hsVWR0x9ypTjRo5wD0z2Ja+H3tevu31LqCOD7gqK86CucCK2nokOF4uLiI= 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 1615677740865717.9139270313775; Sat, 13 Mar 2021 15:22:20 -0800 (PST) Received: from localhost ([::1]:42262 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lLDaN-0007a3-QW for importer@patchew.org; Sat, 13 Mar 2021 18:22:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55254) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lLDY7-00068O-1J for qemu-devel@nongnu.org; Sat, 13 Mar 2021 18:19:59 -0500 Received: from mail-mw2nam10on2091.outbound.protection.outlook.com ([40.107.94.91]:5920 helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lLDY5-0002Tn-KC for qemu-devel@nongnu.org; Sat, 13 Mar 2021 18:19:58 -0500 Received: from SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) by SN6PR03MB4446.namprd03.prod.outlook.com (2603:10b6:805:f6::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.31; Sat, 13 Mar 2021 23:19:14 +0000 Received: from SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::dda8:67d8:8d23:74c6]) by SN6PR03MB3871.namprd03.prod.outlook.com ([fe80::dda8:67d8:8d23:74c6%6]) with mapi id 15.20.3912.031; Sat, 13 Mar 2021 23:19:14 +0000 Received: from stormtrooper.vrmnet (72.74.210.193) by MN2PR10CA0020.namprd10.prod.outlook.com (2603:10b6:208:120::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32 via Frontend Transport; Sat, 13 Mar 2021 23:19:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gl1jeKr8C4Fasm+LF5IIWec/exiLrLuSjXVCZdZ0NEH5ACk9GHEjkq83uDAyKsbWJ/tzAdS189BZc6pxHHdeP4liUWX2LKhldW9LUw3o2UXaNAfJhVCtg1LJfBON8xPWBIgZRdvuA7KeEhjx5YpZSl54n1MyaOrqDc8SVFNFnkbBvu+L9W+QAnbJTJ5HJgCte5+cxREVKWkSl5SgPPcJ0OqI0qWmg6YwtcTO52pZMq2IkpDZ2viWXj5UCf6aoUKYxe9fSS44RfRM3Hk34uTTr7dMjQgcnRCcINilUGOxlshK4Xa3zSf8mzjUUl8HQPZgOkCYixenbAGsWxMibZ3WTg== 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=WdOYX4cjbKQxdwbRlvK+GzGKEb9KVd6iBI+IPwJI2U8=; b=Xo2H0vk3Lmuefn6J0GiRHyr7ex0QKxnSKdZmbctT1iaYi+aAZL42mTQl9sPNlKM8qLZVSjjQ7yMi8qZ0XdN/KCYjwkOYZ9m+AO0WrEV1KCNHv/8LsGGUQzQ64NykSRddIRUtogrsZkOm7cTovMEuT1qTjECDW8YvB1yvLB9SSTOJ8zTBbq1EdlQUoiONsLJoaMJPQaY3bDMh4rDWvF7Nkfedof37kx6x+J0001HmKrodVDTRz+ga4opuFUvD5E1RRNM08kjMZccyqir5vrUB5RCLCvc0F1mHaBm5xbN62t5AYQ3AtO5jwxaIANZyrkHk3DPwteSzyDnMOZjzi2DanA== 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=WdOYX4cjbKQxdwbRlvK+GzGKEb9KVd6iBI+IPwJI2U8=; b=MSq3eZvyjmSxGFUcZr3e1fC02mn6msF+Xu+0QrvN6wRPAKPjNwKBAMNMfeBwkfmcvxjRuldEYLPoPoSMgdW1170C0rljCStkVUad9UH8cgX1gV/wGxAHLPtNRGWRrDn5iCOqIGz2dAOxtupKZhy/RqK1UBlQooIXG/89zNazA3E= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=bu.edu; From: Alexander Bulekov To: qemu-devel@nongnu.org Subject: [PATCH v2 3/3] fuzz: move some DMA hooks Date: Sat, 13 Mar 2021 18:18:59 -0500 Message-Id: <20210313231859.941263-4-alxndr@bu.edu> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210313231859.941263-1-alxndr@bu.edu> References: <20210313231859.941263-1-alxndr@bu.edu> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [72.74.210.193] X-ClientProxiedBy: MN2PR10CA0020.namprd10.prod.outlook.com (2603:10b6:208:120::33) To SN6PR03MB3871.namprd03.prod.outlook.com (2603:10b6:805:6d::32) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2b00ccaf-e018-4a96-f528-08d8e6766ac7 X-MS-TrafficTypeDiagnostic: SN6PR03MB4446: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4714; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Jy78UWwcdzrepzD+vwqm54cbVw81/C6qM4nTlmCd6r69C2+tx3CmF1WvKBBt0VKILcZgA/S+YhnUe+rALrpDnhDCSSY9vYKJhy9NZiKao/V96SgpNac9wF/tDX/s5bLnqJ5J7rLFycGQi/+oG9Vl8TBMhZFQUzq49AbA7N/dvH6ehmsqQJgeMT8i/lDdoQx622K3NzbxihlBMJkKUJZC/WPeAGuqo0qNKieIPnWOF+wMQU4u5q5Exs/1YWTsDZ8oBZ8YnrBEBah8rjl/mS+kQ16oDWiWg09FqBOJj1aMNFaYYtytW66VtsfU8PTr6DXU1O13B4mCvQoFYuF71dNUJEAurXnBbBjg8qj1U8p0Ivv8dHcPiLlWLSGcLqWBL9JHl4QK+YYjZIMOjmHLK8mcLN/aRK2YVYTgIYUNa50erWN9aTXvYDStb8rzHlbyVCM7BuFqIUtwSAQ4TiSo/2Wi1RPbIUFvHv8h1x8jS5ahKwYowij+Uraz/KxPxQJm2FELHzUvVPo/++rbVG/UNUBRVBcTEejKDxmFZHlkJPatqVa1PFOXCvdct/oRk2z+7Noz X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR03MB3871.namprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(376002)(396003)(39860400002)(366004)(346002)(478600001)(2616005)(86362001)(8676002)(6916009)(6506007)(956004)(36756003)(786003)(6486002)(316002)(2906002)(6666004)(4326008)(186003)(52116002)(6512007)(26005)(16526019)(8936002)(66556008)(66946007)(5660300002)(66476007)(83380400001)(1076003)(75432002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?rj3koCdkiVakKk9zt1kl8AGn/qo4BQh4fFADqaGUhN8pgJDoznOq72hk2fqE?= =?us-ascii?Q?rVJmSdn3IWirW9Y+wTKb4xgioG+m7e1a6aDtaqH65d9KlUtXsM5KNu9x001N?= =?us-ascii?Q?jfwOkhjzpyHikDs6vR7uqp6cxv38Zuca2GG1ERKCljQVRI/0N/LF53GRehKY?= =?us-ascii?Q?WexkeVBJHYgvonbVYaxqoGDK74dkzXn3XcpXEc0EhJbM2BWWFr3bJBmAHsSI?= =?us-ascii?Q?+mEobxEVPA2YuO/8bzI3J2OVcEgB2R98EKcnppcSljjs5RUEj4EzKWKXKOet?= =?us-ascii?Q?dNYoD3gR5dTAcv96NQePZJP1HvdaEZicVwgX9XhzQeF74IDI3fPUvSF0iuxs?= =?us-ascii?Q?DTMQQwtvyZvMsHqOB/Wqkt6mhTBZhEb/ow5O3zl5efzoEx9nHeUUMtiO/n/C?= =?us-ascii?Q?uAOEepUokaBp0kcVggAklGAAsTvWbnb84xARLVh39sdNYAoJE+i6Z1vjhO1K?= =?us-ascii?Q?StRKJzuNR05Bnm/rP0Gi7OS0gmtXnylnyEshQlkDwgrIuXRQrP3CUd7xsvqe?= =?us-ascii?Q?4vu3TSWFUp7omwiyCfULvimYJbTCLOkbLKuGxM2Heiftkei45Pwzi0Im2DuR?= =?us-ascii?Q?CpEL4iy5DrCPFJJgIZsR6lMka1mfuRR6jMIeuhgQqzB3ChWl13HqxmSFQi82?= =?us-ascii?Q?jbnhBUlzAykgyAOIJ+QZDIVRU+A0iplzXRxJbLyLFnwZ7ntBYp98zMnyYRT9?= =?us-ascii?Q?U1EVFjXSXUOZVcEfEIODF9yW8tjUuKW32vjYIan/ziiG2fpZ+njDiUnrDNCL?= =?us-ascii?Q?xVwW2zaHeWrgVVcRyGbbm0LSdA/6hVfcTtTN0iFTHnfpiw+OAJpJgpBkOxmp?= =?us-ascii?Q?qO40bvVM1OUsfJb24QKx7pKxz7U5s4/CRuX0Ap3IOzEIHqU8wMoy/+zLfR5s?= =?us-ascii?Q?srXUNGQsagvQ6WbmNBGp3kc3GBKhMyzCmhEeuwvOLoT+7U7/5Pd96Qh6F7Q7?= =?us-ascii?Q?/6nr2WEBXRPec+kfKgRpnXBAec7T+JsTe1yS7KSDNBq84U/I/3pp0e2DBACb?= =?us-ascii?Q?sIbWFL8chG5lFctljUsEW/BoWr/dGSPLkFE3K4gGjiDMOnOmln2URg6BRBK0?= =?us-ascii?Q?gow9ovgKMlF8zu1jDmUPt305PecfaAZJBD9qj4DhoRHCGevzhAhBqedTxkKK?= =?us-ascii?Q?Jea+zB4OUjsyuJr3cxbtoLupvwTZpD+3uafhVS9J0SW78lKmdA0MI2ulNMim?= =?us-ascii?Q?dfv8CngNY+6nzT8HU5CsuPLDnR8xWl2g3d6ZhIBCzjrWle7hf/CDZA9ZDn/K?= =?us-ascii?Q?WjhNjB4xYQJ2KVnfW9OM5WsH/F8eXN6A0l6n/7oxh0SpBu4eDIvCnMDSTNK6?= =?us-ascii?Q?42M/uUCjSbmG0qUHuKVuqBmN?= X-OriginatorOrg: bu.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 2b00ccaf-e018-4a96-f528-08d8e6766ac7 X-MS-Exchange-CrossTenant-AuthSource: SN6PR03MB3871.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2021 23:19:14.6570 (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: cgfsQvNRmuNina9o867rpP33BiBZvfdYPBs3lsuDfXdPRKbhbM41J1K+ftGurCbS X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR03MB4446 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=40.107.94.91; envelope-from=alxndr@bu.edu; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-Spam_score_int: -8 X-Spam_score: -0.9 X-Spam_bar: / X-Spam_report: (-0.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HK_RANDOM_ENVFROM=0.001, HK_RANDOM_FROM=0.999, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: darren.kenny@oracle.com, f4bug@amsat.org, Alexander Bulekov , 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" For the sparse-mem device, we want the fuzzer to populate entire DMA reads from sparse-mem, rather than hooking into the individual MMIO memory_region_dispatch_read operations. Otherwise, the fuzzer will treat each sequential read separately (and populate it with a separate pattern). Work around this by rearranging some DMA hooks. Since the fuzzer has it's own logic to skip accidentally writing to MMIO regions, we can call the DMA cb, outside the flatview_translate loop. Signed-off-by: Alexander Bulekov Reviewed-by: Darren Kenny --- softmmu/memory.c | 1 - softmmu/physmem.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/softmmu/memory.c b/softmmu/memory.c index 874a8fccde..3b8e428064 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -1440,7 +1440,6 @@ MemTxResult memory_region_dispatch_read(MemoryRegion = *mr, unsigned size =3D memop_size(op); MemTxResult r; =20 - fuzz_dma_read_cb(addr, size, mr); if (!memory_region_access_valid(mr, addr, size, false, attrs)) { *pval =3D unassigned_mem_read(mr, addr, size); return MEMTX_DECODE_ERROR; diff --git a/softmmu/physmem.c b/softmmu/physmem.c index 7e8b0fab89..6a58c86750 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -2831,6 +2831,7 @@ MemTxResult flatview_read_continue(FlatView *fv, hwad= dr addr, bool release_lock =3D false; uint8_t *buf =3D ptr; =20 + fuzz_dma_read_cb(addr, len, mr); for (;;) { if (!memory_access_is_direct(mr, false)) { /* I/O case */ @@ -2841,7 +2842,6 @@ MemTxResult flatview_read_continue(FlatView *fv, hwad= dr addr, stn_he_p(buf, l, val); } else { /* RAM case */ - fuzz_dma_read_cb(addr, len, mr); ram_ptr =3D qemu_ram_ptr_length(mr->ram_block, addr1, &l, fals= e); memcpy(buf, ram_ptr, l); } --=20 2.28.0