Skip to content

Commit 7f6066d

Browse files
sumanthkorikkaryonghong-song
authored andcommitted
bcc/tools: Replace bpf_probe_read with bpf_probe_read_kernel
It is recommended to use bpf_probe_read_kernel_{str} in the bpf tools. See kernel commit 0ebeea8ca8a4 ("bpf: Restrict bpf_probe_read{, str}() only to archs where they work") Signed-off-by: Sumanth Korikkar <[email protected]> Acked-by: Ilya Leoshkevich <[email protected]>
1 parent 112f529 commit 7f6066d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+116
-116
lines changed

src/cc/libbpf.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,8 @@ static void bpf_print_hints(int ret, char *log)
385385
if (strstr(log, "invalid mem access 'inv'") != NULL) {
386386
fprintf(stderr, "HINT: The invalid mem access 'inv' error can happen "
387387
"if you try to dereference memory without first using "
388-
"bpf_probe_read() to copy it to the BPF stack. Sometimes the "
389-
"bpf_probe_read is automatic by the bcc rewriter, other times "
388+
"bpf_probe_read_kernel() to copy it to the BPF stack. Sometimes the "
389+
"bpf_probe_read_kernel() is automatic by the bcc rewriter, other times "
390390
"you'll need to be explicit.\n\n");
391391
}
392392

