From nobody Sat Apr 11 21:32:10 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1772712130; cv=none; d=zohomail.com; s=zohoarc; b=Dc362FeB1RwtacEP63uO1IxvEqN76cN0CCRsmPSmi/zOF7khIOpwqFlwJuSCU9ukemsgpEINUwf1BYdoPDj59JY5SVVfe8Th1wCzfaZW2pdGgjHk4h9nn37n2kBrrPGlDBklMrTkt5ojheYd52toF18wsozi4xvFpsNuptQVGQQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1772712130; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=El3/8uv1vuMwhH9zANUH1aO7uY2F8T5dU06KVqby91o=; b=lx5XsbshDxQYzpIzeKKgJgqzHUcV1hGlwPM4oHYbh86/2kmbDiizZrMNr8bvsqh6+8XwgUw2yP6kl6T17lxvLk+6S3i6W1YUDhH2PtqWynRAsVrUlWjYdZGMIxTpG1XkkJSmMQukrmxVFSkdB9oFTq+6sUiY8Psj5ixMGLxlvoM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1772712130388299.1334360367548; Thu, 5 Mar 2026 04:02:10 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vy7OU-0005c4-8p; Thu, 05 Mar 2026 07:01:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vy7OG-0005ad-2P for qemu-devel@nongnu.org; Thu, 05 Mar 2026 07:01:18 -0500 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vy7OA-00068P-Cv for qemu-devel@nongnu.org; Thu, 05 Mar 2026 07:01:15 -0500 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-48336a6e932so49686045e9.3 for ; Thu, 05 Mar 2026 04:01:07 -0800 (PST) Received: from lanath.. (wildly.archaic.org.uk. [81.2.115.145]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851fb33815sm73409455e9.12.2026.03.05.04.01.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 04:01:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1772712066; x=1773316866; darn=nongnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=El3/8uv1vuMwhH9zANUH1aO7uY2F8T5dU06KVqby91o=; b=phK/nA/N3ol34ebVJjIk9Je+8PECF38DtCd2Uwu81Kz3rredtEEyKSrDWVfULO4qL8 Be2huHThpq9oDGnpbKaiBq0CRgHh4En99ccfM0HExyRyVeKZtrNOk30RLOND3WPTb5RC 8FK80DfaN49QvlPp1joETXgkNtKvB8ajI1XpDbQiz5h4g4HKPaKXazGPHzj1yXlYlqc8 ah93bMlcQAfLmQlv1QWXkpkLbznf5MvN/X5viDGHUt22/3zoXk4Ct/rpwjU/uCFBcJWV K3Pm0X1ZBoJonR0qLJh6qLE8qvBAFWkx8KU81rLLQcGsMvQJsqEbC3bOMhRpilDURhRP G5mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772712066; x=1773316866; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=El3/8uv1vuMwhH9zANUH1aO7uY2F8T5dU06KVqby91o=; b=ZHtYFouXQAgyRDl7ED4IMKNahmF+YMbxX4vmxv3L5ateQpTtcGJ2sqM7QKRhgF1bux Tb5L6FlgB0V8gfliXxMKNWZ+owdreeVUu+WPKEJIIKN8fWO2R5yiTtix4wYK9O7YJTiq 9ByyexiQgR0YD0H53vPwjnHG+AsCKsN8XJiGeaTxzi3jirRyJQjU70MWxd69/5tHp/pc zo/jhHGysnbKlxfWucr8CxlnqfcKMz20YlCW8JVjXn8WdH83w8xG0u2lzeM2/VH/xsPO X6Y/bD5f28u2h26pi0B3re/lxhN4tpyYiVz0/E005syrAh6A1X1zlzsz4Wwygq04fMDv nKUg== X-Gm-Message-State: AOJu0Ywx6/StFkRxEI1pcMJirHVw7WwxFDqcsX4fJhNolikg8kRXJqkg B1TIB2Xvtde7K7J4AcSHG3RtHui8ZSHRbFiAbf9werRwhoXlC7SbwDxhXgZqBtNwXhDLraWLSG4 N83sV X-Gm-Gg: ATEYQzzBYiKAjloOVh7EB7plVieqkyO5tRdy9jawiPmS3kgBhT6e5A2oANOluV/Wc46 s9neMOdme5WGve5T6vCRWDGrLLSee2aIvBxC3uurqv3PKab8GDdzK8oliux8GF74nrSG/RyYYKt VpdBtPctnMDWqI4LYnjD2ToimTZlCsY5EL0KENkiGER0p0pKtddvdyEy71fxCM4TSYAC+B6jfap L3jKuDDi7JkC/G/1iZXaTmzHoikmHljReSMuWYZELJTuKBqL04xeC1W8kYrcQPR+p1ToytO0Ubn Zh9Ia5F2Stf5OHWhIrEU0f/x4jHyfgzIEkXpsJIRSdIQ1yD404U7oIL9Icuvkok7Z+cxavE7Eqq Jcc0OAcVSZ790M+LNoLAq8T4khkDu/LyYgmgytihoR5zQ8xol3xmQyfw/UvR3W2CSys0FZ+mpTg Elx/h/Kl/fXI5l27CdlgSuksXsP4PU/JK6AFxHsa+xCy4U/Yg96nbGLIEgS3R76A5PJOkcdXmoK /+HPCsIOGfc9bKWhFFln35I91QRL5U= X-Received: by 2002:a05:600c:4f8b:b0:483:71f7:2797 with SMTP id 5b1f17b1804b1-485198516bamr87976925e9.14.1772712066119; Thu, 05 Mar 2026 04:01:06 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , Pierrick Bouvier , Alexandre Iooss , Mahmoud Mandour Subject: [PATCH] tests/plugins/tcg/mem: Don't access unaligned memory Date: Thu, 5 Mar 2026 12:01:04 +0000 Message-ID: <20260305120104.1254578-1-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1772712132878154100 Content-Type: text/plain; charset="utf-8" In commit eb3f69cac62670 we removed the dependency of this mem plugin on the QEMU headers, but in doing that we introduced undefined behaviour when the plugin accesses unaligned memory. This shows up if you build with the gcc or clang address sanitizer and run 'make check-tcg', in numerous warnings like: ../../tests/tcg/plugins/mem.c:167:27: runtime error: load of misaligned add= ress 0x7f1f300354b1 for type 'uint16_t' (aka 'unsigned short'), which requi= res 2 byte alignment 0x7f1f300354b1: note: pointer points here 00 00 00 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14= 15 16 17 18 19 1a 1b 1c ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../../tests/tcg/plu= gins/mem.c:167:27 Fix this by rearranging the data reads and writes to use memcpy() instead. Fixes: eb3f69cac62670 ("tests/tcg/plugins/mem.c: remove dependency on qemu = headers") Signed-off-by: Peter Maydell Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Pierrick Bouvier Tested-by: Alex Benn=C3=A9e --- tests/tcg/plugins/mem.c | 71 +++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 41 deletions(-) diff --git a/tests/tcg/plugins/mem.c b/tests/tcg/plugins/mem.c index 7d64e7018f..f3992abc8f 100644 --- a/tests/tcg/plugins/mem.c +++ b/tests/tcg/plugins/mem.c @@ -123,6 +123,9 @@ static void update_region_info(uint64_t region, uint64_= t offset, bool is_store =3D qemu_plugin_mem_is_store(meminfo); RegionInfo *ri; bool unseen_data =3D false; + void *val_ptr; + unsigned int val_size; + qemu_plugin_mem_value swapped_value; =20 g_assert(offset + size <=3D region_size); =20 @@ -144,61 +147,46 @@ static void update_region_info(uint64_t region, uint6= 4_t offset, } =20 void *ri_data =3D &ri->data[offset]; + + swapped_value.type =3D value.type; switch (value.type) { case QEMU_PLUGIN_MEM_VALUE_U8: - { - uint8_t val =3D value.data.u8; - uint8_t *p =3D ri_data; - if (is_store) { - *p =3D val; - } else { - unseen_data =3D *p !=3D val; - } + swapped_value.data.u8 =3D value.data.u8; + val_ptr =3D &swapped_value.data.u8; + val_size =3D 1; break; - } case QEMU_PLUGIN_MEM_VALUE_U16: - { - uint16_t val =3D be ? GUINT16_FROM_BE(value.data.u16) : - GUINT16_FROM_LE(value.data.u16); - uint16_t *p =3D ri_data; - if (is_store) { - *p =3D val; - } else { - unseen_data =3D *p !=3D val; - } + swapped_value.data.u16 =3D be ? GUINT16_FROM_BE(value.data.u16) : + GUINT16_FROM_LE(value.data.u16); + val_ptr =3D &swapped_value.data.u16; + val_size =3D 2; break; - } case QEMU_PLUGIN_MEM_VALUE_U32: - { - uint32_t val =3D be ? GUINT32_FROM_BE(value.data.u32) : - GUINT32_FROM_LE(value.data.u32); - uint32_t *p =3D ri_data; - if (is_store) { - *p =3D val; - } else { - unseen_data =3D *p !=3D val; - } + swapped_value.data.u32 =3D be ? GUINT32_FROM_BE(value.data.u32) : + GUINT32_FROM_LE(value.data.u32); + val_ptr =3D &swapped_value.data.u32; + val_size =3D 4; break; - } case QEMU_PLUGIN_MEM_VALUE_U64: - { - uint64_t val =3D be ? GUINT64_FROM_BE(value.data.u64) : - GUINT64_FROM_LE(value.data.u64); - uint64_t *p =3D ri_data; - if (is_store) { - *p =3D val; - } else { - unseen_data =3D *p !=3D val; - } + swapped_value.data.u64 =3D be ? GUINT64_FROM_BE(value.data.u64) : + GUINT64_FROM_LE(value.data.u64); + val_ptr =3D &swapped_value.data.u64; + val_size =3D 8; break; - } case QEMU_PLUGIN_MEM_VALUE_U128: - /* non in test so skip */ - break; + /* none in test so skip */ + goto done; default: g_assert_not_reached(); } =20 + /* ri_data may not be aligned, so we use memcpy/memcmp */ + if (is_store) { + memcpy(ri_data, val_ptr, val_size); + } else { + unseen_data =3D memcmp(ri_data, val_ptr, val_size) !=3D 0; + } + /* * This is expected for regions initialised by QEMU (.text etc) but we * expect to see all data read and written to the test_data region @@ -213,6 +201,7 @@ static void update_region_info(uint64_t region, uint64_= t offset, ri->seen_all =3D false; } =20 +done: g_mutex_unlock(&lock); } =20 --=20 2.43.0