From 3d774f0cd909b05fa445e9033c2f9762d26bb42a Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Tue, 12 Mar 2019 19:12:31 -0700 Subject: [PATCH] Avoid pointer arithmetic on `void *` --- include/libnetlink.h | 4 ++-- ip/ipfou.c | 2 +- ip/ipila.c | 2 +- ip/ipl2tp.c | 2 +- ip/ipmacsec.c | 2 +- ip/ipmptcp.c | 6 +++--- ip/ipseg6.c | 2 +- ip/tcp_metrics.c | 2 +- lib/libnetlink.c | 12 ++++++------ lib/utils.c | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/include/libnetlink.h b/include/libnetlink.h index 6bff6bae..ca09dbc8 100644 --- a/include/libnetlink.h +++ b/include/libnetlink.h @@ -174,7 +174,7 @@ struct rtattr *rta_nest(struct rtattr *rta, int maxlen, int type); int rta_nest_end(struct rtattr *rta, struct rtattr *nest); #define RTA_TAIL(rta) \ - ((struct rtattr *) (((void *) (rta)) + \ + ((struct rtattr *) (((char *) (rta)) + \ RTA_ALIGN((rta)->rta_len))) #define parse_rtattr_nested(tb, max, rta) \ @@ -238,7 +238,7 @@ int rtnl_from_file(FILE *, rtnl_listen_filter_t handler, void *jarg); #define NLMSG_TAIL(nmsg) \ - ((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))) + ((struct rtattr *) (((char *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))) #ifndef IFA_RTA #define IFA_RTA(r) \ diff --git a/ip/ipfou.c b/ip/ipfou.c index 9c697770..539e7ab7 100644 --- a/ip/ipfou.c +++ b/ip/ipfou.c @@ -232,7 +232,7 @@ static int print_fou_mapping(struct nlmsghdr *n, void *arg) return -1; ghdr = NLMSG_DATA(n); - parse_rtattr(tb, FOU_ATTR_MAX, (void *) ghdr + GENL_HDRLEN, len); + parse_rtattr(tb, FOU_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len); open_json_object(NULL); if (tb[FOU_ATTR_PORT]) diff --git a/ip/ipila.c b/ip/ipila.c index 475c35b5..0540d1d9 100644 --- a/ip/ipila.c +++ b/ip/ipila.c @@ -96,7 +96,7 @@ static int print_ila_mapping(struct nlmsghdr *n, void *arg) return -1; ghdr = NLMSG_DATA(n); - parse_rtattr(tb, ILA_ATTR_MAX, (void *) ghdr + GENL_HDRLEN, len); + parse_rtattr(tb, ILA_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len); open_json_object(NULL); print_ila_locid("locator_match", ILA_ATTR_LOCATOR_MATCH, tb); diff --git a/ip/ipl2tp.c b/ip/ipl2tp.c index f090390f..edbe0f2f 100644 --- a/ip/ipl2tp.c +++ b/ip/ipl2tp.c @@ -345,7 +345,7 @@ static int get_response(struct nlmsghdr *n, void *arg) if (len < 0) return -1; - parse_rtattr(attrs, L2TP_ATTR_MAX, (void *)ghdr + GENL_HDRLEN, len); + parse_rtattr(attrs, L2TP_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len); if (attrs[L2TP_ATTR_PW_TYPE]) p->pw_type = rta_getattr_u16(attrs[L2TP_ATTR_PW_TYPE]); diff --git a/ip/ipmacsec.c b/ip/ipmacsec.c index bf48e8b5..eecb7e48 100644 --- a/ip/ipmacsec.c +++ b/ip/ipmacsec.c @@ -1001,7 +1001,7 @@ static int process(struct nlmsghdr *n, void *arg) if (ghdr->cmd != MACSEC_CMD_GET_TXSC) return 0; - parse_rtattr(attrs, MACSEC_ATTR_MAX, (void *) ghdr + GENL_HDRLEN, len); + parse_rtattr(attrs, MACSEC_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len); if (!validate_dump(attrs)) { fprintf(stderr, "incomplete dump message\n"); return -1; diff --git a/ip/ipmptcp.c b/ip/ipmptcp.c index 5f490f00..f53dcab8 100644 --- a/ip/ipmptcp.c +++ b/ip/ipmptcp.c @@ -247,7 +247,7 @@ static int print_mptcp_addr(struct nlmsghdr *n, void *arg) return -1; ghdr = NLMSG_DATA(n); - parse_rtattr_flags(tb, MPTCP_PM_ATTR_MAX, (void *) ghdr + GENL_HDRLEN, + parse_rtattr_flags(tb, MPTCP_PM_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len, NLA_F_NESTED); addrinfo = tb[MPTCP_PM_ATTR_ADDR]; if (!addrinfo) @@ -358,7 +358,7 @@ static int print_mptcp_limit(struct nlmsghdr *n, void *arg) return -1; ghdr = NLMSG_DATA(n); - parse_rtattr(tb, MPTCP_PM_ATTR_MAX, (void *) ghdr + GENL_HDRLEN, len); + parse_rtattr(tb, MPTCP_PM_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len); open_json_object(NULL); if (tb[MPTCP_PM_ATTR_RCV_ADD_ADDRS]) { @@ -447,7 +447,7 @@ static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl, printf("[%14s]", event_to_str[ghdr->cmd]); - parse_rtattr(tb, MPTCP_ATTR_MAX, (void *) ghdr + GENL_HDRLEN, len); + parse_rtattr(tb, MPTCP_ATTR_MAX, (struct rtattr *) ((char *) ghdr + GENL_HDRLEN), len); printf(" token=%08x", rta_getattr_u32(tb[MPTCP_ATTR_TOKEN])); diff --git a/ip/ipseg6.c b/ip/ipseg6.c index 56a76996..1c3c3bf5 100644 --- a/ip/ipseg6.c +++ b/ip/ipseg6.c @@ -115,7 +115,7 @@ static int process_msg(struct nlmsghdr *n, void *arg) ghdr = NLMSG_DATA(n); - parse_rtattr(attrs, SEG6_ATTR_MAX, (void *)ghdr + GENL_HDRLEN, len); + parse_rtattr(attrs, SEG6_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len); open_json_object(NULL); switch (ghdr->cmd) { diff --git a/ip/tcp_metrics.c b/ip/tcp_metrics.c index acbd745a..051ddc63 100644 --- a/ip/tcp_metrics.c +++ b/ip/tcp_metrics.c @@ -178,7 +178,7 @@ static int process_msg(struct nlmsghdr *n, void *arg) if (ghdr->cmd != TCP_METRICS_CMD_GET) return 0; - parse_rtattr(attrs, TCP_METRICS_ATTR_MAX, (void *) ghdr + GENL_HDRLEN, + parse_rtattr(attrs, TCP_METRICS_ATTR_MAX, (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len); if (attrs[TCP_METRICS_ATTR_ADDR_IPV4]) { diff --git a/lib/libnetlink.c b/lib/libnetlink.c index 2f2cc1fe..05006fdc 100644 --- a/lib/libnetlink.c +++ b/lib/libnetlink.c @@ -1328,7 +1328,7 @@ int addraw_l(struct nlmsghdr *n, int maxlen, const void *data, int len) } memcpy(NLMSG_TAIL(n), data, len); - memset((void *) NLMSG_TAIL(n) + len, 0, NLMSG_ALIGN(len) - len); + memset((char *) NLMSG_TAIL(n) + len, 0, NLMSG_ALIGN(len) - len); n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + NLMSG_ALIGN(len); return 0; } @@ -1343,7 +1343,7 @@ struct rtattr *addattr_nest(struct nlmsghdr *n, int maxlen, int type) int addattr_nest_end(struct nlmsghdr *n, struct rtattr *nest) { - nest->rta_len = (void *)NLMSG_TAIL(n) - (void *)nest; + nest->rta_len = (char *)NLMSG_TAIL(n) - (char *)nest; return n->nlmsg_len; } @@ -1359,9 +1359,9 @@ struct rtattr *addattr_nest_compat(struct nlmsghdr *n, int maxlen, int type, int addattr_nest_compat_end(struct nlmsghdr *n, struct rtattr *start) { - struct rtattr *nest = (void *)start + NLMSG_ALIGN(start->rta_len); + struct rtattr *nest = (struct rtattr *)((char *)start + NLMSG_ALIGN(start->rta_len)); - start->rta_len = (void *)NLMSG_TAIL(n) - (void *)start; + start->rta_len = (char *)NLMSG_TAIL(n) - (char *)start; addattr_nest_end(n, nest); return n->nlmsg_len; } @@ -1433,7 +1433,7 @@ struct rtattr *rta_nest(struct rtattr *rta, int maxlen, int type) int rta_nest_end(struct rtattr *rta, struct rtattr *nest) { - nest->rta_len = (void *)RTA_TAIL(rta) - (void *)nest; + nest->rta_len = (char *)RTA_TAIL(rta) - (char *)nest; return rta->rta_len; } @@ -1482,7 +1482,7 @@ int __parse_rtattr_nested_compat(struct rtattr *tb[], int max, if (RTA_PAYLOAD(rta) < len) return -1; if (RTA_PAYLOAD(rta) >= RTA_ALIGN(len) + sizeof(struct rtattr)) { - rta = RTA_DATA(rta) + RTA_ALIGN(len); + rta = (struct rtattr *)((char *)RTA_DATA(rta) + RTA_ALIGN(len)); return parse_rtattr_nested(tb, max, rta); } memset(tb, 0, sizeof(struct rtattr *) * (max + 1)); diff --git a/lib/utils.c b/lib/utils.c index 93ae0c55..33cf199e 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -1532,7 +1532,7 @@ int get_rtnl_link_stats_rta(struct rtnl_link_stats64 *stats64, len = RTA_PAYLOAD(rta); if (len < size) - memset(s + len, 0, size - len); + memset((char *)s + len, 0, size - len); else len = size; -- 2.32.0