Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys icmp6: Remove __packed attribute from icmp6 structures



details:   https://anonhg.NetBSD.org/src/rev/636cc28463b7
branches:  trunk
changeset: 936458:636cc28463b7
user:      roy <roy%NetBSD.org@localhost>
date:      Mon Jul 27 14:52:55 2020 +0000

description:
icmp6: Remove __packed attribute from icmp6 structures

They should naturally align.
Add compile time assertations to icmp6.c to prove this.

diffstat:

 sys/netinet/icmp6.h  |  44 ++++++++++++++++++++++----------------------
 sys/netinet6/icmp6.c |  30 ++++++++++++++++++++++++++++--
 2 files changed, 50 insertions(+), 24 deletions(-)

diffs (248 lines):

diff -r 1839026f91cd -r 636cc28463b7 sys/netinet/icmp6.h
--- a/sys/netinet/icmp6.h       Mon Jul 27 14:17:47 2020 +0000
+++ b/sys/netinet/icmp6.h       Mon Jul 27 14:52:55 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: icmp6.h,v 1.56 2020/06/15 23:41:35 roy Exp $   */
+/*     $NetBSD: icmp6.h,v 1.57 2020/07/27 14:52:55 roy Exp $   */
 /*     $KAME: icmp6.h,v 1.84 2003/04/23 10:26:51 itojun Exp $  */
 
 
@@ -77,7 +77,7 @@
                u_int16_t       icmp6_un_data16[2]; /* type-specific field */
                u_int8_t        icmp6_un_data8[4];  /* type-specific field */
        } icmp6_dataun;
-} __packed;
+};
 
 #define icmp6_data32   icmp6_dataun.icmp6_un_data32
 #define icmp6_data16   icmp6_dataun.icmp6_un_data16
@@ -182,7 +182,7 @@
 struct mld_hdr {
        struct icmp6_hdr        mld_icmp6_hdr;
        struct in6_addr         mld_addr; /* multicast address */
-} __packed;
+};
 
 /* definitions to provide backward compatibility to old KAME applications */
 #ifndef _KERNEL
@@ -211,7 +211,7 @@
 struct nd_router_solicit {     /* router solicitation */
        struct icmp6_hdr        nd_rs_hdr;
        /* could be followed by options */
-} __packed;
+};
 
 #define nd_rs_type     nd_rs_hdr.icmp6_type
 #define nd_rs_code     nd_rs_hdr.icmp6_code
@@ -223,7 +223,7 @@
        u_int32_t               nd_ra_reachable;        /* reachable time */
        u_int32_t               nd_ra_retransmit;       /* retransmit timer */
        /* could be followed by options */
-} __packed;
+};
 
 #define nd_ra_type             nd_ra_hdr.icmp6_type
 #define nd_ra_code             nd_ra_hdr.icmp6_code
@@ -251,7 +251,7 @@
        struct icmp6_hdr        nd_ns_hdr;
        struct in6_addr         nd_ns_target;   /*target address */
        /* could be followed by options */
-} __packed;
+};
 
 #define nd_ns_type             nd_ns_hdr.icmp6_type
 #define nd_ns_code             nd_ns_hdr.icmp6_code
@@ -262,7 +262,7 @@
        struct icmp6_hdr        nd_na_hdr;
        struct in6_addr         nd_na_target;   /* target address */
        /* could be followed by options */
-} __packed;
+};
 
 #define nd_na_type             nd_na_hdr.icmp6_type
 #define nd_na_code             nd_na_hdr.icmp6_code
@@ -285,7 +285,7 @@
        struct in6_addr         nd_rd_target;   /* target address */
        struct in6_addr         nd_rd_dst;      /* destination address */
        /* could be followed by options */
-} __packed;
+};
 
 #define nd_rd_type             nd_rd_hdr.icmp6_type
 #define nd_rd_code             nd_rd_hdr.icmp6_code
@@ -296,7 +296,7 @@
        u_int8_t        nd_opt_type;
        u_int8_t        nd_opt_len;
        /* followed by option specific data*/
-} __packed;
+};
 
 #define ND_OPT_SOURCE_LINKADDR         1
 #define ND_OPT_TARGET_LINKADDR         2
@@ -332,7 +332,7 @@
        u_int32_t       nd_opt_pi_preferred_time;
        u_int32_t       nd_opt_pi_reserved2;
        struct in6_addr nd_opt_pi_prefix;
-} __packed;
+};
 
 #define ND_OPT_PI_FLAG_ONLINK          0x80
 #define ND_OPT_PI_FLAG_AUTO            0x40
@@ -344,14 +344,14 @@
        u_int16_t       nd_opt_rh_reserved1;
        u_int32_t       nd_opt_rh_reserved2;
        /* followed by IP header and data */
-} __packed;
+};
 
 struct nd_opt_mtu {            /* MTU option */
        u_int8_t        nd_opt_mtu_type;
        u_int8_t        nd_opt_mtu_len;
        u_int16_t       nd_opt_mtu_reserved;
        u_int32_t       nd_opt_mtu_mtu;
-} __packed;
+};
 
 #define        ND_OPT_NONCE_LEN        ((1 * 8) - 2)
 #if ((ND_OPT_NONCE_LEN + 2) % 8) != 0
@@ -361,7 +361,7 @@
        u_int8_t        nd_opt_nonce_type;
        u_int8_t        nd_opt_nonce_len;
        u_int8_t        nd_opt_nonce[ND_OPT_NONCE_LEN];
