summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2019-08-11 04:49:07 (GMT)
committerThomas Haller <thaller@redhat.com>2019-08-16 05:42:03 (GMT)
commitde72910e6b3ec4503f23538682a89c4d444c7a92 (patch)
treeadb4ac751ff7e9d2cbf3a17d9c2191fb0d80e56f
parent1a88619b72c77b5390076ad703bfa3de4fa0348d (diff)
downloadlibnl-de72910e6b3ec4503f23538682a89c4d444c7a92.zip
libnl-de72910e6b3ec4503f23538682a89c4d444c7a92.tar.gz
libnl-de72910e6b3ec4503f23538682a89c4d444c7a92.tar.bz2
all: Avoid pointer arithmetic on `void *`
ISO C requires that the pointer operand to the binary + operator be to a complete object type[0]. [0] http://port70.net/~nsz/c/c11/n1570.html#6.5.6p2
-rw-r--r--Makefile.am1
-rw-r--r--lib/attr.c8
-rw-r--r--lib/data.c2
-rw-r--r--lib/genl/genl.c4
-rw-r--r--lib/hashtable.c2
-rw-r--r--lib/msg.c6
-rw-r--r--lib/object.c2
-rw-r--r--lib/route/cls/ematch.c2
-rw-r--r--lib/route/cls/ematch/nbyte.c2
-rw-r--r--lib/route/cls/ematch/text.c2
-rw-r--r--lib/route/link/veth.c4
-rw-r--r--lib/route/qdisc/mqprio.c2
-rw-r--r--lib/route/qdisc/netem.c8
-rw-r--r--lib/route/route_obj.c4
-rw-r--r--lib/xfrm/sa.c2
-rw-r--r--lib/xfrm/sp.c2
-rw-r--r--src/nl-tctree-list.c6
17 files changed, 30 insertions, 29 deletions
diff --git a/Makefile.am b/Makefile.am
index 2c01e98..a698e73 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,6 +37,7 @@ warn_cppflags = \
-Wno-unused-parameter \
-Wno-sign-compare \
-Wno-missing-field-initializers \
+ -Wpointer-arith \
$(NULL)
###############################################################################
diff --git a/lib/attr.c b/lib/attr.c
index 0793dc3..a4f5852 100644
--- a/lib/attr.c
+++ b/lib/attr.c
@@ -478,7 +478,7 @@ struct nlattr *nla_reserve(struct nl_msg *msg, int attrtype, int attrlen)
NL_DBG(2, "msg %p: attr <%p> %d: Reserved %d (%d) bytes at offset +%td "
"nlmsg_len=%d\n", msg, nla, nla->nla_type,
nla_total_size(attrlen), attrlen,
- (void *) nla - nlmsg_data(msg->nm_nlh),
+ (char *) nla - (char *) nlmsg_data(msg->nm_nlh),
msg->nm_nlh->nlmsg_len);
return nla;
@@ -514,7 +514,7 @@ int nla_put(struct nl_msg *msg, int attrtype, int datalen, const void *data)
memcpy(nla_data(nla), data, datalen);
NL_DBG(2, "msg %p: attr <%p> %d: Wrote %d bytes at offset +%td\n",
msg, nla, nla->nla_type, datalen,
- (void *) nla - nlmsg_data(msg->nm_nlh));
+ (char *) nla - (char *) nlmsg_data(msg->nm_nlh));
}
return 0;
@@ -917,7 +917,7 @@ static int _nest_end(struct nl_msg *msg, struct nlattr *start, int keep_empty)
{
size_t pad, len;
- len = (void *) nlmsg_tail(msg->nm_nlh) - (void *) start;
+ len = (char *) nlmsg_tail(msg->nm_nlh) - (char *) start;
if ( len > USHRT_MAX
|| (!keep_empty && len == NLA_HDRLEN)) {
@@ -996,7 +996,7 @@ void nla_nest_cancel(struct nl_msg *msg, const struct nlattr *attr)
{
ssize_t len;
- len = (void *) nlmsg_tail(msg->nm_nlh) - (void *) attr;
+ len = (char *) nlmsg_tail(msg->nm_nlh) - (char *) attr;
if (len < 0)
BUG();
else if (len > 0) {
diff --git a/lib/data.c b/lib/data.c
index 712e84d..fea3060 100644
--- a/lib/data.c
+++ b/lib/data.c
@@ -112,7 +112,7 @@ struct nl_data *nl_data_clone(const struct nl_data *src)
int nl_data_append(struct nl_data *data, const void *buf, size_t size)
{
if (size > 0) {
- void *d_data = realloc(data->d_data, data->d_size + size);
+ char *d_data = realloc(data->d_data, data->d_size + size);
if (!d_data)
return -NLE_NOMEM;
diff --git a/lib/genl/genl.c b/lib/genl/genl.c
index 49e82c2..b4f37b5 100644
--- a/lib/genl/genl.c
+++ b/lib/genl/genl.c
@@ -260,7 +260,7 @@ void *genlmsg_user_hdr(const struct genlmsghdr *gnlh)
*/
void *genlmsg_user_data(const struct genlmsghdr *gnlh, const int hdrlen)
{
- return genlmsg_user_hdr(gnlh) + NLMSG_ALIGN(hdrlen);
+ return (char *) genlmsg_user_hdr(gnlh) + NLMSG_ALIGN(hdrlen);
}
/**
@@ -364,7 +364,7 @@ void *genlmsg_put(struct nl_msg *msg, uint32_t port, uint32_t seq, int family,
NL_DBG(2, "msg %p: Added generic netlink header cmd=%d version=%d\n",
msg, cmd, version);
- return nlmsg_data(nlh) + GENL_HDRLEN;
+ return (char *) nlmsg_data(nlh) + GENL_HDRLEN;
}
/** @} */
diff --git a/lib/hashtable.c b/lib/hashtable.c
index bf6981e..db4ed8b 100644
--- a/lib/hashtable.c
+++ b/lib/hashtable.c
@@ -192,7 +192,7 @@ int nl_hash_table_del(nl_hash_table_t *ht, struct nl_object *obj)
uint32_t nl_hash(void *k, size_t length, uint32_t initval)
{
- return(__nl_hash(k, length, initval));
+ return(__nl_hash((char *) k, length, initval));
}
/** @} */
diff --git a/lib/msg.c b/lib/msg.c
index e3fb629..c08b3a4 100644
--- a/lib/msg.c
+++ b/lib/msg.c
@@ -410,7 +410,7 @@ struct nl_msg *nlmsg_convert(struct nlmsghdr *hdr)
*/
void *nlmsg_reserve(struct nl_msg *n, size_t len, int pad)
{
- void *buf = n->nm_nlh;
+ char *buf = (char *) n->nm_nlh;
size_t nlmsg_len = n->nm_nlh->nlmsg_len;
size_t tlen;
@@ -838,7 +838,7 @@ static void print_genl_hdr(FILE *ofd, void *start)
static void *print_genl_msg(struct nl_msg *msg, FILE *ofd, struct nlmsghdr *hdr,
struct nl_cache_ops *ops, int *payloadlen)
{
- void *data = nlmsg_data(hdr);
+ char *data = nlmsg_data(hdr);
if (*payloadlen < GENL_HDRLEN)
return data;
@@ -901,7 +901,7 @@ static void dump_attrs(FILE *ofd, struct nlattr *attrs, int attrlen,
prefix_line(ofd, prefix);
fprintf(ofd, " [PADDING] %d octets\n",
padlen);
- dump_hex(ofd, nla_data(nla) + alen,
+ dump_hex(ofd, (char *) nla_data(nla) + alen,
padlen, prefix);
}
}
diff --git a/lib/object.c b/lib/object.c
index 5ced84b..7ba7465 100644
--- a/lib/object.c
+++ b/lib/object.c
@@ -132,7 +132,7 @@ struct nl_object *nl_object_clone(struct nl_object *obj)
new->ce_mask = obj->ce_mask;
if (size)
- memcpy((void *)new + doff, (void *)obj + doff, size);
+ memcpy((char *)new + doff, (char *)obj + doff, size);
if (ops->oo_clone) {
if (ops->oo_clone(new, obj) < 0) {
diff --git a/lib/route/cls/ematch.c b/lib/route/cls/ematch.c
index 32f723e..18f5be9 100644
--- a/lib/route/cls/ematch.c
+++ b/lib/route/cls/ematch.c
@@ -465,7 +465,7 @@ int rtnl_ematch_parse_attr(struct nlattr *attr, struct rtnl_ematch_tree **result
}
hdr = nla_data(a);
- data = nla_data(a) + NLA_ALIGN(sizeof(*hdr));
+ data = (char *) nla_data(a) + NLA_ALIGN(sizeof(*hdr));
len = nla_len(a) - NLA_ALIGN(sizeof(*hdr));
NL_DBG(3, "ematch attribute matchid=%u, kind=%u, flags=%u\n",
diff --git a/lib/route/cls/ematch/nbyte.c b/lib/route/cls/ematch/nbyte.c
index e4216d6..2942c0d 100644
--- a/lib/route/cls/ematch/nbyte.c
+++ b/lib/route/cls/ematch/nbyte.c
@@ -94,7 +94,7 @@ static int nbyte_parse(struct rtnl_ematch *e, void *data, size_t len)
if (!(n->pattern = calloc(1, plen)))
return -NLE_NOMEM;
- memcpy(n->pattern, data + hdrlen, plen);
+ memcpy(n->pattern, (char *) data + hdrlen, plen);
}
return 0;
diff --git a/lib/route/cls/ematch/text.c b/lib/route/cls/ematch/text.c
index 12a1e74..af2e373 100644
--- a/lib/route/cls/ematch/text.c
+++ b/lib/route/cls/ematch/text.c
@@ -117,7 +117,7 @@ static int text_parse(struct rtnl_ematch *e, void *data, size_t len)
if (!(t->pattern = calloc(1, t->cfg.pattern_len)))
return -NLE_NOMEM;
- memcpy(t->pattern, data + hdrlen, t->cfg.pattern_len);
+ memcpy(t->pattern, (char *) data + hdrlen, t->cfg.pattern_len);
}
return 0;
diff --git a/lib/route/link/veth.c b/lib/route/link/veth.c
index bd30041..15859de 100644
--- a/lib/route/link/veth.c
+++ b/lib/route/link/veth.c
@@ -63,8 +63,8 @@ static int veth_parse(struct rtnl_link *link, struct nlattr *data,
peer->l_index = ifi->ifi_index;
peer->l_flags = ifi->ifi_flags;
peer->l_change = ifi->ifi_change;
- err = nla_parse(peer_tb, IFLA_MAX,
- nla_data(nla_peer) + sizeof(struct ifinfomsg),
+ err = nla_parse(peer_tb, IFLA_MAX, (struct nlattr *)
+ ((char *) nla_data(nla_peer) + sizeof(struct ifinfomsg)),
nla_len(nla_peer) - sizeof(struct ifinfomsg),
rtln_link_policy);
if (err < 0)
diff --git a/lib/route/qdisc/mqprio.c b/lib/route/qdisc/mqprio.c
index ea26e00..0d07247 100644
--- a/lib/route/qdisc/mqprio.c
+++ b/lib/route/qdisc/mqprio.c
@@ -63,7 +63,7 @@ static int mqprio_msg_parser(struct rtnl_tc *tc, void *data)
struct nlattr *tb[TCA_MQPRIO_MAX + 1];
err = nla_parse(tb, TCA_MQPRIO_MAX, (struct nlattr *)
- (tc->tc_opts->d_data + NLA_ALIGN(sizeof(*qopt))),
+ ((char *) tc->tc_opts->d_data + NLA_ALIGN(sizeof(*qopt))),
len, mqprio_policy);
if (err < 0)
return err;
diff --git a/lib/route/qdisc/netem.c b/lib/route/qdisc/netem.c
index 2077408..17dee3b 100644
--- a/lib/route/qdisc/netem.c
+++ b/lib/route/qdisc/netem.c
@@ -76,7 +76,7 @@ static int netem_msg_parser(struct rtnl_tc *tc, void *data)
struct nlattr *tb[TCA_NETEM_MAX+1];
err = nla_parse(tb, TCA_NETEM_MAX, (struct nlattr *)
- (tc->tc_opts->d_data + sizeof(*opts)),
+ ((char *) tc->tc_opts->d_data + sizeof(*opts)),
len, netem_policy);
if (err < 0) {
free(netem);
@@ -323,14 +323,14 @@ static int netem_msg_fill_raw(struct rtnl_tc *tc, void *data,
* remainder of the message. That's just the way that sch_netem expects it.
* Maybe there's a more succinct way to do this at a higher level.
*/
- head = (struct nlattr *)(NLMSG_DATA(msg->nm_nlh) +
+ head = (struct nlattr *)(((char *) NLMSG_DATA(msg->nm_nlh)) +
NLMSG_LENGTH(sizeof(struct tcmsg)) - NLMSG_ALIGNTO);
- tail = (struct nlattr *)(((void *) (msg->nm_nlh)) +
+ tail = (struct nlattr *)(((char *) (msg->nm_nlh)) +
NLMSG_ALIGN(msg->nm_nlh->nlmsg_len));
old_len = head->nla_len;
- head->nla_len = (void *)tail - (void *)head;
+ head->nla_len = (char *)tail - (char *)head;
msg->nm_nlh->nlmsg_len += (head->nla_len - old_len);
return err;
diff --git a/lib/route/route_obj.c b/lib/route/route_obj.c
index 950b351..bacabe8 100644
--- a/lib/route/route_obj.c
+++ b/lib/route/route_obj.c
@@ -1472,8 +1472,8 @@ int rtnl_route_build_msg(struct nl_msg *msg, struct rtnl_route *route)
nh_encap_build_msg(msg, nh->rtnh_encap) < 0)
goto nla_put_failure;
- rtnh->rtnh_len = nlmsg_tail(msg->nm_nlh) -
- (void *) rtnh;
+ rtnh->rtnh_len = (char *) nlmsg_tail(msg->nm_nlh) -
+ (char *) rtnh;
}
nla_nest_end(msg, multipath);
diff --git a/lib/xfrm/sa.c b/lib/xfrm/sa.c
index b469b0a..48265ba 100644
--- a/lib/xfrm/sa.c
+++ b/lib/xfrm/sa.c
@@ -682,7 +682,7 @@ int xfrmnl_sa_parse(struct nlmsghdr *n, struct xfrmnl_sa **result)
}
else if (n->nlmsg_type == XFRM_MSG_DELSA)
{
- sa_info = (struct xfrm_usersa_info*)(nlmsg_data(n) + sizeof (struct xfrm_usersa_id) + NLA_HDRLEN);
+ sa_info = (struct xfrm_usersa_info*)((char *)nlmsg_data(n) + sizeof (struct xfrm_usersa_id) + NLA_HDRLEN);
}
else
{
diff --git a/lib/xfrm/sp.c b/lib/xfrm/sp.c
index fd7585c..99b6a4c 100644
--- a/lib/xfrm/sp.c
+++ b/lib/xfrm/sp.c
@@ -532,7 +532,7 @@ int xfrmnl_sp_parse(struct nlmsghdr *n, struct xfrmnl_sp **result)
sp->ce_msgtype = n->nlmsg_type;
if (n->nlmsg_type == XFRM_MSG_DELPOLICY)
{
- sp_info = (struct xfrm_userpolicy_info*)(nlmsg_data(n) + sizeof (struct xfrm_userpolicy_id) + NLA_HDRLEN);
+ sp_info = (struct xfrm_userpolicy_info*)((char *)nlmsg_data(n) + sizeof (struct xfrm_userpolicy_id) + NLA_HDRLEN);
}
else
{
diff --git a/src/nl-tctree-list.c b/src/nl-tctree-list.c
index c80093b..9e03038 100644
--- a/src/nl-tctree-list.c
+++ b/src/nl-tctree-list.c
@@ -53,9 +53,9 @@ static void print_class(struct nl_object *obj, void *arg)
leaf = rtnl_class_leaf_qdisc(class, qdisc_cache);
if (leaf)
- print_qdisc((struct nl_object *) leaf, arg + 2);
+ print_qdisc((struct nl_object *) leaf, (char *) arg + 2);
- print_tc_childs(TC_CAST(class), arg + 2);
+ print_tc_childs(TC_CAST(class), (char *) arg + 2);
if (rtnl_cls_alloc_cache(sock, ifindex, parent, &cls_cache) < 0)
return;
@@ -88,7 +88,7 @@ static void print_qdisc(struct nl_object *obj, void *arg)
params.dp_prefix = (int)(long) arg;
nl_object_dump(obj, &params);
- print_tc_childs(TC_CAST(qdisc), arg + 2);
+ print_tc_childs(TC_CAST(qdisc), (char *) arg + 2);
if (rtnl_cls_alloc_cache(sock, ifindex, parent, &cls_cache) < 0)
return;