dnsd: enforce alignment on packet buffer
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 14 Apr 2010 17:14:25 +0000 (10:14 -0700)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 14 Apr 2010 17:14:25 +0000 (10:14 -0700)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/platform.h
networking/dnsd.c

index 2d3821c0220b36f1b06f951ee9041bb581cc7927..f87add552515f24e983dc83e5398865f4bbd1e01 100644 (file)
@@ -281,10 +281,12 @@ typedef unsigned smalluint;
 #if 1 /* if needed: !defined(arch1) && !defined(arch2) */
 # define ALIGN1 __attribute__((aligned(1)))
 # define ALIGN2 __attribute__((aligned(2)))
+# define ALIGN4 __attribute__((aligned(4)))
 #else
 /* Arches which MUST have 2 or 4 byte alignment for everything are here */
 # define ALIGN1
 # define ALIGN2
+# define ALIGN4
 #endif
 
 
index 6771c53461b2ce2b7e285f45da59340f7af2c1e7..c76a54f9e53fd7d79dc879e2e0cc01b5b8693c3e 100644 (file)
@@ -480,7 +480,8 @@ int dnsd_main(int argc UNUSED_PARAM, char **argv)
        unsigned lsa_size;
        int udps, opts;
        uint16_t port = 53;
-       uint8_t buf[MAX_PACK_LEN + 1];
+       /* Ensure buf is 32bit aligned (we need 16bit, but 32bit can't hurt) */
+       uint8_t buf[MAX_PACK_LEN + 1] ALIGN4;
 
        opts = getopt32(argv, "vsi:c:t:p:d", &listen_interface, &fileconf, &sttl, &sport);
        //if (opts & (1 << 0)) // -v