Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-doc
Path: blob/main/website/static/security/patches/EN-15:12/netstat.patch
18096 views
1
Index: usr.bin/netstat/main.c
2
===================================================================
3
--- usr.bin/netstat/main.c (revision 286847)
4
+++ usr.bin/netstat/main.c (working copy)
5
@@ -785,19 +785,31 @@ kread_counter(u_long addr)
6
int
7
kread_counters(u_long addr, void *buf, size_t size)
8
{
9
- uint64_t *c = buf;
10
+ uint64_t *c;
11
+ u_long *counters;
12
+ size_t i, n;
13
14
if (kvmd_init() < 0)
15
return (-1);
16
17
- if (kread(addr, buf, size) < 0)
18
+ if (size % sizeof(uint64_t) != 0) {
19
+ warnx("kread_counters: invalid counter set size");
20
return (-1);
21
+ }
22
23
- while (size != 0) {
24
- *c = kvm_counter_u64_fetch(kvmd, *c);
25
- size -= sizeof(*c);
26
- c++;
27
+ n = size / sizeof(uint64_t);
28
+ if ((counters = malloc(n * sizeof(u_long))) == NULL)
29
+ err(-1, "malloc");
30
+ if (kread(addr, counters, n * sizeof(u_long)) < 0) {
31
+ free(counters);
32
+ return (-1);
33
}
34
+
35
+ c = buf;
36
+ for (i = 0; i < n; i++)
37
+ c[i] = kvm_counter_u64_fetch(kvmd, counters[i]);
38
+
39
+ free(counters);
40
return (0);
41
}
42
43
44