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
|
From 39bde60243deec54676cd119f08192a1c8f7b06b Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Sun, 7 Jul 2019 21:25:13 -0700
Subject: [PATCH] Avoid pointer arithmetic on `void *`
---
src/netlink_smc_diag.c | 4 ++--
src/print_timespec.h | 6 ++++--
src/sockaddr.c | 2 +-
src/ucopy.c | 10 +++++-----
4 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/netlink_smc_diag.c b/src/netlink_smc_diag.c
index 7d2872dc9..fd6c276cb 100644
--- a/src/netlink_smc_diag.c
+++ b/src/netlink_smc_diag.c
@@ -41,7 +41,7 @@ DECL_NETLINK_DIAG_DECODER(decode_smc_diag_req)
if (len >= sizeof(req)) {
if (!umoven_or_printaddr(tcp, addr + offset,
sizeof(req) - offset,
- (void *) &req + offset)) {
+ (char *) &req + offset)) {
PRINT_FIELD_FLAGS(req, diag_ext,
smc_diag_extended_flags,
"1<<SMC_DIAG_\?\?\?-1");
@@ -250,7 +250,7 @@ DECL_NETLINK_DIAG_DECODER(decode_smc_diag_msg)
if (len >= sizeof(msg)) {
if (!umoven_or_printaddr(tcp, addr + offset,
sizeof(msg) - offset,
- (void *) &msg + offset)) {
+ (char *) &msg + offset)) {
PRINT_FIELD_XVAL(msg, diag_state,
smc_states, "SMC_???");
tprint_struct_next();
diff --git a/src/print_timespec.h b/src/print_timespec.h
index feb6599f1..3351755cb 100644
--- a/src/print_timespec.h
+++ b/src/print_timespec.h
@@ -67,6 +67,8 @@ bool
PRINT_TIMESPEC_ARRAY_DATA_SIZE(const void *arg, const unsigned int nmemb,
const size_t size)
{
+ const char *ts = arg;
+
if (nmemb > size / sizeof(TIMESPEC_T)) {
tprints("?");
return false;
@@ -74,10 +76,10 @@ PRINT_TIMESPEC_ARRAY_DATA_SIZE(const void *arg, const unsigned int nmemb,
tprints("[");
- for (unsigned int i = 0; i < nmemb; i++, arg += sizeof(TIMESPEC_T)) {
+ for (unsigned int i = 0; i < nmemb; i++, ts += sizeof(TIMESPEC_T)) {
if (i)
tprints(", ");
- print_unaligned_timespec_t(arg);
+ print_unaligned_timespec_t(ts);
}
tprints("]");
diff --git a/src/sockaddr.c b/src/sockaddr.c
index ca8c86ce8..1f2ee0122 100644
--- a/src/sockaddr.c
+++ b/src/sockaddr.c
@@ -497,7 +497,7 @@ print_sockaddr_data_ll(struct tcb *tcp, const void *const buf,
static void
print_sockaddr_data_raw(const void *const buf, const int addrlen)
{
- const char *const data = buf + SIZEOF_SA_FAMILY;
+ const char *const data = (const char *)buf + SIZEOF_SA_FAMILY;
const int datalen = addrlen - SIZEOF_SA_FAMILY;
tprints_field_name("sa_data");
diff --git a/src/ucopy.c b/src/ucopy.c
index 6cebb8e26..e8ca2ad5d 100644
--- a/src/ucopy.c
+++ b/src/ucopy.c
@@ -186,7 +186,7 @@ vm_read_mem(const pid_t pid, void *laddr,
break;
len = next_len;
- laddr += copy_len;
+ laddr = (char *)laddr + copy_len;
page_start += page_size;
taddr = page_start;
}
@@ -278,7 +278,7 @@ umoven_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
memcpy(laddr, &u.x[residue], m);
residue = 0;
addr += sizeof(long);
- laddr += m;
+ laddr = (char *)laddr + m;
nread += m;
len -= m;
}
@@ -375,10 +375,10 @@ umovestr_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
memcpy(laddr, &u.x[residue], m);
while (residue < sizeof(long))
if (u.x[residue++] == '\0')
- return (laddr - orig_addr) + residue;
+ return nread + residue;
residue = 0;
addr += sizeof(long);
- laddr += m;
+ laddr = (char *)laddr + m;
nread += m;
len -= m;
}
@@ -509,7 +509,7 @@ upoken_pokedata(const int pid, kernel_ulong_t addr, unsigned int len,
addr += sizeof(long);
nwritten += sizeof(long);
- our_addr += sizeof(long);
+ our_addr = (char *)our_addr + sizeof(long);
len -= sizeof(long);
}
--
2.30.0
|