]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
rtnl_wilddump_request: fix alignment issue for embedded platforms
authorLutz Jaenicke <ljaenicke@innominate.com>
Thu, 30 Aug 2012 05:01:34 +0000 (05:01 +0000)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Tue, 19 Feb 2013 15:45:59 +0000 (07:45 -0800)
Platforms have different alignment requirements which need to be
fulfilled by the compiler. If the structure elements are already
4 byte (NLMGS_ALIGNTO) aligned by the compiler adding an explicit
padding element (align_rta) is not allowed.
Use __attribute__ ((aligned (NLMSG_ALIGNTO))) in order to achieve
the required alignment.
Experienced on ARM (xscale) with symptom
  netlink: 12 bytes leftover after parsing attributes

Tested on:
  ARM      (32bit Big Endian)
  PowerPC  (32bit Big Endian)
  x86_64   (64bit Little Endian)
Each with different aligment requirments.

Signed-off-by: Lutz Jaenicke <ljaenicke@innominate.com>
lib/libnetlink.c

index 8e8c8b9e574a469a365d176f790523a46db17b88..09b4277844ca3fc8ea44ef923bedfe30a031f729 100644 (file)
@@ -94,8 +94,8 @@ int rtnl_wilddump_request(struct rtnl_handle *rth, int family, int type)
        struct {
                struct nlmsghdr nlh;
                struct rtgenmsg g;
-               __u16 align_rta;        /* attribute has to be 32bit aligned */
-               struct rtattr ext_req;
+               /* attribute has to be NLMSG aligned */
+               struct rtattr ext_req __attribute__ ((aligned(NLMSG_ALIGNTO)));
                __u32 ext_filter_mask;
        } req;