summaryrefslogtreecommitdiff
path: root/pkg/strace/patch/0005-Avoid-pointer-arithmetic-on-void.patch
blob: 3c8754c2b8c0ab4c7bc87bacba5e864556ee941f (plain)
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
From c154f9dfaaccabc52af12ccabc86e9d0c6c18ada 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         |  4 ++--
 src/tee.c              |  2 +-
 src/ucopy.c            | 12 ++++++------
 5 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/src/netlink_smc_diag.c b/src/netlink_smc_diag.c
index 74e78b966..c3a28a839 100644
--- a/src/netlink_smc_diag.c
+++ b/src/netlink_smc_diag.c
@@ -42,7 +42,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");
@@ -261,7 +261,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 dc5f9d10c..87f7ff973 100644
--- a/src/print_timespec.h
+++ b/src/print_timespec.h
@@ -66,6 +66,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)) {
 		tprint_unavailable();
 		return false;
@@ -73,10 +75,10 @@ PRINT_TIMESPEC_ARRAY_DATA_SIZE(const void *arg, const unsigned int nmemb,
 
 	tprint_array_begin();
 
-	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)
 			tprint_array_next();
-		print_unaligned_timespec_t(arg);
+		print_unaligned_timespec_t(ts);
 	}
 
 	tprint_array_end();
diff --git a/src/sockaddr.c b/src/sockaddr.c
index ee1ce8828..c1f9b1740 100644
--- a/src/sockaddr.c
+++ b/src/sockaddr.c
@@ -583,7 +583,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");
@@ -780,7 +780,7 @@ print_sockaddr_data_rxrpc(struct tcb *tcp, const void *const buf,
 	tprints_field_name("transport");
 	tprint_struct_begin();
 
-	const void *const transport_buf = (void *) &sa->transport
+	const void *const transport_buf = (char *) &sa->transport
 					  + sizeof(sa->transport.family);
 	const int transport_len = MIN(sa->transport_len,
 				      len - offsetof(struct sockaddr_rxrpc,
diff --git a/src/tee.c b/src/tee.c
index c62566800..1596a5095 100644
--- a/src/tee.c
+++ b/src/tee.c
@@ -69,7 +69,7 @@ tee_fetch_buf_data(struct tcb *const tcp,
 		tee_print_buf(buf);
 		return RVAL_IOCTL_DECODED;
 	}
-	uint32_t *num_params = (uint32_t *) (arg_struct + num_params_offs);
+	uint32_t *num_params = (uint32_t *) ((char *)arg_struct + num_params_offs);
 	if (entering(tcp) &&
 	    (arg_size + TEE_IOCTL_PARAM_SIZE(*num_params) != buf->buf_len)) {
 		/*
diff --git a/src/ucopy.c b/src/ucopy.c
index b4e746b0b..007b5373e 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;
 	}
@@ -282,7 +282,7 @@ umoven_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
 		memcpy(laddr, &u.data[residue], m);
 		residue = 0;
 		addr += sizeof(long);
-		laddr += m;
+		laddr = (char *)laddr + m;
 		nread += m;
 		len -= m;
 	}
@@ -378,10 +378,10 @@ umovestr_peekdata(const int pid, kernel_ulong_t addr, unsigned int len,
 		memcpy(laddr, &u.data[residue], m);
 		while (residue < sizeof(long))
 			if (u.data[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;
 	}
@@ -502,7 +502,7 @@ upoken_pokedata(const int pid, kernel_ulong_t addr, unsigned int len,
 
 		addr += sizeof(long);
 		nwritten += npoke;
-		our_addr += npoke;
+		our_addr = (char *)our_addr + npoke;
 		len -= npoke;
 	}
 
@@ -515,7 +515,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.44.0