]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Fix an unaligned access on OpenBSD/sparc64
authorJérémie Courrèges-Anglas <jca@wxcvbn.org>
Sat, 10 Jun 2017 14:48:44 +0000 (16:48 +0200)
committerGert Doering <gert@greenie.muc.de>
Sun, 11 Jun 2017 09:54:57 +0000 (11:54 +0200)
The pointer to the packet content doesn't seem to be word-aligned,
resulting in a SIGBUS when accessing it as a pointer to struct ip that
contains bit fields.

Replace with struct openvpn_iphdr and OPENVPN_IPH_GET_VER, which only
does a one byte access and thus isn't affected by alignement.
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <87ink3vpcs.fsf@ritchie.wxcvbn.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14769.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/tun.c

index 3504fbf465350afae08e525fc304ea3e06821af7..0ca0c19ed246e061619900ddab81c04e0a5f673d 100644 (file)
@@ -1654,11 +1654,11 @@ write_tun_header(struct tuntap *tt, uint8_t *buf, int len)
     {
         u_int32_t type;
         struct iovec iv[2];
-        struct ip *iph;
+        struct openvpn_iphdr *iph;
 
-        iph = (struct ip *) buf;
+        iph = (struct openvpn_iphdr *) buf;
 
-        if (iph->ip_v == 6)
+        if (OPENVPN_IPH_GET_VER(iph->version_len) == 6)
         {
             type = htonl(AF_INET6);
         }