]> git.proxmox.com Git - mirror_frr.git/commitdiff
MPLS: Fix pointer manipulation when forming netlink nested attributes
authorvivek <vivek@cumulusnetworks.com>
Fri, 22 Apr 2016 00:54:30 +0000 (00:54 +0000)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 23 Sep 2016 13:31:02 +0000 (09:31 -0400)
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Fixes: f128f2f1f8a2fa975063dd321719607693991eb0
Ticket: CM-10506
Reviewed By: CCR-4536
Testing Done: Manual verification

zebra/rt_netlink.c

index 3b564f2b15d6a0176310c484264cd0133427d380..07d2923028ae9f9f38339656cd157f4b6ad3cbd8 100644 (file)
@@ -101,6 +101,16 @@ static const struct message nlmsg_str[] = {
 #endif
 /* End of temporary definitions */
 
+#ifndef NLMSG_TAIL
+#define NLMSG_TAIL(nmsg) \
+        ((struct rtattr *) (((u_char *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))
+#endif
+
+#ifndef RTA_TAIL
+#define RTA_TAIL(rta) \
+        ((struct rtattr *) (((u_char *) (rta)) + RTA_ALIGN((rta)->rta_len)))
+#endif
+
 struct gw_family_t
 {
   u_int16_t     filler;
@@ -1749,7 +1759,7 @@ addattr_nest(struct nlmsghdr *n, int maxlen, int type)
 static int
 addattr_nest_end(struct nlmsghdr *n, struct rtattr *nest)
 {
-  nest->rta_len = NLMSG_TAIL(n) - nest;
+  nest->rta_len = (u_char *)NLMSG_TAIL(n) - (u_char *)nest;
   return n->nlmsg_len;
 }
 
@@ -1765,7 +1775,7 @@ rta_nest(struct rtattr *rta, int maxlen, int type)
 static int
 rta_nest_end(struct rtattr *rta, struct rtattr *nest)
 {
-  nest->rta_len = RTA_TAIL(rta) - nest;
+  nest->rta_len = (u_char *)RTA_TAIL(rta) - (u_char *)nest;
   return rta->rta_len;
 }