samples/bpf: Fix test_map_in_map on s390
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 15 Sep 2020 11:55:19 +0000 (13:55 +0200)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 18 Sep 2020 23:02:55 +0000 (01:02 +0200)
s390 uses socketcall multiplexer instead of individual socket syscalls.
Therefore, "kprobe/" SYSCALL(sys_connect) does not trigger and
test_map_in_map fails. Fix by using "kprobe/__sys_connect" instead.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/20200915115519.3769807-1-iii@linux.ibm.com
samples/bpf/test_map_in_map_kern.c

index 8def45c..b0200c8 100644 (file)
@@ -103,10 +103,9 @@ static __always_inline int do_inline_hash_lookup(void *inner_map, u32 port)
        return result ? *result : -ENOENT;
 }
 
-SEC("kprobe/" SYSCALL(sys_connect))
+SEC("kprobe/__sys_connect")
 int trace_sys_connect(struct pt_regs *ctx)
 {
-       struct pt_regs *real_regs = (struct pt_regs *)PT_REGS_PARM1_CORE(ctx);
        struct sockaddr_in6 *in6;
        u16 test_case, port, dst6[8];
        int addrlen, ret, inline_ret, ret_key = 0;
@@ -114,8 +113,8 @@ int trace_sys_connect(struct pt_regs *ctx)
        void *outer_map, *inner_map;
        bool inline_hash = false;
 
-       in6 = (struct sockaddr_in6 *)PT_REGS_PARM2_CORE(real_regs);
-       addrlen = (int)PT_REGS_PARM3_CORE(real_regs);
+       in6 = (struct sockaddr_in6 *)PT_REGS_PARM2_CORE(ctx);
+       addrlen = (int)PT_REGS_PARM3_CORE(ctx);
 
        if (addrlen != sizeof(*in6))
                return 0;