summaryrefslogtreecommitdiff
path: root/pkg/strace/patch/0005-Avoid-pointer-arithmetic-on-void.patch
blob: ba2e7e89410ba31879015794250f321fd5fbb129 (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
From 1626ee384c34018d4d0f2c887cfdca05bccec2ff 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 *`

---
 netlink_smc_diag.c | 4 ++--
 print_timespec.h   | 6 ++++--
 sockaddr.c         | 2 +-
 ucopy.c            | 8 ++++----
 4 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/netlink_smc_diag.c b/netlink_smc_diag.c
index 16815fde..09a748a8 100644
--- a/netlink_smc_diag.c
+++ b/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");
@@ -212,7 +212,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_???");
 			PRINT_FIELD_XVAL(", ", msg, diag_fallback,
diff --git a/print_timespec.h b/print_timespec.h
index 0f0e296d..4449f857 100644
--- a/print_timespec.h
+++ b/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/sockaddr.c b/sockaddr.c
index b6b9aa7d..948fa517 100644
--- a/sockaddr.c
+++ b/sockaddr.c
@@ -475,7 +475,7 @@ print_sockaddr_data_ll(const void *const buf, const int addrlen)
 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("sa_data=");
diff --git a/ucopy.c b/ucopy.c
index 59af8641..3ff59781 100644
--- a/ucopy.c
+++ b/ucopy.c
@@ -165,7 +165,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;
 	}
@@ -227,7 +227,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;
 	}
@@ -324,10 +324,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;
 	}
-- 
2.27.0