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]>
diff --git a/tools/argdist.py b/tools/argdist.py
index 0bc1414..88da0d8 100755
--- a/tools/argdist.py
+++ b/tools/argdist.py
@@ -42,7 +42,7 @@
param_name = param[index + 1:].strip()
self.param_types[param_name] = param_type
# Maintain list of user params. Then later decide to
- # switch to bpf_probe_read or bpf_probe_read_user.
+ # switch to bpf_probe_read_kernel or bpf_probe_read_user.
if "__user" in param_type.split():
self.probe_user_list.add(param_name)
@@ -299,7 +299,7 @@
self.exprs[i] in self.probe_user_list:
probe_readfunc = "bpf_probe_read_user"
else:
- probe_readfunc = "bpf_probe_read"
+ probe_readfunc = "bpf_probe_read_kernel"
return (text + " %s(&__key.v%d.s," +
" sizeof(__key.v%d.s), (void *)%s);\n") % \
(probe_readfunc, i, i, self.exprs[i])
diff --git a/tools/bindsnoop.py b/tools/bindsnoop.py
index de569c2..e08ebf8 100755
--- a/tools/bindsnoop.py
+++ b/tools/bindsnoop.py
@@ -215,7 +215,7 @@
struct inet_sock *sockp = (struct inet_sock *)skp;
u16 sport = 0;
- bpf_probe_read(&sport, sizeof(sport), &sockp->inet_sport);
+ bpf_probe_read_kernel(&sport, sizeof(sport), &sockp->inet_sport);
sport = ntohs(sport);
FILTER_PORT
@@ -296,7 +296,7 @@
struct ipv4_bind_data_t data4 = {.pid = pid, .ip = ipver};
data4.uid = bpf_get_current_uid_gid();
data4.ts_us = bpf_ktime_get_ns() / 1000;
- bpf_probe_read(
+ bpf_probe_read_kernel(
&data4.saddr, sizeof(data4.saddr), &sockp->inet_saddr);
data4.return_code = ret;
data4.sport = sport;
@@ -309,7 +309,7 @@
'ipv6': {
'count': """
struct ipv6_flow_key_t flow_key = {};
- bpf_probe_read(&flow_key.saddr, sizeof(flow_key.saddr),
+ bpf_probe_read_kernel(&flow_key.saddr, sizeof(flow_key.saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
flow_key.sport = sport;
ipv6_count.increment(flow_key);""",
@@ -317,7 +317,7 @@
struct ipv6_bind_data_t data6 = {.pid = pid, .ip = ipver};
data6.uid = bpf_get_current_uid_gid();
data6.ts_us = bpf_ktime_get_ns() / 1000;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
data6.return_code = ret;
data6.sport = sport;
diff --git a/tools/biolatency.py b/tools/biolatency.py
index 86d9943..c608dcb 100755
--- a/tools/biolatency.py
+++ b/tools/biolatency.py
@@ -112,7 +112,7 @@
bpf_text = bpf_text.replace('STORE',
'disk_key_t key = {.slot = bpf_log2l(delta)}; ' +
'void *__tmp = (void *)req->rq_disk->disk_name; ' +
- 'bpf_probe_read(&key.disk, sizeof(key.disk), __tmp); ' +
+ 'bpf_probe_read_kernel(&key.disk, sizeof(key.disk), __tmp); ' +
'dist.increment(key);')
elif args.flags:
bpf_text = bpf_text.replace('STORAGE',
diff --git a/tools/biosnoop.lua b/tools/biosnoop.lua
index 21261d0..8d9b6a1 100755
--- a/tools/biosnoop.lua
+++ b/tools/biosnoop.lua
@@ -90,8 +90,8 @@
data.pid = valp->pid;
data.len = req->__data_len;
data.sector = req->__sector;
- bpf_probe_read(&data.name, sizeof(data.name), valp->name);
- bpf_probe_read(&data.disk_name, sizeof(data.disk_name),
+ bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
+ bpf_probe_read_kernel(&data.disk_name, sizeof(data.disk_name),
req->rq_disk->disk_name);
}
diff --git a/tools/biosnoop.py b/tools/biosnoop.py
index b550281..ff9b842 100755
--- a/tools/biosnoop.py
+++ b/tools/biosnoop.py
@@ -117,9 +117,9 @@
data.pid = valp->pid;
data.len = req->__data_len;
data.sector = req->__sector;
- bpf_probe_read(&data.name, sizeof(data.name), valp->name);
+ bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
struct gendisk *rq_disk = req->rq_disk;
- bpf_probe_read(&data.disk_name, sizeof(data.disk_name),
+ bpf_probe_read_kernel(&data.disk_name, sizeof(data.disk_name),
rq_disk->disk_name);
}
diff --git a/tools/bitesize.py b/tools/bitesize.py
index f4cea7c..6ae71dc 100755
--- a/tools/bitesize.py
+++ b/tools/bitesize.py
@@ -30,7 +30,7 @@
TRACEPOINT_PROBE(block, block_rq_issue)
{
struct proc_key_t key = {.slot = bpf_log2l(args->bytes / 1024)};
- bpf_probe_read(&key.name, sizeof(key.name), args->comm);
+ bpf_probe_read_kernel(&key.name, sizeof(key.name), args->comm);
dist.increment(key);
return 0;
}
diff --git a/tools/btrfsslower.py b/tools/btrfsslower.py
index b30880a..9e46243 100755
--- a/tools/btrfsslower.py
+++ b/tools/btrfsslower.py
@@ -233,7 +233,7 @@
qs = de->d_name;
if (qs.len == 0)
return 0;
- bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
+ bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
// output
events.perf_submit(ctx, &data, sizeof(data));
diff --git a/tools/compactsnoop.py b/tools/compactsnoop.py
index 7f9ce7e..71ef95b 100755
--- a/tools/compactsnoop.py
+++ b/tools/compactsnoop.py
@@ -108,7 +108,7 @@
static inline int zone_to_nid_(struct zone *zone)
{
int node;
- bpf_probe_read(&node, sizeof(node), &zone->node);
+ bpf_probe_read_kernel(&node, sizeof(node), &zone->node);
return node;
}
#else
@@ -122,7 +122,7 @@
static inline int zone_idx_(struct zone *zone)
{
struct pglist_data *zone_pgdat = NULL;
- bpf_probe_read(&zone_pgdat, sizeof(zone_pgdat), &zone->zone_pgdat);
+ bpf_probe_read_kernel(&zone_pgdat, sizeof(zone_pgdat), &zone->zone_pgdat);
return zone - zone_pgdat->node_zones;
}
@@ -132,13 +132,13 @@
u64 _watermark[NR_WMARK] = {};
u64 watermark_boost = 0;
- bpf_probe_read(&_watermark, sizeof(_watermark), &zone->_watermark);
- bpf_probe_read(&watermark_boost, sizeof(watermark_boost),
+ bpf_probe_read_kernel(&_watermark, sizeof(_watermark), &zone->_watermark);
+ bpf_probe_read_kernel(&watermark_boost, sizeof(watermark_boost),
&zone->watermark_boost);
valp->min = _watermark[WMARK_MIN] + watermark_boost;
valp->low = _watermark[WMARK_LOW] + watermark_boost;
valp->high = _watermark[WMARK_HIGH] + watermark_boost;
- bpf_probe_read(&valp->free, sizeof(valp->free),
+ bpf_probe_read_kernel(&valp->free, sizeof(valp->free),
&zone->vm_stat[NR_FREE_PAGES]);
}
#endif
diff --git a/tools/dbslower.py b/tools/dbslower.py
index ffbb5e1..9db225f 100755
--- a/tools/dbslower.py
+++ b/tools/dbslower.py
@@ -158,8 +158,8 @@
data.timestamp = tempp->timestamp;
data.duration = delta;
#if defined(MYSQL56) || defined(MYSQL57)
- // We already copied string to the bpf stack. Hence use bpf_probe_read()
- bpf_probe_read(&data.query, sizeof(data.query), tempp->query);
+ // We already copied string to the bpf stack. Hence use bpf_probe_read_kernel()
+ bpf_probe_read_kernel(&data.query, sizeof(data.query), tempp->query);
#else
// USDT - we didnt copy string to the bpf stack before.
bpf_probe_read_user(&data.query, sizeof(data.query), tempp->query);
diff --git a/tools/dcsnoop.py b/tools/dcsnoop.py
index 331ee30..7c50152 100755
--- a/tools/dcsnoop.py
+++ b/tools/dcsnoop.py
@@ -84,7 +84,7 @@
.type = type,
};
bpf_get_current_comm(&data.comm, sizeof(data.comm));
- bpf_probe_read(&data.filename, sizeof(data.filename), name);
+ bpf_probe_read_kernel(&data.filename, sizeof(data.filename), name);
events.perf_submit(ctx, &data, sizeof(data));
}
@@ -102,7 +102,7 @@
struct entry_t entry = {};
const char *fname = name->name;
if (fname) {
- bpf_probe_read(&entry.name, sizeof(entry.name), (void *)fname);
+ bpf_probe_read_kernel(&entry.name, sizeof(entry.name), (void *)fname);
}
entrybypid.update(&pid, &entry);
return 0;
diff --git a/tools/deadlock.c b/tools/deadlock.c
index a6a6d91..b34a207 100644
--- a/tools/deadlock.c
+++ b/tools/deadlock.c
@@ -164,7 +164,7 @@
// invalid memory access on `leaf->held_mutexes[i]` below. On newer kernels,
// we can avoid making this extra copy in `value` and use `leaf` directly.
struct thread_to_held_mutex_leaf_t value = {};
- bpf_probe_read(&value, sizeof(struct thread_to_held_mutex_leaf_t), leaf);
+ bpf_probe_read_user(&value, sizeof(struct thread_to_held_mutex_leaf_t), leaf);
#pragma unroll
for (int i = 0; i < MAX_HELD_MUTEXES; ++i) {
diff --git a/tools/drsnoop.py b/tools/drsnoop.py
index 3dc8d7a..e4ea922 100755
--- a/tools/drsnoop.py
+++ b/tools/drsnoop.py
@@ -128,7 +128,7 @@
if (bpf_get_current_comm(&val.name, sizeof(val.name)) == 0) {
val.id = id;
val.ts = bpf_ktime_get_ns();
- bpf_probe_read(&val.vm_stat, sizeof(val.vm_stat), (const void *)%s);
+ bpf_probe_read_kernel(&val.vm_stat, sizeof(val.vm_stat), (const void *)%s);
start.update(&id, &val);
}
return 0;
@@ -150,8 +150,8 @@
data.ts = ts / 1000;
data.id = valp->id;
data.uid = bpf_get_current_uid_gid();
- bpf_probe_read(&data.name, sizeof(data.name), valp->name);
- bpf_probe_read(&data.vm_stat, sizeof(data.vm_stat), valp->vm_stat);
+ bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
+ bpf_probe_read_kernel(&data.vm_stat, sizeof(data.vm_stat), valp->vm_stat);
data.nr_reclaimed = args->nr_reclaimed;
events.perf_submit(args, &data, sizeof(data));
diff --git a/tools/ext4slower.py b/tools/ext4slower.py
index 0524f22..90663a5 100755
--- a/tools/ext4slower.py
+++ b/tools/ext4slower.py
@@ -226,7 +226,7 @@
qs = de->d_name;
if (qs.len == 0)
return 0;
- bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
+ bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
// output
events.perf_submit(ctx, &data, sizeof(data));
diff --git a/tools/filelife.py b/tools/filelife.py
index 38b6b12..9b7562f 100755
--- a/tools/filelife.py
+++ b/tools/filelife.py
@@ -90,7 +90,7 @@
if (bpf_get_current_comm(&data.comm, sizeof(data.comm)) == 0) {
data.pid = pid;
data.delta = delta;
- bpf_probe_read(&data.fname, sizeof(data.fname), d_name.name);
+ bpf_probe_read_kernel(&data.fname, sizeof(data.fname), d_name.name);
}
events.perf_submit(ctx, &data, sizeof(data));
diff --git a/tools/fileslower.py b/tools/fileslower.py
index 31e3adf..21b0e1c 100755
--- a/tools/fileslower.py
+++ b/tools/fileslower.py
@@ -112,7 +112,7 @@
struct qstr d_name = de->d_name;
val.name_len = d_name.len;
- bpf_probe_read(&val.name, sizeof(val.name), d_name.name);
+ bpf_probe_read_kernel(&val.name, sizeof(val.name), d_name.name);
bpf_get_current_comm(&val.comm, sizeof(val.comm));
entryinfo.update(&pid, &val);
@@ -159,8 +159,8 @@
data.sz = valp->sz;
data.delta_us = delta_us;
data.name_len = valp->name_len;
- bpf_probe_read(&data.name, sizeof(data.name), valp->name);
- bpf_probe_read(&data.comm, sizeof(data.comm), valp->comm);
+ bpf_probe_read_kernel(&data.name, sizeof(data.name), valp->name);
+ bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
events.perf_submit(ctx, &data, sizeof(data));
return 0;
diff --git a/tools/filetop.py b/tools/filetop.py
index dbe7a7d..34cfebc 100755
--- a/tools/filetop.py
+++ b/tools/filetop.py
@@ -108,7 +108,7 @@
struct info_t info = {.pid = pid};
bpf_get_current_comm(&info.comm, sizeof(info.comm));
info.name_len = d_name.len;
- bpf_probe_read(&info.name, sizeof(info.name), d_name.name);
+ bpf_probe_read_kernel(&info.name, sizeof(info.name), d_name.name);
if (S_ISREG(mode)) {
info.type = 'R';
} else if (S_ISSOCK(mode)) {
diff --git a/tools/funcslower.py b/tools/funcslower.py
index 9acd35d..ffa618d 100755
--- a/tools/funcslower.py
+++ b/tools/funcslower.py
@@ -206,7 +206,7 @@
#endif
#ifdef GRAB_ARGS
- bpf_probe_read(&data.args[0], sizeof(data.args), entryp->args);
+ bpf_probe_read_kernel(&data.args[0], sizeof(data.args), entryp->args);
#endif
bpf_get_current_comm(&data.comm, sizeof(data.comm));
events.perf_submit(ctx, &data, sizeof(data));
diff --git a/tools/gethostlatency.py b/tools/gethostlatency.py
index a6b8080..0ba5a1e 100755
--- a/tools/gethostlatency.py
+++ b/tools/gethostlatency.py
@@ -86,8 +86,8 @@
if (valp == 0)
return 0; // missed start
- bpf_probe_read(&data.comm, sizeof(data.comm), valp->comm);
- bpf_probe_read(&data.host, sizeof(data.host), (void *)valp->host);
+ bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
+ bpf_probe_read_kernel(&data.host, sizeof(data.host), (void *)valp->host);
data.pid = valp->pid;
data.delta = tsp - valp->ts;
events.perf_submit(ctx, &data, sizeof(data));
diff --git a/tools/hardirqs.py b/tools/hardirqs.py
index 589a890..fda804d 100755
--- a/tools/hardirqs.py
+++ b/tools/hardirqs.py
@@ -83,7 +83,7 @@
char *name = (char *)action->name;
irq_key_t key = {.slot = 0 /* ignore */};
- bpf_probe_read(&key.name, sizeof(key.name), name);
+ bpf_probe_read_kernel(&key.name, sizeof(key.name), name);
dist.increment(key);
return 0;
@@ -129,12 +129,12 @@
if args.dist:
bpf_text = bpf_text.replace('STORE',
'irq_key_t key = {.slot = bpf_log2l(delta / %d)};' % factor +
- 'bpf_probe_read(&key.name, sizeof(key.name), name);' +
+ 'bpf_probe_read_kernel(&key.name, sizeof(key.name), name);' +
'dist.increment(key);')
else:
bpf_text = bpf_text.replace('STORE',
'irq_key_t key = {.slot = 0 /* ignore */};' +
- 'bpf_probe_read(&key.name, sizeof(key.name), name);' +
+ 'bpf_probe_read_kernel(&key.name, sizeof(key.name), name);' +
'dist.increment(key, delta);')
if debug or args.ebpf:
print(bpf_text)
diff --git a/tools/killsnoop.py b/tools/killsnoop.py
index 2fb1dcb..977c6bb 100755
--- a/tools/killsnoop.py
+++ b/tools/killsnoop.py
@@ -87,7 +87,7 @@
return 0;
}
- bpf_probe_read(&data.comm, sizeof(data.comm), valp->comm);
+ bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
data.pid = pid;
data.tpid = valp->tpid;
data.ret = PT_REGS_RC(ctx);
diff --git a/tools/mdflush.py b/tools/mdflush.py
index f1c68ae..2abe15c 100755
--- a/tools/mdflush.py
+++ b/tools/mdflush.py
@@ -47,7 +47,7 @@
#else
struct gendisk *bi_disk = bio->bi_bdev->bd_disk;
#endif
- bpf_probe_read(&data.disk, sizeof(data.disk), bi_disk->disk_name);
+ bpf_probe_read_kernel(&data.disk, sizeof(data.disk), bi_disk->disk_name);
events.perf_submit(ctx, &data, sizeof(data));
return 0;
}
diff --git a/tools/memleak.py b/tools/memleak.py
index 9fa6805..5399019 100755
--- a/tools/memleak.py
+++ b/tools/memleak.py
@@ -287,7 +287,7 @@
memptrs.delete(&pid);
- if (bpf_probe_read(&addr, sizeof(void*), (void*)(size_t)*memptr64))
+ if (bpf_probe_read_user(&addr, sizeof(void*), (void*)(size_t)*memptr64))
return 0;
u64 addr64 = (u64)(size_t)addr;
diff --git a/tools/nfsslower.py b/tools/nfsslower.py
index 5e344b9..6b94f34 100755
--- a/tools/nfsslower.py
+++ b/tools/nfsslower.py
@@ -190,18 +190,18 @@
struct qstr qs = {};
if(type == TRACE_GETATTR)
{
- bpf_probe_read(&de,sizeof(de), &valp->d);
+ bpf_probe_read_kernel(&de,sizeof(de), &valp->d);
}
else
{
- bpf_probe_read(&de, sizeof(de), &valp->fp->f_path.dentry);
+ bpf_probe_read_kernel(&de, sizeof(de), &valp->fp->f_path.dentry);
}
- bpf_probe_read(&qs, sizeof(qs), (void *)&de->d_name);
+ bpf_probe_read_kernel(&qs, sizeof(qs), (void *)&de->d_name);
if (qs.len == 0)
return 0;
- bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
+ bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
// output
events.perf_submit(ctx, &data, sizeof(data));
return 0;
diff --git a/tools/oomkill.py b/tools/oomkill.py
index 298e353..3d6e927 100755
--- a/tools/oomkill.py
+++ b/tools/oomkill.py
@@ -45,7 +45,7 @@
data.tpid = p->pid;
data.pages = oc->totalpages;
bpf_get_current_comm(&data.fcomm, sizeof(data.fcomm));
- bpf_probe_read(&data.tcomm, sizeof(data.tcomm), p->comm);
+ bpf_probe_read_kernel(&data.tcomm, sizeof(data.tcomm), p->comm);
events.perf_submit(ctx, &data, sizeof(data));
}
"""
diff --git a/tools/opensnoop.py b/tools/opensnoop.py
index a68b13f..dffb021 100755
--- a/tools/opensnoop.py
+++ b/tools/opensnoop.py
@@ -151,7 +151,7 @@
// missed entry
return 0;
}
- bpf_probe_read(&data.comm, sizeof(data.comm), valp->comm);
+ bpf_probe_read_kernel(&data.comm, sizeof(data.comm), valp->comm);
bpf_probe_read_user(&data.fname, sizeof(data.fname), (void *)valp->fname);
data.id = valp->id;
data.ts = tsp / 1000;
diff --git a/tools/runqslower.py b/tools/runqslower.py
index 8f79060..c8b832c 100755
--- a/tools/runqslower.py
+++ b/tools/runqslower.py
@@ -28,7 +28,7 @@
# Licensed under the Apache License, Version 2.0 (the "License")
#
# 02-May-2018 Ivan Babrou Created this.
-# 18-Nov-2019 Gergely Bod BUG fix: Use bpf_probe_read_str() to extract the
+# 18-Nov-2019 Gergely Bod BUG fix: Use bpf_probe_read_kernel_str() to extract the
# process name from 'task_struct* next' in raw tp code.
# bpf_get_current_comm() operates on the current task
# which might already be different than 'next'.
@@ -164,8 +164,8 @@
struct task_struct *p = (struct task_struct *)ctx->args[0];
u32 tgid, pid;
- bpf_probe_read(&tgid, sizeof(tgid), &p->tgid);
- bpf_probe_read(&pid, sizeof(pid), &p->pid);
+ bpf_probe_read_kernel(&tgid, sizeof(tgid), &p->tgid);
+ bpf_probe_read_kernel(&pid, sizeof(pid), &p->pid);
return trace_enqueue(tgid, pid);
}
@@ -178,10 +178,10 @@
long state;
// ivcsw: treat like an enqueue event and store timestamp
- bpf_probe_read(&state, sizeof(long), (const void *)&prev->state);
+ bpf_probe_read_kernel(&state, sizeof(long), (const void *)&prev->state);
if (state == TASK_RUNNING) {
- bpf_probe_read(&tgid, sizeof(prev->tgid), &prev->tgid);
- bpf_probe_read(&pid, sizeof(prev->pid), &prev->pid);
+ bpf_probe_read_kernel(&tgid, sizeof(prev->tgid), &prev->tgid);
+ bpf_probe_read_kernel(&pid, sizeof(prev->pid), &prev->pid);
u64 ts = bpf_ktime_get_ns();
if (pid != 0) {
if (!(FILTER_PID) && !(FILTER_TGID)) {
@@ -191,7 +191,7 @@
}
- bpf_probe_read(&pid, sizeof(next->pid), &next->pid);
+ bpf_probe_read_kernel(&pid, sizeof(next->pid), &next->pid);
u64 *tsp, delta_us;
@@ -208,7 +208,7 @@
struct data_t data = {};
data.pid = pid;
data.delta_us = delta_us;
- bpf_probe_read_str(&data.task, sizeof(data.task), next->comm);
+ bpf_probe_read_kernel_str(&data.task, sizeof(data.task), next->comm);
// output
events.perf_submit(ctx, &data, sizeof(data));
diff --git a/tools/slabratetop.py b/tools/slabratetop.py
index b947e44..066f79d 100755
--- a/tools/slabratetop.py
+++ b/tools/slabratetop.py
@@ -88,7 +88,7 @@
{
struct info_t info = {};
const char *name = cachep->name;
- bpf_probe_read(&info.name, sizeof(info.name), name);
+ bpf_probe_read_kernel(&info.name, sizeof(info.name), name);
struct val_t *valp, zero = {};
valp = counts.lookup_or_try_init(&info, &zero);
diff --git a/tools/sofdsnoop.py b/tools/sofdsnoop.py
index 6df7fca..9bd5bb3 100755
--- a/tools/sofdsnoop.py
+++ b/tools/sofdsnoop.py
@@ -105,7 +105,7 @@
{
val->fd_cnt = min(num, MAX_FD);
- if (bpf_probe_read(&val->fd[0], MAX_FD * sizeof(int), data))
+ if (bpf_probe_read_kernel(&val->fd[0], MAX_FD * sizeof(int), data))
return -1;
events.perf_submit(ctx, val, sizeof(*val));
diff --git a/tools/solisten.py b/tools/solisten.py
index fc066d8..71c0a29 100755
--- a/tools/solisten.py
+++ b/tools/solisten.py
@@ -111,7 +111,7 @@
if (family == AF_INET) {
evt.laddr[0] = inet->inet_rcv_saddr;
} else if (family == AF_INET6) {
- bpf_probe_read(evt.laddr, sizeof(evt.laddr),
+ bpf_probe_read_kernel(evt.laddr, sizeof(evt.laddr),
sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
}
diff --git a/tools/tcpaccept.py b/tools/tcpaccept.py
index 4aa7fd7..1a5f1c7 100755
--- a/tools/tcpaccept.py
+++ b/tools/tcpaccept.py
@@ -117,7 +117,7 @@
// because the sk_wmem_queued is not following the bitfield of sk_protocol.
// And the following member is sk_gso_max_segs.
// So, we can use this:
- // bpf_probe_read(&protocol, 1, (void *)((u64)&newsk->sk_gso_max_segs) - 3);
+ // bpf_probe_read_kernel(&protocol, 1, (void *)((u64)&newsk->sk_gso_max_segs) - 3);
// In order to diff the pre-4.10 and 4.10+ ,introduce the variables gso_max_segs_offset,sk_lingertime,
// sk_lingertime is closed to the gso_max_segs_offset,and
// the offset between the two members is 4
@@ -167,9 +167,9 @@
} else if (family == AF_INET6) {
struct ipv6_data_t data6 = {.pid = pid, .ip = 6};
data6.ts_us = bpf_ktime_get_ns() / 1000;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
&newsk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
&newsk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
data6.lport = lport;
data6.dport = dport;
diff --git a/tools/tcpconnect.py b/tools/tcpconnect.py
index 40878ee..8cb6e4d 100755
--- a/tools/tcpconnect.py
+++ b/tools/tcpconnect.py
@@ -205,9 +205,9 @@
{ 'count' :
"""
struct ipv6_flow_key_t flow_key = {};
- bpf_probe_read(&flow_key.saddr, sizeof(flow_key.saddr),
+ bpf_probe_read_kernel(&flow_key.saddr, sizeof(flow_key.saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&flow_key.daddr, sizeof(flow_key.daddr),
+ bpf_probe_read_kernel(&flow_key.daddr, sizeof(flow_key.daddr),
skp->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
flow_key.dport = ntohs(dport);
ipv6_count.increment(flow_key);""",
@@ -216,9 +216,9 @@
struct ipv6_data_t data6 = {.pid = pid, .ip = ipver};
data6.uid = bpf_get_current_uid_gid();
data6.ts_us = bpf_ktime_get_ns() / 1000;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
skp->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
data6.dport = ntohs(dport);
bpf_get_current_comm(&data6.task, sizeof(data6.task));
diff --git a/tools/tcpconnlat.py b/tools/tcpconnlat.py
index be6bbbf..e28a43a 100755
--- a/tools/tcpconnlat.py
+++ b/tools/tcpconnlat.py
@@ -160,9 +160,9 @@
} else /* AF_INET6 */ {
struct ipv6_data_t data6 = {.pid = infop->pid, .ip = 6};
data6.ts_us = now / 1000;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
skp->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
data6.dport = ntohs(dport);
data6.delta_us = delta_us;
diff --git a/tools/tcpdrop.py b/tools/tcpdrop.py
index 14515f7..aceff87 100755
--- a/tools/tcpdrop.py
+++ b/tools/tcpdrop.py
@@ -128,9 +128,9 @@
struct ipv6_data_t data6 = {};
data6.pid = pid;
data6.ip = 6;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
data6.dport = dport;
data6.sport = sport;
diff --git a/tools/tcplife.lua b/tools/tcplife.lua
index 3f4f6af..3e18011 100755
--- a/tools/tcplife.lua
+++ b/tools/tcplife.lua
@@ -154,7 +154,7 @@
if (mep == 0) {
bpf_get_current_comm(&data4.task, sizeof(data4.task));
} else {
- bpf_probe_read(&data4.task, sizeof(data4.task), (void *)mep->task);
+ bpf_probe_read_kernel(&data4.task, sizeof(data4.task), (void *)mep->task);
}
ipv4_events.perf_submit(ctx, &data4, sizeof(data4));
@@ -162,9 +162,9 @@
struct ipv6_data_t data6 = {.span_us = delta_us,
.rx_b = rx_b, .tx_b = tx_b};
data6.ts_us = bpf_ktime_get_ns() / 1000;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
// a workaround until data6 compiles with separate lport/dport
data6.ports = ntohs(dport) + ((0ULL + lport) << 32);
@@ -172,7 +172,7 @@
if (mep == 0) {
bpf_get_current_comm(&data6.task, sizeof(data6.task));
} else {
- bpf_probe_read(&data6.task, sizeof(data6.task), (void *)mep->task);
+ bpf_probe_read_kernel(&data6.task, sizeof(data6.task), (void *)mep->task);
}
ipv6_events.perf_submit(ctx, &data6, sizeof(data6));
}
diff --git a/tools/tcplife.py b/tools/tcplife.py
index 980eebb..1600a3c 100755
--- a/tools/tcplife.py
+++ b/tools/tcplife.py
@@ -206,7 +206,7 @@
if (mep == 0) {
bpf_get_current_comm(&data4.task, sizeof(data4.task));
} else {
- bpf_probe_read(&data4.task, sizeof(data4.task), (void *)mep->task);
+ bpf_probe_read_kernel(&data4.task, sizeof(data4.task), (void *)mep->task);
}
ipv4_events.perf_submit(ctx, &data4, sizeof(data4));
@@ -216,9 +216,9 @@
data6.rx_b = rx_b;
data6.tx_b = tx_b;
data6.ts_us = bpf_ktime_get_ns() / 1000;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
// a workaround until data6 compiles with separate lport/dport
data6.ports = dport + ((0ULL + lport) << 32);
@@ -226,7 +226,7 @@
if (mep == 0) {
bpf_get_current_comm(&data6.task, sizeof(data6.task));
} else {
- bpf_probe_read(&data6.task, sizeof(data6.task), (void *)mep->task);
+ bpf_probe_read_kernel(&data6.task, sizeof(data6.task), (void *)mep->task);
}
ipv6_events.perf_submit(ctx, &data6, sizeof(data6));
}
@@ -332,7 +332,7 @@
if (mep == 0) {
bpf_get_current_comm(&data4.task, sizeof(data4.task));
} else {
- bpf_probe_read(&data4.task, sizeof(data4.task), (void *)mep->task);
+ bpf_probe_read_kernel(&data4.task, sizeof(data4.task), (void *)mep->task);
}
ipv4_events.perf_submit(args, &data4, sizeof(data4));
@@ -350,7 +350,7 @@
if (mep == 0) {
bpf_get_current_comm(&data6.task, sizeof(data6.task));
} else {
- bpf_probe_read(&data6.task, sizeof(data6.task), (void *)mep->task);
+ bpf_probe_read_kernel(&data6.task, sizeof(data6.task), (void *)mep->task);
}
ipv6_events.perf_submit(args, &data6, sizeof(data6));
}
diff --git a/tools/tcpretrans.py b/tools/tcpretrans.py
index 1b2636a..7785d9b 100755
--- a/tools/tcpretrans.py
+++ b/tools/tcpretrans.py
@@ -180,9 +180,9 @@
{ 'count' :
"""
struct ipv6_flow_key_t flow_key = {};
- bpf_probe_read(&flow_key.saddr, sizeof(flow_key.saddr),
+ bpf_probe_read_kernel(&flow_key.saddr, sizeof(flow_key.saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&flow_key.daddr, sizeof(flow_key.daddr),
+ bpf_probe_read_kernel(&flow_key.daddr, sizeof(flow_key.daddr),
skp->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
// lport is host order
flow_key.lport = lport;
@@ -192,9 +192,9 @@
data6.pid = pid;
data6.ip = 6;
data6.type = type;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
skp->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
// lport is host order
data6.lport = lport;
diff --git a/tools/tcpstates.py b/tools/tcpstates.py
index 48f8788..7681822 100755
--- a/tools/tcpstates.py
+++ b/tools/tcpstates.py
@@ -178,7 +178,7 @@
// because the sk_wmem_queued is not following the bitfield of sk_protocol.
// And the following member is sk_gso_max_segs.
// So, we can use this:
- // bpf_probe_read(&protocol, 1, (void *)((u64)&newsk->sk_gso_max_segs) - 3);
+ // bpf_probe_read_kernel(&protocol, 1, (void *)((u64)&newsk->sk_gso_max_segs) - 3);
// In order to diff the pre-4.10 and 4.10+ ,introduce the variables gso_max_segs_offset,sk_lingertime,
// sk_lingertime is closed to the gso_max_segs_offset,and
// the offset between the two members is 4
@@ -189,16 +189,16 @@
if (sk_lingertime_offset - gso_max_segs_offset == 4)
// 4.10+ with little endian
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
- bpf_probe_read(&protocol, 1, (void *)((u64)&sk->sk_gso_max_segs) - 3);
+ bpf_probe_read_kernel(&protocol, 1, (void *)((u64)&sk->sk_gso_max_segs) - 3);
else
// pre-4.10 with little endian
- bpf_probe_read(&protocol, 1, (void *)((u64)&sk->sk_wmem_queued) - 3);
+ bpf_probe_read_kernel(&protocol, 1, (void *)((u64)&sk->sk_wmem_queued) - 3);
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
// 4.10+ with big endian
- bpf_probe_read(&protocol, 1, (void *)((u64)&sk->sk_gso_max_segs) - 1);
+ bpf_probe_read_kernel(&protocol, 1, (void *)((u64)&sk->sk_gso_max_segs) - 1);
else
// pre-4.10 with big endian
- bpf_probe_read(&protocol, 1, (void *)((u64)&sk->sk_wmem_queued) - 1);
+ bpf_probe_read_kernel(&protocol, 1, (void *)((u64)&sk->sk_wmem_queued) - 1);
#else
# error "Fix your compiler's __BYTE_ORDER__?!"
#endif
@@ -250,9 +250,9 @@
.newstate = state };
data6.skaddr = (u64)sk;
data6.ts_us = bpf_ktime_get_ns() / 1000;
- bpf_probe_read(&data6.saddr, sizeof(data6.saddr),
+ bpf_probe_read_kernel(&data6.saddr, sizeof(data6.saddr),
sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&data6.daddr, sizeof(data6.daddr),
+ bpf_probe_read_kernel(&data6.daddr, sizeof(data6.daddr),
sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
// a workaround until data6 compiles with separate lport/dport
data6.ports = dport + ((0ULL + lport) << 16);
diff --git a/tools/tcptop.py b/tools/tcptop.py
index 510c4e8..e9d0d1a 100755
--- a/tools/tcptop.py
+++ b/tools/tcptop.py
@@ -125,9 +125,9 @@
} else if (family == AF_INET6) {
struct ipv6_key_t ipv6_key = {.pid = pid};
- bpf_probe_read(&ipv6_key.saddr, sizeof(ipv6_key.saddr),
+ bpf_probe_read_kernel(&ipv6_key.saddr, sizeof(ipv6_key.saddr),
&sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&ipv6_key.daddr, sizeof(ipv6_key.daddr),
+ bpf_probe_read_kernel(&ipv6_key.daddr, sizeof(ipv6_key.daddr),
&sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
ipv6_key.lport = sk->__sk_common.skc_num;
dport = sk->__sk_common.skc_dport;
@@ -171,9 +171,9 @@
} else if (family == AF_INET6) {
struct ipv6_key_t ipv6_key = {.pid = pid};
- bpf_probe_read(&ipv6_key.saddr, sizeof(ipv6_key.saddr),
+ bpf_probe_read_kernel(&ipv6_key.saddr, sizeof(ipv6_key.saddr),
&sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&ipv6_key.daddr, sizeof(ipv6_key.daddr),
+ bpf_probe_read_kernel(&ipv6_key.daddr, sizeof(ipv6_key.daddr),
&sk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
ipv6_key.lport = sk->__sk_common.skc_num;
dport = sk->__sk_common.skc_dport;
diff --git a/tools/tcptracer.py b/tools/tcptracer.py
index 7f67d33..2e486b1 100755
--- a/tools/tcptracer.py
+++ b/tools/tcptracer.py
@@ -149,9 +149,9 @@
#ifdef CONFIG_NET_NS
net_ns_inum = skp->__sk_common.skc_net.net->ns.inum;
#endif
- bpf_probe_read(&saddr, sizeof(saddr),
+ bpf_probe_read_kernel(&saddr, sizeof(saddr),
skp->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&daddr, sizeof(daddr),
+ bpf_probe_read_kernel(&daddr, sizeof(daddr),
skp->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
##FILTER_NETNS##
@@ -491,9 +491,9 @@
evt6.pid = pid >> 32;
evt6.ip = ipver;
- bpf_probe_read(&evt6.saddr, sizeof(evt6.saddr),
+ bpf_probe_read_kernel(&evt6.saddr, sizeof(evt6.saddr),
newsk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
- bpf_probe_read(&evt6.daddr, sizeof(evt6.daddr),
+ bpf_probe_read_kernel(&evt6.daddr, sizeof(evt6.daddr),
newsk->__sk_common.skc_v6_daddr.in6_u.u6_addr32);
evt6.sport = lport;
diff --git a/tools/trace.py b/tools/trace.py
index add3f3e..9c44a4a 100755
--- a/tools/trace.py
+++ b/tools/trace.py
@@ -238,17 +238,17 @@
aliases_indarg = {
"arg1": "({u64 _val; struct pt_regs *_ctx = (struct pt_regs *)PT_REGS_PARM1(ctx);"
- " bpf_probe_read(&_val, sizeof(_val), &(PT_REGS_PARM1(_ctx))); _val;})",
+ " bpf_probe_read_kernel(&_val, sizeof(_val), &(PT_REGS_PARM1(_ctx))); _val;})",
"arg2": "({u64 _val; struct pt_regs *_ctx = (struct pt_regs *)PT_REGS_PARM1(ctx);"
- " bpf_probe_read(&_val, sizeof(_val), &(PT_REGS_PARM2(_ctx))); _val;})",
+ " bpf_probe_read_kernel(&_val, sizeof(_val), &(PT_REGS_PARM2(_ctx))); _val;})",
"arg3": "({u64 _val; struct pt_regs *_ctx = (struct pt_regs *)PT_REGS_PARM1(ctx);"
- " bpf_probe_read(&_val, sizeof(_val), &(PT_REGS_PARM3(_ctx))); _val;})",
+ " bpf_probe_read_kernel(&_val, sizeof(_val), &(PT_REGS_PARM3(_ctx))); _val;})",
"arg4": "({u64 _val; struct pt_regs *_ctx = (struct pt_regs *)PT_REGS_PARM1(ctx);"
- " bpf_probe_read(&_val, sizeof(_val), &(PT_REGS_PARM4(_ctx))); _val;})",
+ " bpf_probe_read_kernel(&_val, sizeof(_val), &(PT_REGS_PARM4(_ctx))); _val;})",
"arg5": "({u64 _val; struct pt_regs *_ctx = (struct pt_regs *)PT_REGS_PARM1(ctx);"
- " bpf_probe_read(&_val, sizeof(_val), &(PT_REGS_PARM5(_ctx))); _val;})",
+ " bpf_probe_read_kernel(&_val, sizeof(_val), &(PT_REGS_PARM5(_ctx))); _val;})",
"arg6": "({u64 _val; struct pt_regs *_ctx = (struct pt_regs *)PT_REGS_PARM1(ctx);"
- " bpf_probe_read(&_val, sizeof(_val), &(PT_REGS_PARM6(_ctx))); _val;})",
+ " bpf_probe_read_kernel(&_val, sizeof(_val), &(PT_REGS_PARM6(_ctx))); _val;})",
}
aliases_common = {
@@ -399,7 +399,7 @@
text = (" %s %s = 0;\n" +
" bpf_usdt_readarg(%s, ctx, &%s);\n") \
% (arg_ctype, expr, expr[3], expr)
- probe_read_func = "bpf_probe_read"
+ probe_read_func = "bpf_probe_read_kernel"
if field_type == "s":
if self.library:
probe_read_func = "bpf_probe_read_user"
diff --git a/tools/ttysnoop.py b/tools/ttysnoop.py
index 24c1180..b576b7a 100755
--- a/tools/ttysnoop.py
+++ b/tools/ttysnoop.py
@@ -77,7 +77,7 @@
if (file->f_inode->i_ino != PTS)
return 0;
- // bpf_probe_read() can only use a fixed size, so truncate to count
+ // bpf_probe_read_user() can only use a fixed size, so truncate to count
// in user space:
struct data_t data = {};
bpf_probe_read_user(&data.buf, BUFSIZE, (void *)buf);
diff --git a/tools/wakeuptime.py b/tools/wakeuptime.py
index a22245a..e13bdf0 100755
--- a/tools/wakeuptime.py
+++ b/tools/wakeuptime.py
@@ -136,7 +136,7 @@
struct key_t key = {};
key.w_k_stack_id = stack_traces.get_stackid(ctx, 0);
- bpf_probe_read(&key.target, sizeof(key.target), p->comm);
+ bpf_probe_read_kernel(&key.target, sizeof(key.target), p->comm);
bpf_get_current_comm(&key.waker, sizeof(key.waker));
counts.increment(key, delta);
diff --git a/tools/xfsslower.py b/tools/xfsslower.py
index 9fa1256..f259e49 100755
--- a/tools/xfsslower.py
+++ b/tools/xfsslower.py
@@ -196,7 +196,7 @@
struct qstr qs = valp->fp->f_path.dentry->d_name;
if (qs.len == 0)
return 0;
- bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
+ bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
// output
events.perf_submit(ctx, &data, sizeof(data));
diff --git a/tools/zfsslower.py b/tools/zfsslower.py
index 2f05b56..3a61a36 100755
--- a/tools/zfsslower.py
+++ b/tools/zfsslower.py
@@ -192,7 +192,7 @@
struct qstr qs = valp->fp->f_path.dentry->d_name;
if (qs.len == 0)
return 0;
- bpf_probe_read(&data.file, sizeof(data.file), (void *)qs.name);
+ bpf_probe_read_kernel(&data.file, sizeof(data.file), (void *)qs.name);
// output
events.perf_submit(ctx, &data, sizeof(data));