-} __packed;
+};
 
 struct nd_opt_rdnss {          /* RDNSS option RFC 6106 */
        u_int8_t        nd_opt_rdnss_type;
@@ -369,7 +369,7 @@
        u_int16_t       nd_opt_rdnss_reserved;
        u_int32_t       nd_opt_rdnss_lifetime;
        /* followed by list of IP prefixes */
-} __packed;
+};
 
 struct nd_opt_dnssl {          /* DNSSL option RFC 6106 */
        u_int8_t        nd_opt_dnssl_type;
@@ -377,7 +377,7 @@
        u_int16_t       nd_opt_dnssl_reserved;
        u_int32_t       nd_opt_dnssl_lifetime;
        /* followed by list of IP prefixes */
-} __packed;
+};
 
 /*
  * icmp6 namelookup
@@ -392,7 +392,7 @@
        u_int8_t        icmp6_nl_name[3];
 #endif
        /* could be followed by options */
-} __packed;
+};
 
 /*
  * icmp6 node information
@@ -401,7 +401,7 @@
        struct icmp6_hdr icmp6_ni_hdr;
        u_int8_t icmp6_ni_nonce[8];
        /* could be followed by reply data */
-} __packed;
+};
 
 #define ni_type                icmp6_ni_hdr.icmp6_type
 #define ni_code                icmp6_ni_hdr.icmp6_code
@@ -464,7 +464,7 @@
        u_int32_t ni_fqdn_ttl;  /* TTL */
        u_int8_t ni_fqdn_namelen; /* length in octets of the FQDN */
        u_int8_t ni_fqdn_name[3]; /* XXX: alignment */
-} __packed;
+};
 
 /*
  * Router Renumbering. as router-renum-08.txt
@@ -475,7 +475,7 @@
        u_int8_t        rr_flags;
        u_int16_t       rr_maxdelay;
        u_int32_t       rr_reserved;
-} __packed;
+};
 
 #define ICMP6_RR_FLAGS_TEST            0x80
 #define ICMP6_RR_FLAGS_REQRESULT       0x40
@@ -497,7 +497,7 @@
        u_int8_t        rpm_maxlen;
        u_int16_t       rpm_reserved;
        struct  in6_addr        rpm_prefix;
-} __packed;
+};
 
 #define RPM_PCO_ADD            1
 #define RPM_PCO_CHANGE         2
@@ -513,7 +513,7 @@
        u_int32_t       rpu_pltime;
        u_int32_t       rpu_flags;
        struct  in6_addr rpu_prefix;
-} __packed;
+};
 #define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x80
 #define ICMP6_RR_PCOUSE_RAFLAGS_AUTO   0x40
 
@@ -531,7 +531,7 @@
        u_int8_t        rrr_matchedlen;
        u_int32_t       rrr_ifid;
        struct  in6_addr rrr_prefix;
-} __packed;
+};
 #if BYTE_ORDER == BIG_ENDIAN
 #define ICMP6_RR_RESULT_FLAGS_OOB              0x0002
 #define ICMP6_RR_RESULT_FLAGS_FORBIDDEN                0x0001
diff -r 1839026f91cd -r 636cc28463b7 sys/netinet6/icmp6.c
--- a/sys/netinet6/icmp6.c      Mon Jul 27 14:17:47 2020 +0000
+++ b/sys/netinet6/icmp6.c      Mon Jul 27 14:52:55 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: icmp6.c,v 1.245 2020/06/12 11:04:45 roy Exp $  */
+/*     $NetBSD: icmp6.c,v 1.246 2020/07/27 14:52:55 roy Exp $  */
 /*     $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.245 2020/06/12 11:04:45 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.246 2020/07/27 14:52:55 roy Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -114,6 +114,32 @@
 #include <net/if_faith.h>
 #endif
 
+/* Ensure that non packed structures are the desired size. */
+__CTASSERT(sizeof(struct icmp6_hdr) == 8);
+__CTASSERT(sizeof(struct icmp6_nodeinfo) == 16);
+__CTASSERT(sizeof(struct icmp6_namelookup) == 20);
+__CTASSERT(sizeof(struct icmp6_router_renum) == 16);
+
+__CTASSERT(sizeof(struct nd_router_solicit) == 8);
+__CTASSERT(sizeof(struct nd_router_advert) == 16);
+__CTASSERT(sizeof(struct nd_neighbor_solicit) == 24);
+__CTASSERT(sizeof(struct nd_neighbor_advert) == 24);
+__CTASSERT(sizeof(struct nd_redirect) == 40);
+__CTASSERT(sizeof(struct nd_opt_hdr) == 2);
+__CTASSERT(sizeof(struct nd_opt_route_info) == 8);
+__CTASSERT(sizeof(struct nd_opt_prefix_info) == 32);
+__CTASSERT(sizeof(struct nd_opt_rd_hdr) == 8);
+__CTASSERT(sizeof(struct nd_opt_mtu) == 8);
+__CTASSERT(sizeof(struct nd_opt_nonce) == 2 + ND_OPT_NONCE_LEN);
+__CTASSERT(sizeof(struct nd_opt_rdnss) == 8);
+__CTASSERT(sizeof(struct nd_opt_dnssl) == 8);
+
+__CTASSERT(sizeof(struct mld_hdr) == 24);
+__CTASSERT(sizeof(struct ni_reply_fqdn) == 8);
+__CTASSERT(sizeof(struct rr_pco_match) == 24);
+__CTASSERT(sizeof(struct rr_pco_use) == 32);
+__CTASSERT(sizeof(struct rr_result) == 24);
+
 extern struct domain inet6domain;
 
 percpu_t *icmp6stat_percpu;



Home | Main Index | Thread Index | Old Index