Browse Source

fix attribute alignment for rules

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Felix Fietkau 8 years ago
parent
commit
033df370f7
1 changed files with 6 additions and 2 deletions
  1. 6 2
      route.c

+ 6 - 2
route.c

@@ -27,6 +27,9 @@
 
 #include "relayd.h"
 
+#define NLMSG_ALIGNTO        4U
+#define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) )
+
 static struct uloop_fd rtnl_sock;
 static unsigned int rtnl_seq, rtnl_dump_seq;
 int route_table = 16800;
@@ -98,10 +101,11 @@ rtnl_rule_request(struct relayd_interface *rif, int flags)
 		ifname = rif->ifname;
 
 	if (!(flags & RULE_F_DEFGW_WORKAROUND)) {
+		int len = strlen(ifname) + 1;
 		req.dev.rta.rta_type = FRA_IFNAME;
-		padding -= strlen(ifname) + 1;
+		padding -= NLMSG_ALIGN(len);
 		strcpy(req.dev.ifname, ifname);
-		req.dev.rta.rta_len = sizeof(req.dev.rta) + strlen(ifname) + 1;
+		req.dev.rta.rta_len = sizeof(req.dev.rta) + len;
 	} else {
 		padding = sizeof(req.dev);
 		req.prio.prio--;