tests/python/test_clang.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def test_probe_read3(self):
8080
text = """
8181
#define KBUILD_MODNAME "foo"
8282
#include <net/tcp.h>
83-
#define _(P) ({typeof(P) val = 0; bpf_probe_read(&val, sizeof(val), &P); val;})
83+
#define _(P) ({typeof(P) val = 0; bpf_probe_read_kernel(&val, sizeof(val), &P); val;})
8484
int count_tcp(struct pt_regs *ctx, struct sk_buff *skb) {
8585
return _(TCP_SKB_CB(skb)->tcp_gso_size);
8686
}
@@ -92,7 +92,7 @@ def test_probe_read4(self):
9292
text = """
9393
#define KBUILD_MODNAME "foo"
9494
#include <net/tcp.h>
95-
#define _(P) ({typeof(P) val = 0; bpf_probe_read(&val, sizeof(val), &P); val;})
95+
#define _(P) ({typeof(P) val = 0; bpf_probe_read_kernel(&val, sizeof(val), &P); val;})
9696
int test(struct pt_regs *ctx, struct sk_buff *skb) {
9797
return _(TCP_SKB_CB(skb)->tcp_gso_size) + skb->protocol;
9898
}
@@ -111,7 +111,7 @@ def test_probe_read_whitelist1(self):
111111
// failing below statement
112112
// return TCP_SKB_CB(skb)->tcp_gso_size;
113113
u16 val = 0;
114-
bpf_probe_read(&val, sizeof(val), &(TCP_SKB_CB(skb)->tcp_gso_size));
114+
bpf_probe_read_kernel(&val, sizeof(val), &(TCP_SKB_CB(skb)->tcp_gso_size));
115115
return val;
116116
}
117117
"""
@@ -129,7 +129,7 @@ def test_probe_read_whitelist2(self):
129129
// failing below statement
130130
// return TCP_SKB_CB(skb)->tcp_gso_size;
131131
u16 val = 0;
132-
bpf_probe_read(&val, sizeof(val), &(TCP_SKB_CB(skb)->tcp_gso_size));
132+
bpf_probe_read_kernel(&val, sizeof(val), &(TCP_SKB_CB(skb)->tcp_gso_size));
133133
return val + skb->protocol;
134134
}
135135
"""
@@ -1144,7 +1144,7 @@ def test_no_probe_read_addrof(self):
11441144
#include <net/inet_sock.h>
11451145
static inline int test_help(__be16 *addr) {
11461146
__be16 val = 0;
1147-
bpf_probe_read(&val, sizeof(val), addr);
1147+
bpf_probe_read_kernel(&val, sizeof(val), addr);
11481148
return val;
11491149
}
11501150
int test(struct pt_regs *ctx) {

tools/argdist.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def _parse_signature(self):
4242
param_name = param[index + 1:].strip()
4343
self.param_types[param_name] = param_type
4444
# Maintain list of user params. Then later decide to
45-
# switch to bpf_probe_read or bpf_probe_read_user.
45+
# switch to bpf_probe_read_kernel or bpf_probe_read_user.
4646
if "__user" in param_type.split():
4747
self.probe_user_list.add(param_name)
4848

@@ -299,7 +299,7 @@ def _generate_field_assignment(self, i):
299299
self.exprs[i] in self.probe_user_list:
300300
probe_readfunc = "bpf_probe_read_user"
301301
else:
302-
probe_readfunc = "bpf_probe_read"
302+
probe_readfunc = "bpf_probe_read_kernel"
303303
return (text + " %s(&__key.v%d.s," +
304304
" sizeof(__key.v%d.s), (void *)%s);\n") % \
305305
(probe_readfunc, i, i, self.exprs[i])

tools/bindsnoop.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@
215215
struct inet_sock *sockp = (struct inet_sock *)skp;
216216
217217
u16 sport = 0;
218-
bpf_probe_read(&sport, sizeof(sport), &sockp->inet_sport);
218+
bpf_probe_read_kernel(&sport, sizeof(sport), &sockp->inet_sport);
219219
sport = ntohs(sport);
220220
221221
FILTER_PORT
@@ -296,7 +296,7 @@
296296
struct ipv4_bind_data_t data4 = {.pid = pid, .ip = ipver};
297297
data4.uid = bpf_get_current_uid_gid();
298298
data4.ts_us = bpf_ktime_get_ns() / 1000;
299-
bpf_probe_read(
299+
bpf_probe_read_kernel(
300300
&data4.saddr, sizeof(data4.saddr), &sockp->inet_saddr);
301301
data4.return_code = ret;
302302
data4.sport = sport;
@@ -309,15 +309,15 @@
309309
'ipv6': {
310310
'count': """
311311
struct ipv6_flow_key_t flow_key = {};
312-
bpf_probe_read(&flow_key.saddr, sizeof(flow_key.saddr),
312+
bpf_probe_read_kernel(&flow_key.saddr, sizeof(flow_key.saddr),
313313
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
314314
flow_key.sport = sport;
315315
ipv6_count.increment(flow_key);""",
316316
'trace': """
317317
struct ipv6_bind_data_t data6 = {.pid = pid, .ip = ipver};
318318
data6.uid = bpf_get_current_uid_gid();
319319
data6.ts_us = bpf_ktime_get_ns() / 1000;
320-
bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
320+
bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
321321
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
322322
data6.return_code = ret;
323323
data6.sport = sport;

tools/biolatency.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
bpf_text = bpf_text.replace('STORE',
113113
'disk_key_t key = {.slot = bpf_log2l(delta)}; ' +
114114
'void *__tmp = (void *)req->rq_disk->disk_name; ' +
115-
'bpf_probe_read(&key.disk, sizeof(key.disk), __tmp); ' +
115+
'bpf_probe_read_kernel(&key.disk, sizeof(key.disk), __tmp); ' +
116116
'dist.increment(key);')
117117
elif args.flags:
118118
bpf_text = bpf_text.replace('STORAGE',

tools/biosnoop.lua

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ int trace_req_completion(struct pt_regs *ctx, struct request *req)
9090
data.pid = valp->pid;
9191
data.len = req->__data_len;
9292
data.sector = req->__sector;
93-
bpf_probe_read(&data.name, sizeof(data.name), valp->name);
94-
bpf_probe_read(&data.disk_name, sizeof(data.disk_name),
93+
bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
94+
bpf_probe_read_kernel(&data.disk_name, sizeof(data.disk_name),
9595
req->rq_disk->disk_name);
9696
}
9797

tools/biosnoop.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@
117117
data.pid = valp->pid;
118118
data.len = req->__data_len;
119119
data.sector = req->__sector;
120-
bpf_probe_read(&data.name, sizeof(data.name), valp->name);
120+
bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
121121
struct gendisk *rq_disk = req->rq_disk;
122-
bpf_probe_read(&data.disk_name, sizeof(data.disk_name),
122+
bpf_probe_read_kernel(&data.disk_name, sizeof(data.disk_name),
123123
rq_disk->disk_name);
124124
}
125125

tools/bitesize.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
TRACEPOINT_PROBE(block, block_rq_issue)
3131
{
3232
struct proc_key_t key = {.slot = bpf_log2l(args->bytes / 1024)};
33-
bpf_probe_read(&key.name, sizeof(key.name), args->comm);
33+
bpf_probe_read_kernel(&key.name, sizeof(key.name), args->comm);
3434
dist.increment(key);
3535
return 0;
3636
}

tools/btrfsslower.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@
233233
qs = de->d_name;
234234
if (qs.len == 0)
235235
return 0;
236-
bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
236+
bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
237237
238238
// output
239239
events.perf_submit(ctx, &data, sizeof(data));

tools/compactsnoop.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@
108108
static inline int zone_to_nid_(struct zone *zone)
109109
{
110110
int node;
111-
bpf_probe_read(&node, sizeof(node), &zone->node);
111+
bpf_probe_read_kernel(&node, sizeof(node), &zone->node);
112112
return node;
113113
}
114114
#else
@@ -122,7 +122,7 @@
122122
static inline int zone_idx_(struct zone *zone)
123123
{
124124
struct pglist_data *zone_pgdat = NULL;
125-
bpf_probe_read(&zone_pgdat, sizeof(zone_pgdat), &zone->zone_pgdat);
125+
bpf_probe_read_kernel(&zone_pgdat, sizeof(zone_pgdat), &zone->zone_pgdat);
126126
return zone - zone_pgdat->node_zones;
127127
}
128128
@@ -132,13 +132,13 @@
132132
u64 _watermark[NR_WMARK] = {};
133133
u64 watermark_boost = 0;
134134
135-
bpf_probe_read(&_watermark, sizeof(_watermark), &zone->_watermark);
136-
bpf_probe_read(&watermark_boost, sizeof(watermark_boost),
135+
bpf_probe_read_kernel(&_watermark, sizeof(_watermark), &zone->_watermark);
136+
bpf_probe_read_kernel(&watermark_boost, sizeof(watermark_boost),
137137
&zone->watermark_boost);
138138
valp->min = _watermark[WMARK_MIN] + watermark_boost;
139139
valp->low = _watermark[WMARK_LOW] + watermark_boost;
140140
valp->high = _watermark[WMARK_HIGH] + watermark_boost;
141-
bpf_probe_read(&valp->free, sizeof(valp->free),
141+
bpf_probe_read_kernel(&valp->free, sizeof(valp->free),
142142
&zone->vm_stat[NR_FREE_PAGES]);
143143
}
144144
#endif

tools/dbslower.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,8 @@
158158
data.timestamp = tempp->timestamp;
159159
data.duration = delta;
160160
#if defined(MYSQL56) || defined(MYSQL57)
161-
// We already copied string to the bpf stack. Hence use bpf_probe_read()
162-
bpf_probe_read(&data.query, sizeof(data.query), tempp->query);
161+
// We already copied string to the bpf stack. Hence use bpf_probe_read_kernel()
162+
bpf_probe_read_kernel(&data.query, sizeof(data.query), tempp->query);
163163
#else
164164
// USDT - we didnt copy string to the bpf stack before.
165165
bpf_probe_read_user(&data.query, sizeof(data.query), tempp->query);

tools/dcsnoop.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
.type = type,
8585
};
8686
bpf_get_current_comm(&data.comm, sizeof(data.comm));
87-
bpf_probe_read(&data.filename, sizeof(data.filename), name);
87+
bpf_probe_read_kernel(&data.filename, sizeof(data.filename), name);
8888
events.perf_submit(ctx, &data, sizeof(data));
8989
}
9090
@@ -102,7 +102,7 @@
102102
struct entry_t entry = {};
103103
const char *fname = name->name;
104104
if (fname) {
105-
bpf_probe_read(&entry.name, sizeof(entry.name), (void *)fname);
105+
bpf_probe_read_kernel(&entry.name, sizeof(entry.name), (void *)fname);
106106
}
107107
entrybypid.update(&pid, &entry);
108108
return 0;

tools/deadlock.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ int trace_mutex_release(struct pt_regs *ctx, void *mutex_addr) {
164164
// invalid memory access on `leaf->held_mutexes[i]` below. On newer kernels,
165165
// we can avoid making this extra copy in `value` and use `leaf` directly.
166166
struct thread_to_held_mutex_leaf_t value = {};
167-
bpf_probe_read(&value, sizeof(struct thread_to_held_mutex_leaf_t), leaf);
167+
bpf_probe_read_user(&value, sizeof(struct thread_to_held_mutex_leaf_t), leaf);
168168

169169
#pragma unroll
170170
for (int i = 0; i < MAX_HELD_MUTEXES; ++i) {

tools/drsnoop.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def K(x):
128128
if (bpf_get_current_comm(&val.name, sizeof(val.name)) == 0) {
129129
val.id = id;
130130
val.ts = bpf_ktime_get_ns();
131-
bpf_probe_read(&val.vm_stat, sizeof(val.vm_stat), (const void *)%s);
131+
bpf_probe_read_kernel(&val.vm_stat, sizeof(val.vm_stat), (const void *)%s);
132132
start.update(&id, &val);
133133
}
134134
return 0;
@@ -150,8 +150,8 @@ def K(x):
150150
data.ts = ts / 1000;
151151
data.id = valp->id;
152152
data.uid = bpf_get_current_uid_gid();
153-
bpf_probe_read(&data.name, sizeof(data.name), valp->name);
154-
bpf_probe_read(&data.vm_stat, sizeof(data.vm_stat), valp->vm_stat);
153+
bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
154+
bpf_probe_read_kernel(&data.vm_stat, sizeof(data.vm_stat), valp->vm_stat);
155155
data.nr_reclaimed = args->nr_reclaimed;
156156
157157
events.perf_submit(args, &data, sizeof(data));

tools/ext4slower.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@
226226
qs = de->d_name;
227227
if (qs.len == 0)
228228
return 0;
229-
bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
229+
bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
230230
231231
// output
232232
events.perf_submit(ctx, &data, sizeof(data));

tools/filelife.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
if (bpf_get_current_comm(&data.comm, sizeof(data.comm)) == 0) {
9191
data.pid = pid;
9292
data.delta = delta;
93-
bpf_probe_read(&data.fname, sizeof(data.fname), d_name.name);
93+
bpf_probe_read_kernel(&data.fname, sizeof(data.fname), d_name.name);
9494
}
9595
9696
events.perf_submit(ctx, &data, sizeof(data));

tools/fileslower.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
113113
struct qstr d_name = de->d_name;
114114
val.name_len = d_name.len;
115-
bpf_probe_read(&val.name, sizeof(val.name), d_name.name);
115+
bpf_probe_read_kernel(&val.name, sizeof(val.name), d_name.name);
116116
bpf_get_current_comm(&val.comm, sizeof(val.comm));
117117
entryinfo.update(&pid, &val);
118118
@@ -159,8 +159,8 @@
159159
data.sz = valp->sz;
160160
data.delta_us = delta_us;
161161
data.name_len = valp->name_len;
162-
bpf_probe_read(&data.name, sizeof(data.name), valp->name);
163-
bpf_probe_read(&data.comm, sizeof(data.comm), valp->comm);
162+
bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
163+
bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
164164
events.perf_submit(ctx, &data, sizeof(data));
165165
166166
return 0;

tools/filetop.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def signal_ignore(signal_value, frame):
108108
struct info_t info = {.pid = pid};
109109
bpf_get_current_comm(&info.comm, sizeof(info.comm));
110110
info.name_len = d_name.len;
111-
bpf_probe_read(&info.name, sizeof(info.name), d_name.name);
111+
bpf_probe_read_kernel(&info.name, sizeof(info.name), d_name.name);
112112
if (S_ISREG(mode)) {
113113
info.type = 'R';
114114
} else if (S_ISSOCK(mode)) {

tools/funcslower.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@
206206
#endif
207207
208208
#ifdef GRAB_ARGS
209-
bpf_probe_read(&data.args[0], sizeof(data.args), entryp->args);
209+
bpf_probe_read_kernel(&data.args[0], sizeof(data.args), entryp->args);
210210
#endif
211211
bpf_get_current_comm(&data.comm, sizeof(data.comm));
212212
events.perf_submit(ctx, &data, sizeof(data));

tools/gethostlatency.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@
8686
if (valp == 0)
8787
return 0; // missed start
8888
89-
bpf_probe_read(&data.comm, sizeof(data.comm), valp->comm);
90-
bpf_probe_read(&data.host, sizeof(data.host), (void *)valp->host);
89+
bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
90+
bpf_probe_read_kernel(&data.host, sizeof(data.host), (void *)valp->host);
9191
data.pid = valp->pid;
9292
data.delta = tsp - valp->ts;
9393
events.perf_submit(ctx, &data, sizeof(data));

tools/hardirqs.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383
char *name = (char *)action->name;
8484
8585
irq_key_t key = {.slot = 0 /* ignore */};
86-
bpf_probe_read(&key.name, sizeof(key.name), name);
86+
bpf_probe_read_kernel(&key.name, sizeof(key.name), name);
8787
dist.increment(key);
8888
8989
return 0;
@@ -129,12 +129,12 @@
129129
if args.dist:
130130
bpf_text = bpf_text.replace('STORE',
131131
'irq_key_t key = {.slot = bpf_log2l(delta / %d)};' % factor +
132-
'bpf_probe_read(&key.name, sizeof(key.name), name);' +
132+
'bpf_probe_read_kernel(&key.name, sizeof(key.name), name);' +
133133
'dist.increment(key);')
134134
else:
135135
bpf_text = bpf_text.replace('STORE',
136136
'irq_key_t key = {.slot = 0 /* ignore */};' +
137-
'bpf_probe_read(&key.name, sizeof(key.name), name);' +
137+
'bpf_probe_read_kernel(&key.name, sizeof(key.name), name);' +
138138
'dist.increment(key, delta);')
139139
if debug or args.ebpf:
140140
print(bpf_text)

tools/killsnoop.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
return 0;
8888
}
8989
90-
bpf_probe_read(&data.comm, sizeof(data.comm), valp->comm);
90+
bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
9191
data.pid = pid;
9292
data.tpid = valp->tpid;
9393
data.ret = PT_REGS_RC(ctx);

tools/mdflush.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
#else
4848
struct gendisk *bi_disk = bio->bi_bdev->bd_disk;
4949
#endif
50-
bpf_probe_read(&data.disk, sizeof(data.disk), bi_disk->disk_name);
50+
bpf_probe_read_kernel(&data.disk, sizeof(data.disk), bi_disk->disk_name);
5151
events.perf_submit(ctx, &data, sizeof(data));
5252
return 0;
5353
}

tools/memleak.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ def run_command_get_pid(command):
287287
288288
memptrs.delete(&pid);
289289
290-
if (bpf_probe_read(&addr, sizeof(void*), (void*)(size_t)*memptr64))
290+
if (bpf_probe_read_user(&addr, sizeof(void*), (void*)(size_t)*memptr64))
291291
return 0;
292292
293293
u64 addr64 = (u64)(size_t)addr;

tools/nfsslower.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -190,18 +190,18 @@
190190
struct qstr qs = {};
191191
if(type == TRACE_GETATTR)
192192
{
193-
bpf_probe_read(&de,sizeof(de), &valp->d);
193+
bpf_probe_read_kernel(&de,sizeof(de), &valp->d);
194194
}
195195
else
196196
{
197-
bpf_probe_read(&de, sizeof(de), &valp->fp->f_path.dentry);
197+
bpf_probe_read_kernel(&de, sizeof(de), &valp->fp->f_path.dentry);
198198
}
199199
200-
bpf_probe_read(&qs, sizeof(qs), (void *)&de->d_name);
200+
bpf_probe_read_kernel(&qs, sizeof(qs), (void *)&de->d_name);
201201
if (qs.len == 0)
202202
return 0;
203203
204-
bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
204+
bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
205205
// output
206206
events.perf_submit(ctx, &data, sizeof(data));
207207
return 0;

0 commit comments

Comments
 (0)