From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yonghong Song Subject: [PATCH bpf-next v2 0/9] bpf: add bpf_get_stack helper Date: Wed, 18 Apr 2018 09:54:35 -0700 Message-ID: <20180418165444.2263237-1-yhs@fb.com> Mime-Version: 1.0 Content-Type: text/plain Cc: To: , , Return-path: Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:58068 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751335AbeDRQyq (ORCPT ); Wed, 18 Apr 2018 12:54:46 -0400 Received: from pps.filterd (m0148461.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w3IGrKlV019669 for ; Wed, 18 Apr 2018 09:54:45 -0700 Received: from mail.thefacebook.com ([199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2he8mb091v-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Wed, 18 Apr 2018 09:54:45 -0700 Sender: netdev-owner@vger.kernel.org List-ID: Currently, stackmap and bpf_get_stackid helper are provided for bpf program to get the stack trace. This approach has a limitation though. If two stack traces have the same hash, only one will get stored in the stackmap table regardless of whether BPF_F_REUSE_STACKID is specified or not, so some stack traces may be missing from user perspective. This patch implements a new helper, bpf_get_stack, will send stack traces directly to bpf program. The bpf program is able to see all stack traces, and then can do in-kernel processing or send stack traces to user space through shared map or bpf_perf_event_output. Patches #1 and #2 implemented the core kernel support. Patches #3 and #4 are two verifier improves to make bpf programming easier. Patch #5 synced the new helper to tools headers. Patches #6 and #7 added a test in samples/bpf by attaching to a kprobe. Patch #8 added a verifier test in tools/bpf for new verifier change and Patch #9 added a test by attaching to a tracepoint. Changelogs: v1 -> v2: . fix compilation error when CONFIG_PERF_EVENTS is not enabled Yonghong Song (9): bpf: change prototype for stack_map_get_build_id_offset bpf: add bpf_get_stack helper bpf/verifier: refine retval R0 state for bpf_get_stack helper bpf/verifier: improve register value range tracking with ARSH tools/bpf: add bpf_get_stack helper to tools headers samples/bpf: move common-purpose perf_event functions to bpf_load.c samples/bpf: add a test for bpf_get_stack helper tools/bpf: add a verifier test case for bpf_get_stack helper and ARSH tools/bpf: add a test_progs test case for bpf_get_stack helper include/linux/bpf.h | 1 + include/linux/filter.h | 3 +- include/uapi/linux/bpf.h | 19 ++- kernel/bpf/core.c | 5 + kernel/bpf/stackmap.c | 80 ++++++++++-- kernel/bpf/syscall.c | 10 ++ kernel/bpf/verifier.c | 35 ++++- kernel/trace/bpf_trace.c | 50 +++++++- samples/bpf/Makefile | 4 + samples/bpf/bpf_load.c | 104 +++++++++++++++ samples/bpf/bpf_load.h | 5 + samples/bpf/trace_get_stack_kern.c | 86 +++++++++++++ samples/bpf/trace_get_stack_user.c | 150 ++++++++++++++++++++++ samples/bpf/trace_output_user.c | 113 ++-------------- tools/include/uapi/linux/bpf.h | 19 ++- tools/testing/selftests/bpf/bpf_helpers.h | 2 + tools/testing/selftests/bpf/test_progs.c | 41 +++++- tools/testing/selftests/bpf/test_stacktrace_map.c | 20 ++- tools/testing/selftests/bpf/test_verifier.c | 45 +++++++ 19 files changed, 669 insertions(+), 123 deletions(-) create mode 100644 samples/bpf/trace_get_stack_kern.c create mode 100644 samples/bpf/trace_get_stack_user.c -- 2.9.5