From patchwork Tue Feb 5 16:58:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel Thibault X-Patchwork-Id: 157484 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp5406754jaa; Tue, 5 Feb 2019 09:07:34 -0800 (PST) X-Google-Smtp-Source: AHgI3IYYJjmZIVszVCI/OKIsobDk2Ujn2TMug97fwDQ+5S6kgSPRyycyhq65C1dOblV0ul032icG X-Received: by 2002:a25:7284:: with SMTP id n126mr5001435ybc.504.1549386454458; Tue, 05 Feb 2019 09:07:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549386454; cv=none; d=google.com; s=arc-20160816; b=l7VEgqSvnv+IzO6OZ0Szfz/TLnhuuj7beWWXoFPwArItZMwXMy3y1fTgChRCBr3EV5 8afhq/qpOTq3e5Gzu9QbdeilvvEO9ILKkdcBE/sTnnLFA8ifY7mq3HCSQhzRygvt5jll Lq0cAdIeblNkPuZkPynrVRbQ4iswHEX3XFi/qlN/dzDP7Af6d//MKBmLhaEfQ1WhG04B O2SUIZkE1nMbqXKmHyIwRxFao/4XjLS2XS2b/NbF0ioJ06hgCIOIGC/FoDPScGIUl4fu TsMDYBrfyJOJdDr9s42ogjSNPHRTyIEOCJrZGe2CfLIEURpEoj1Tt7bYfhAskuiGB2t2 8j+g== 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=g9+o5Sr659XbVFHDsEW/rX7lNoMZ9W72I087rt3xNsDKkPusjnoPfqmnXlIIEZoY/F aehwwrjs574ujeQUyX2ByM1Jlg50/tOK5Drt2fmuA9dNc2tntkROVhdNRvBLja3qN8cJ joscQSBS47xfaxgPxzA0YTDUfCwkXAHgT7uOY9DykXEoEZkLyi8pJgBAhMeVaXm4eSoq VW2n6Pb8aEibtMe251ZJR1SuUzykk2f2cX+gGvwtAe4Diax5EMNYsEw6+1k3C3eRtgOW sw5C5BAlJi/95EHdeBlBe2cQ3z4YNAkxnA/Tte5hqp02Q/4oaaatuJg/C8H9r8ue6r1c eIZQ== 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 k187si2192322ywb.343.2019.02.05.09.07.34 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 05 Feb 2019 09:07:34 -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]:35028 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gr4C5-0001th-Sp for patch@linaro.org; Tue, 05 Feb 2019 12:07:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:33068) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gr44d-0005ef-41 for qemu-devel@nongnu.org; Tue, 05 Feb 2019 11:59:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gr44a-0005sH-Vl for qemu-devel@nongnu.org; Tue, 05 Feb 2019 11:59:50 -0500 Received: from hera.aquilenet.fr ([2a0c:e300::1]:40370) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gr44X-0005lo-2a for qemu-devel@nongnu.org; Tue, 05 Feb 2019 11:59:45 -0500 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id BDD67C032; Tue, 5 Feb 2019 17:59:35 +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 fH9-Ng4X1fAQ; Tue, 5 Feb 2019 17:59:34 +0100 (CET) Received: from function (unknown [188.164.201.34]) by hera.aquilenet.fr (Postfix) with ESMTPSA id 3F4ACC031; Tue, 5 Feb 2019 17:59:31 +0100 (CET) Received: from samy by function with local (Exim 4.92-RC4) (envelope-from ) id 1gr44G-0006xJ-EJ; Tue, 05 Feb 2019 17:59:28 +0100 From: Samuel Thibault To: qemu-devel@nongnu.org, peter.maydell@linaro.org Date: Tue, 5 Feb 2019 18:58:57 +0200 Message-Id: <20190205165927.26599-3-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190205165927.26599-1-samuel.thibault@ens-lyon.org> References: <20190205165927.26599-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] [PULLv2 02/32] 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: jan.kiszka@siemens.com, stefanha@redhat.com, Samuel Thibault 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