summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvivek <vivek@cumulusnetworks.com>2016-04-22 02:54:30 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2016-09-23 15:31:02 +0200
commit27559ebdebb8b6d1e24f7cd2b8541d5cce8e2bb2 (patch)
tree9ec3b09e30292846edac478930677da361ee8385
parentMPLS: Install labeled static routes (diff)
downloadfrr-27559ebdebb8b6d1e24f7cd2b8541d5cce8e2bb2.tar.xz
frr-27559ebdebb8b6d1e24f7cd2b8541d5cce8e2bb2.zip
MPLS: Fix pointer manipulation when forming netlink nested attributes
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
-rw-r--r--zebra/rt_netlink.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index 3b564f2b1..07d292302 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -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;
}