1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
From a5c387d23c3309296d852e6f7fae8eb6ca99bd47 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
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/ipioam6.c | 3 ++-
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 +-
11 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/include/libnetlink.h b/include/libnetlink.h
index ad7e7127..09145d77 100644
--- a/include/libnetlink.h
+++ b/include/libnetlink.h
@@ -219,7 +219,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) \
@@ -287,7 +287,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 760cfee2..8b9dde00 100644
--- a/ip/ipfou.c
+++ b/ip/ipfou.c
@@ -228,7 +228,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 f4387e03..c12aa23f 100644
--- a/ip/ipila.c
+++ b/ip/ipila.c
@@ -97,7 +97,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/ipioam6.c b/ip/ipioam6.c
index b63d7d5c..c7c9aceb 100644
--- a/ip/ipioam6.c
+++ b/ip/ipioam6.c
@@ -110,7 +110,8 @@ static int process_msg(struct nlmsghdr *n, void *arg)
return -1;
ghdr = NLMSG_DATA(n);
- parse_rtattr(attrs, IOAM6_ATTR_MAX, (void *)ghdr + GENL_HDRLEN, len);
+ parse_rtattr(attrs, IOAM6_ATTR_MAX,
+ (struct rtattr *)((char *)ghdr + GENL_HDRLEN), len);
open_json_object(NULL);
switch (ghdr->cmd) {
diff --git a/ip/ipl2tp.c b/ip/ipl2tp.c
index 9d1e566c..76ba20c0 100644
--- a/ip/ipl2tp.c
+++ b/ip/ipl2tp.c
@@ -341,7 +341,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 fc4c8631..3e65e11f 100644
--- a/ip/ipmacsec.c
+++ b/ip/ipmacsec.c
@@ -1083,7 +1083,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 9847f95b..d37f1269 100644
--- a/ip/ipmptcp.c
+++ b/ip/ipmptcp.c
@@ -286,7 +286,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)
@@ -402,7 +402,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]) {
@@ -497,7 +497,7 @@ static int mptcp_monitor_msg(struct rtnl_ctrl_data *ctrl,
printf("[%16s]", 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);
if (tb[MPTCP_ATTR_TOKEN])
printf(" token=%08x", rta_getattr_u32(tb[MPTCP_ATTR_TOKEN]));
diff --git a/ip/ipseg6.c b/ip/ipseg6.c
index 305b8961..4103a1c6 100644
--- a/ip/ipseg6.c
+++ b/ip/ipseg6.c
@@ -112,7 +112,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 9c8fb072..f451c8f2 100644
--- a/ip/tcp_metrics.c
+++ b/ip/tcp_metrics.c
@@ -175,7 +175,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 01648229..80adabf4 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -1396,7 +1396,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;
}
@@ -1411,7 +1411,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;
}
@@ -1427,9 +1427,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;
}
@@ -1501,7 +1501,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;
}
@@ -1550,7 +1550,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 6c1c1a8d..040b935c 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -1543,7 +1543,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.44.0
|