From 27559ebdebb8b6d1e24f7cd2b8541d5cce8e2bb2 Mon Sep 17 00:00:00 2001 From: vivek Date: Fri, 22 Apr 2016 00:54:30 +0000 Subject: [PATCH] MPLS: Fix pointer manipulation when forming netlink nested attributes Signed-off-by: Vivek Venkatraman Reviewed-by: Donald Sharp Fixes: f128f2f1f8a2fa975063dd321719607693991eb0 Ticket: CM-10506 Reviewed By: CCR-4536 Testing Done: Manual verification --- zebra/rt_netlink.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 3b564f2b15..07d2923028 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; } -- 2.39.5