OSDN Git Service

bpf, samples: Use bpf_probe_read_user where appropriate
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 1 Nov 2019 23:18:01 +0000 (00:18 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 2 Nov 2019 19:39:13 +0000 (12:39 -0700)
Use bpf_probe_read_user() helper instead of bpf_probe_read() for samples that
attach to kprobes probing on user addresses.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/5b0144b3f8e031ec5e2438bd7de8d7877e63bf2f.1572649915.git.daniel@iogearbox.net
samples/bpf/map_perf_test_kern.c
samples/bpf/test_map_in_map_kern.c
samples/bpf/test_probe_write_user_kern.c

index 5c11aef..281bcda 100644 (file)
@@ -181,8 +181,8 @@ int stress_lru_hmap_alloc(struct pt_regs *ctx)
        if (addrlen != sizeof(*in6))
                return 0;
 
-       ret = bpf_probe_read(test_params.dst6, sizeof(test_params.dst6),
-                            &in6->sin6_addr);
+       ret = bpf_probe_read_user(test_params.dst6, sizeof(test_params.dst6),
+                                 &in6->sin6_addr);
        if (ret)
                goto done;
 
index 4f80cbe..32ee752 100644 (file)
@@ -118,7 +118,7 @@ int trace_sys_connect(struct pt_regs *ctx)
        if (addrlen != sizeof(*in6))
                return 0;
 
-       ret = bpf_probe_read(dst6, sizeof(dst6), &in6->sin6_addr);
+       ret = bpf_probe_read_user(dst6, sizeof(dst6), &in6->sin6_addr);
        if (ret) {
                inline_ret = ret;
                goto done;
@@ -129,7 +129,7 @@ int trace_sys_connect(struct pt_regs *ctx)
 
        test_case = dst6[7];
 
-       ret = bpf_probe_read(&port, sizeof(port), &in6->sin6_port);
+       ret = bpf_probe_read_user(&port, sizeof(port), &in6->sin6_port);
        if (ret) {
                inline_ret = ret;
                goto done;
index a543358..b7c48f3 100644 (file)
@@ -37,7 +37,7 @@ int bpf_prog1(struct pt_regs *ctx)
        if (sockaddr_len > sizeof(orig_addr))
                return 0;
 
-       if (bpf_probe_read(&orig_addr, sizeof(orig_addr), sockaddr_arg) != 0)
+       if (bpf_probe_read_user(&orig_addr, sizeof(orig_addr), sockaddr_arg) != 0)
                return 0;
 
        mapped_addr = bpf_map_lookup_elem(&dnat_map, &orig_addr);