From patchwork Sat Jan 26 21:20:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel Thibault X-Patchwork-Id: 156681 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp1829171jaa; Sat, 26 Jan 2019 13:24:09 -0800 (PST) X-Google-Smtp-Source: ALg8bN7EFXurJnvfojNGRw6j1t/IiywX4zkXVxEMKsBtPQYFwSDkItQYWIetq9KUy0eMAm0JpWeR X-Received: by 2002:a05:6000:12c4:: with SMTP id l4mr15864144wrx.134.1548537849663; Sat, 26 Jan 2019 13:24:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548537849; cv=none; d=google.com; s=arc-20160816; b=SK5pQE5VLLhj7e/mm+IsEZwwbxOkJzum/tS6pf26FJNZAZrz3h4NzBC3T6dxE39F1J gXVC+Ev3DYsMBjf2erh9OaEyfW2/EV+tgPLczG6kF54x1a8xDQuHmUOs+Jp6+jSsE1/h Npoob3qRsNdyGD0Lcv9A0yQC11q5UZzGJMX+bYOyMdLMkxQ2bVA6DSEeeIeozZI+dOSK MbXIlTtdwnIZrtOiLdzh3wrE6RAuGk6qcbQCqjhOmUTHfcMZIbECgAdkqQx2PEzBiBzc YAKsn7D/4RPQ0QdkLxxLUqrfXHHrlKnNIx2/aZAFjGFbo/4h8qjBpXDfF7aJa/iJf7wT w2eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from; bh=KcCeF72dxSP15VPU3Umy6P5HvUDSDyyWy9IScFQfC/4=; b=lM5ydjZQZfKORPb0jiJJ3uQKFQmP5Q13NK52VT5FAue0zN2OcnUrd0zovWVB/hJOxO p7jdI9APNAn+8sg3pAjg3dYnAdVUx+xvNgYssFFC0KnjTL3kK3e5DqZszTWSGcJN8S63 BZfhj2jjW9pFXs9xSJOxPrcxCFmTz3U81L3HIj4jyqdgdJIIZZaUGlWJo6G9+k3Qmzw6 b8BdW8SrjWxwnt53YleqwhXBTVxMHPOZ6sgFXNRA7TeA3gHOlSKcrDxCczTPpX1ilJP0 kAEu+WZ8Mddg8/TkfR6sqWAwE8ARQdNO+Ynrpv63l/OU7r9wCw8g11BZxsqTZEsk0BZm GCfQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id r16si84141852wrr.211.2019.01.26.13.24.09 for (version=TLS1 cipher=AES128-SHA bits=128/128); Sat, 26 Jan 2019 13:24:09 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([127.0.0.1]:35749 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gnVQu-0001Di-N6 for patch@linaro.org; Sat, 26 Jan 2019 16:24:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59674) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gnVNC-0007Wq-Cu for qemu-devel@nongnu.org; Sat, 26 Jan 2019 16:20:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gnVNA-0004XI-Ac for qemu-devel@nongnu.org; Sat, 26 Jan 2019 16:20:17 -0500 Received: from hera.aquilenet.fr ([2a0c:e300::1]:60812) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gnVN9-0004Wl-Ve for qemu-devel@nongnu.org; Sat, 26 Jan 2019 16:20:16 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id A2ABB76E5; Sat, 26 Jan 2019 22:20:14 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at aquilenet.fr Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ec9xY9FTAS7i; Sat, 26 Jan 2019 22:20:13 +0100 (CET) Received: from function (lfbn-1-11161-124.w86-213.abo.wanadoo.fr [86.213.235.124]) by hera.aquilenet.fr (Postfix) with ESMTPSA id 89A1076E7; Sat, 26 Jan 2019 22:20:12 +0100 (CET) Received: from samy by function with local (Exim 4.92-RC4) (envelope-from ) id 1gnVN5-000340-JW; Sat, 26 Jan 2019 22:20:11 +0100 From: Samuel Thibault To: qemu-devel@nongnu.org Date: Sat, 26 Jan 2019 22:20:09 +0100 Message-Id: <20190126212010.11730-3-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190126212010.11730-1-samuel.thibault@ens-lyon.org> References: <20190126212010.11730-1-samuel.thibault@ens-lyon.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a0c:e300::1 Subject: [Qemu-devel] [PULL 2/3] 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: Peter Maydell , Samuel Thibault , stefanha@redhat.com, jan.kiszka@siemens.com Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell 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 Signed-off-by: Samuel Thibault --- slirp/ip6.h | 12 ++++++++++-- slirp/ip6_icmp.h | 20 +++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) -- 2.20.1 diff --git a/slirp/ip6.h b/slirp/ip6.h index 14e9c78735..1e3e329ce6 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; +}; /* * 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; +}; +/* + * 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) != 40); +QEMU_BUILD_BUG_ON(sizeof(struct ip6_pseudohdr) != 40); #endif diff --git a/slirp/ip6_icmp.h b/slirp/ip6_icmp.h index 32b0914055..2ad2b75e67 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) != 12); 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) != 20); struct ndp_na { /* Neighbor Advertisement Message */ #if G_BYTE_ORDER == 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) != 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) != 36); /* * 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) != 40); #define ICMP6_MINLEN 4 #define ICMP6_ERROR_MINLEN 8 From patchwork Sat Jan 26 21:20:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel Thibault X-Patchwork-Id: 156680 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp1828552jaa; Sat, 26 Jan 2019 13:22:55 -0800 (PST) X-Google-Smtp-Source: ALg8bN6okg9aKbHBHOH93mAdPdK+uP7a70Mt2nRVuSdNeYjATyGKMNWh8Do4K7+gSogY+OAIHuiB X-Received: by 2002:adf:f449:: with SMTP id f9mr16508504wrp.40.1548537775142; Sat, 26 Jan 2019 13:22:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548537775; cv=none; d=google.com; s=arc-20160816; b=JhZseMoJGyUwNJ12RaD0sdQp17e3KvxqodrKpO0LupsgZ/TM7EF60oQj/kdMOJXNA4 oakT0Mc6vstBGKWy+7e1jg1s+WcvYtvIOWNiRR+eZHzRjCeU+HM5FdH7zisH+cK9QLuN 93nhyj5jcw9UgucUf7AX1f/q7cK6i3fhjYmbCGjH9E01XtGI6M23d2rivRNVVzMb9qJz R/ZXbOHVIicjUMnyIlfNw/3IzbRfrSTmtXAuxTlLSxX+A5/tJ/skrg5JpbcH8rIx5xrv YpsFBKzo/e+6m1O+IE9OCDLK5Ju+aL5lz0xiYAFA7d7Dmi1BV8XQT2qZ4V2wpd0DvgNT QD6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from; bh=c37Oo6eLvoOcn14oMVc6NjO4Og2IlcGPMnzcEwlvs00=; b=eXUCYgwb/U2CqGJBkAJwHpISY02iR/DgwYBRhNW15h/54U/mMzpXr38vJAqkv90daM 6ThmwQbdjpvFASM6wBNq4hH9vCHZUWeONid8Z5NXZ0k3tPW1V06kGUrhRU2Z9rlSDI8A +eI907UaT4wTywaxN/CWE1FeCyuGUh9AubSnHOFu9PA1Of48Z5cT/lH+YCMUi4PzWFL+ i8+dySTVHiXWQaXtT2JWF7X/Bg3tf81i7Ispo2uOL++jdS98isEXjNNN3LVXHZB1RtfJ BwQ7TLu+XPBKQBQcb1R491WO0nXP5VB/W90WG5p8SzFvAvJ0GdclGtm3M3N4cvmPDy6F 7FNA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id x18si60688057wrg.339.2019.01.26.13.22.54 for (version=TLS1 cipher=AES128-SHA bits=128/128); Sat, 26 Jan 2019 13:22:55 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org" Received: from localhost ([127.0.0.1]:35738 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gnVPi-0008R2-3b for patch@linaro.org; Sat, 26 Jan 2019 16:22:54 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59667) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gnVNC-0007Wh-AB for qemu-devel@nongnu.org; Sat, 26 Jan 2019 16:20:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gnVNA-0004XQ-E0 for qemu-devel@nongnu.org; Sat, 26 Jan 2019 16:20:17 -0500 Received: from hera.aquilenet.fr ([2a0c:e300::1]:60786) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gnVNA-0004WS-7S for qemu-devel@nongnu.org; Sat, 26 Jan 2019 16:20:16 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id 80B8F76CF; Sat, 26 Jan 2019 22:20:13 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at aquilenet.fr Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WQq7DqvRVxm3; Sat, 26 Jan 2019 22:20:12 +0100 (CET) Received: from function (lfbn-1-11161-124.w86-213.abo.wanadoo.fr [86.213.235.124]) by hera.aquilenet.fr (Postfix) with ESMTPSA id 66D1876E4; Sat, 26 Jan 2019 22:20:12 +0100 (CET) Received: from samy by function with local (Exim 4.92-RC4) (envelope-from ) id 1gnVN5-000342-KL; Sat, 26 Jan 2019 22:20:11 +0100 From: Samuel Thibault To: qemu-devel@nongnu.org Date: Sat, 26 Jan 2019 22:20:10 +0100 Message-Id: <20190126212010.11730-4-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190126212010.11730-1-samuel.thibault@ens-lyon.org> References: <20190126212010.11730-1-samuel.thibault@ens-lyon.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a0c:e300::1 Subject: [Qemu-devel] [PULL 3/3] 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: Peter Maydell , Samuel Thibault , stefanha@redhat.com, jan.kiszka@siemens.com Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Peter Maydell 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 Signed-off-by: Samuel Thibault --- slirp/ip.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) -- 2.20.1 diff --git a/slirp/ip.h b/slirp/ip.h index 243b6c8b24..20614f3b53 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; +}; /* * 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) != + offsetof(struct ipasfrag, ipf_link)); #define ipf_off ipf_ip.ip_off #define ipf_tos ipf_ip.ip_tos