diff options
author | vivek <vivek@cumulusnetworks.com> | 2016-04-22 02:54:30 +0200 |
---|---|---|
committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2016-09-23 15:31:02 +0200 |
commit | 27559ebdebb8b6d1e24f7cd2b8541d5cce8e2bb2 (patch) | |
tree | 9ec3b09e30292846edac478930677da361ee8385 | |
parent | MPLS: Install labeled static routes (diff) | |
download | frr-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.c | 14 |
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; } |