]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Copy pdp.prefix as it's not aligned.
authorRoy Marples <roy@marples.name>
Sun, 9 Oct 2016 08:16:42 +0000 (08:16 +0000)
committerRoy Marples <roy@marples.name>
Sun, 9 Oct 2016 08:16:42 +0000 (08:16 +0000)
dhcp6.c

diff --git a/dhcp6.c b/dhcp6.c
index 60fdbaf3aefb3440ce317e8d495e02d53461edfa..389263cdb12418d4ce50786ce0e0f98cb06e5efa 100644 (file)
--- a/dhcp6.c
+++ b/dhcp6.c
@@ -829,7 +829,8 @@ dhcp6_makemessage(struct interface *ifp)
                                pdp.pltime = htonl(ap->prefix_pltime);
                                pdp.vltime = htonl(ap->prefix_vltime);
                                pdp.prefix_len = ap->prefix_len;
-                               pdp.prefix = ap->prefix;
+                               /* pdp.prefix is not aligned, so copy it in. */
+                               memcpy(&pdp.prefix, &ap->prefix, sizeof(pdp.prefix));
                                COPYIN(D6_OPTION_IAPREFIX, &pdp, sizeof(pdp));
                                ia_na_len = (uint16_t)
                                    (ia_na_len + sizeof(o) + sizeof(pdp));
@@ -1959,7 +1960,8 @@ dhcp6_findpd(struct interface *ifp, const uint8_t *iaid,
                        a->dadcallback = dhcp6_dadcallback;
                        a->ia_type = D6_OPTION_IA_PD;
                        memcpy(a->iaid, iaid, sizeof(a->iaid));
-                       a->prefix = pdp.prefix;
+                       /* pdp.prefix is not aligned so copy it in. */
+                       memcpy(&a->prefix, &pdp.prefix, sizeof(a->prefix));
                        a->prefix_len = pdp.prefix_len;
                        ia = inet_ntop(AF_INET6, &a->prefix,
                            iabuf, sizeof(iabuf));