From nobody Fri Nov 7 11:24:08 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548183631153609.0488227055463; Tue, 22 Jan 2019 11:00:31 -0800 (PST) Received: from localhost ([127.0.0.1]:47358 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm1Hi-0006vX-5O for importer@patchew.org; Tue, 22 Jan 2019 14:00:30 -0500 Received: from eggs.gnu.org ([209.51.188.92]:46738) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm159-0004lz-Rp for qemu-devel@nongnu.org; Tue, 22 Jan 2019 13:47:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gm14m-0005Iw-EA for qemu-devel@nongnu.org; Tue, 22 Jan 2019 13:47:18 -0500 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:37254) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gm14l-0004jY-PO for qemu-devel@nongnu.org; Tue, 22 Jan 2019 13:47:08 -0500 Received: by mail-wr1-x442.google.com with SMTP id s12so28626985wrt.4 for ; Tue, 22 Jan 2019 10:46:19 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id o4sm94588594wrq.66.2019.01.22.10.18.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 Jan 2019 10:18:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BLFuyAs9vbLLhyt9rwFYibPswQ6baGcLx5+zX/if2KE=; b=CkhrtmRek0TXCpoCWqBzz6cY8E5t1FJlZg8poYZrx7a1AjRVuMv4zMClVaC9n+qaSW af4xSyN4zSnDeg5av5NmjeSGS90cSxRX/k7NP1KYdkPcQBynfYQzEEMq3Up8oEUlvyQY 6xDDc+jK24VK/Yj3aFDHUUA5J5xTWkD6/64M8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BLFuyAs9vbLLhyt9rwFYibPswQ6baGcLx5+zX/if2KE=; b=t/M1+OQiOph6xQUR8kDLy9Hl6EqusD78DQIhNz3U1+KelGumeriAliT4Ihal4PKvjB /3MABkK8RjFFuwbQJfd0x4XGLNd/HK/9++8hUtScJqTZ6vA5njUNVgi2FyCAslbmOjSg uW5EaX93Rc7/B18hCiAG90Ia4YJRXPFFyXw2BqwX/qpTysTQrBv9I3PmtcT6dGzUwDKK ZrVIAS/ji4Grkd06crNM5x82OPmQlwXufzsmQO24AMCMc9j4MYBlEerMjQXN1PvJ9l8O /uhCSnyKKBPSKmW5pblV6fRkkDxeeaHqpqgpa71wNWYi6F8W630ygha28Rw2fdy15Lj5 lBaw== X-Gm-Message-State: AJcUukd8LWvm4QRUWpqvZG60jNO8hAM6mD85LQN151/mHA4bq3MHARAY 55pIU1aIQWRYlX8ZeHWugcCPiXFafFXhbg== X-Google-Smtp-Source: ALg8bN6+X37NkiiHgcaAFEcjjqQEG78mKQ23V0H744G/VWQwrmweBTnpOG0bKVLbV3OyNkrNQ+dGlw== X-Received: by 2002:a5d:4ccb:: with SMTP id c11mr35883142wrt.241.1548181106165; Tue, 22 Jan 2019 10:18:26 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 22 Jan 2019 18:18:21 +0000 Message-Id: <20190122181822.1505-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190122181822.1505-1-peter.maydell@linaro.org> References: <20190122181822.1505-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PATCH 1/2] slirp: Avoid marking naturally packed structs as QEMU_PACKED X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Samuel Thibault , Jan Kiszka , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , patches@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Various ipv6 structs in the slirp headers are marked QEMU_PACKED, but they are actually naturally aligned and will have no padding in them. Instead of marking them with the 'packed' attribute, assert at compile time that they are the size we expect. This allows us to take the address of fields within the structs without risking undefined behaviour, and suppresses clang -Waddress-of-packed-member warnings. Signed-off-by: Peter Maydell Reviewed-by: Eric Blake --- slirp/ip6.h | 12 ++++++++++-- slirp/ip6_icmp.h | 20 +++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/slirp/ip6.h b/slirp/ip6.h index 14e9c787357..1e3e329ce6a 100644 --- a/slirp/ip6.h +++ b/slirp/ip6.h @@ -133,7 +133,7 @@ struct ip6 { uint8_t ip_nh; /* next header */ uint8_t ip_hl; /* hop limit */ struct in6_addr ip_src, ip_dst; /* source and dest address */ -} QEMU_PACKED; +}; =20 /* * IPv6 pseudo-header used by upper-layer protocols @@ -145,7 +145,15 @@ struct ip6_pseudohdr { uint16_t ih_zero_hi; /* zero */ uint8_t ih_zero_lo; /* zero */ uint8_t ih_nh; /* next header */ -} QEMU_PACKED; +}; =20 +/* + * We don't want to mark these ip6 structs as packed as they are naturally + * correctly aligned; instead assert that there is no stray padding. + * If we marked the struct as packed then we would be unable to take + * the address of any of the fields in it. + */ +QEMU_BUILD_BUG_ON(sizeof(struct ip6) !=3D 40); +QEMU_BUILD_BUG_ON(sizeof(struct ip6_pseudohdr) !=3D 40); =20 #endif diff --git a/slirp/ip6_icmp.h b/slirp/ip6_icmp.h index 32b0914055a..2ad2b75e676 100644 --- a/slirp/ip6_icmp.h +++ b/slirp/ip6_icmp.h @@ -48,12 +48,16 @@ struct ndp_ra { /* Router Advertisement Message */ uint16_t lifetime; /* Router Lifetime */ uint32_t reach_time; /* Reachable Time */ uint32_t retrans_time; /* Retrans Timer */ -} QEMU_PACKED; +}; + +QEMU_BUILD_BUG_ON(sizeof(struct ndp_ra) !=3D 12); =20 struct ndp_ns { /* Neighbor Solicitation Message */ uint32_t reserved; struct in6_addr target; /* Target Address */ -} QEMU_PACKED; +}; + +QEMU_BUILD_BUG_ON(sizeof(struct ndp_ns) !=3D 20); =20 struct ndp_na { /* Neighbor Advertisement Message */ #if G_BYTE_ORDER =3D=3D G_BIG_ENDIAN @@ -72,13 +76,17 @@ struct ndp_na { /* Neighbor Advertisement Message */ reserved_lo:24; #endif struct in6_addr target; /* Target Address */ -} QEMU_PACKED; +}; + +QEMU_BUILD_BUG_ON(sizeof(struct ndp_na) !=3D 20); =20 struct ndp_redirect { uint32_t reserved; struct in6_addr target; /* Target Address */ struct in6_addr dest; /* Destination Address */ -} QEMU_PACKED; +}; + +QEMU_BUILD_BUG_ON(sizeof(struct ndp_redirect) !=3D 36); =20 /* * Structure of an icmpv6 header. @@ -103,7 +111,9 @@ struct icmp6 { #define icmp6_nns icmp6_body.ndp_ns #define icmp6_nna icmp6_body.ndp_na #define icmp6_redirect icmp6_body.ndp_redirect -} QEMU_PACKED; +}; + +QEMU_BUILD_BUG_ON(sizeof(struct icmp6) !=3D 40); =20 #define ICMP6_MINLEN 4 #define ICMP6_ERROR_MINLEN 8 --=20 2.20.1 From nobody Fri Nov 7 11:24:08 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548182616466639.3289349550904; Tue, 22 Jan 2019 10:43:36 -0800 (PST) Received: from localhost ([127.0.0.1]:47055 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm11L-0000iE-BH for importer@patchew.org; Tue, 22 Jan 2019 13:43:35 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40453) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gm0zS-0007xU-D8 for qemu-devel@nongnu.org; Tue, 22 Jan 2019 13:41:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gm0zO-0001hT-GQ for qemu-devel@nongnu.org; Tue, 22 Jan 2019 13:41:36 -0500 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:40150) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gm0z9-0000sS-3w for qemu-devel@nongnu.org; Tue, 22 Jan 2019 13:41:24 -0500 Received: by mail-wr1-x444.google.com with SMTP id p4so28576619wrt.7 for ; Tue, 22 Jan 2019 10:39:31 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id o4sm94588594wrq.66.2019.01.22.10.18.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 Jan 2019 10:18:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nHl7eywGziHShEgliBUBA6fYWaXKXPyf6GkhBJ6XSZs=; b=WcqN9n58XCWWPVs1ta+7jPeo+0/HbxM7skTw/vf3yTsi1BjyJ72eIGahwOnTSEa009 luL1LJGfu/UEDZKYjRzpRHFVbafkfsNt1RSlQyS08IK+RDOi4glPmdazpUUlxhwJOnQX 6fYOFa1w9UXyeoiE+u4m9O2V3p6D/aNuLUsGk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nHl7eywGziHShEgliBUBA6fYWaXKXPyf6GkhBJ6XSZs=; b=fh3m7I2O1BFvRK0TWxgQZPq8WAZjVD73Fv89jGGc3EaicEFIcqD72xxG6kTfCYWmem 5Z5+8IBIU1WjvJwKl8PQ6dArVeFLlWuAu3SxKivD0Zn+iV5nVGlzp+5cYCuROOk5rCKR Y0zQu78Z/g4gHUpXfFqYHrCGh1TnGzX86QN8vLlF9a8E5lpbp7pjIXyNs0Kq9kDR1Uh7 bfnQUjkJIQAFmfVNX60MSZlSwtH5ZODElI79hl3OHYB6C7ugAPFvncnigXaF+NYlTAYR cNyk63qX5IBliPWFA/s6uYECdzGNcc3SBJSQ7GNKa+FVJ5uHtDnUtAqAf1opxZui9wH8 wMhQ== X-Gm-Message-State: AJcUukcAspDWeFaS1jsvfoi6Psvd7+50BwIPak33a0rOyXw2qvHvGX/h FFF4eiYDICXfincMV0mXsrDuBv2LwIjvJA== X-Google-Smtp-Source: ALg8bN5wW7qXA9CK2ChrGyYS5j0gk94aUfknKc4uQBzgnF+5KpaR32R7dNjiMZ5D1GXjiKO+1oyuMg== X-Received: by 2002:adf:cc91:: with SMTP id p17mr34640049wrj.118.1548181107424; Tue, 22 Jan 2019 10:18:27 -0800 (PST) From: Peter Maydell To: qemu-devel@nongnu.org Date: Tue, 22 Jan 2019 18:18:22 +0000 Message-Id: <20190122181822.1505-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190122181822.1505-1-peter.maydell@linaro.org> References: <20190122181822.1505-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH 2/2] slirp: Don't mark struct ipq or struct ipasfrag as packed X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Samuel Thibault , Jan Kiszka , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , patches@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" There is no reason to mark the struct ipq and struct ipasfrag as packed: they are naturally aligned anyway, and are not representing any on-the-wire packet format. Indeed they vary in size depending on the size of pointers on the host system, because the 'struct qlink' members include 'void *' fields. Dropping the 'packed' annotation fixes clang -Waddress-of-packed-member warnings and probably lets the compiler generate better code too. The only thing we do care about in the layout of the struct is that the frag_link matches up with the ipf_link of the struct ipasfrag, as documented in the comment on that struct; assert at build time that this is the case. Signed-off-by: Peter Maydell Reviewed-by: Eric Blake --- slirp/ip.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/slirp/ip.h b/slirp/ip.h index 243b6c8b249..20614f3b53e 100644 --- a/slirp/ip.h +++ b/slirp/ip.h @@ -217,7 +217,7 @@ struct ipq { uint8_t ipq_p; /* protocol of this fragment */ uint16_t ipq_id; /* sequence id for reassembly */ struct in_addr ipq_src,ipq_dst; -} QEMU_PACKED; +}; =20 /* * Ip header, when holding a fragment. @@ -227,7 +227,10 @@ struct ipq { struct ipasfrag { struct qlink ipf_link; struct ip ipf_ip; -} QEMU_PACKED; +}; + +QEMU_BUILD_BUG_ON(offsetof(struct ipq, frag_link) !=3D + offsetof(struct ipasfrag, ipf_link)); =20 #define ipf_off ipf_ip.ip_off #define ipf_tos ipf_ip.ip_tos --=20 2.20.1