diff --git a/bpfloader/Android.bp b/bpfloader/Android.bp index 42cb50c..d3428b0 100644 --- a/bpfloader/Android.bp +++ b/bpfloader/Android.bp @@ -59,4 +59,11 @@ cc_binary { "timeInState.o" ], + product_variables: { + debuggable: { + required: [ + "bpfRingbufProg.o", + ], + }, + } } diff --git a/progs/Android.bp b/progs/Android.bp index aeb04a7..b044eb0 100644 --- a/progs/Android.bp +++ b/progs/Android.bp @@ -26,3 +26,12 @@ cc_library_headers { name: "bpf_prog_headers", export_include_dirs: ["include"], } + +bpf { + name: "bpfRingbufProg.o", + srcs: ["bpfRingbufProg.c"], + cflags: [ + "-Wall", + "-Werror", + ], +} diff --git a/progs/bpfRingbufProg.c b/progs/bpfRingbufProg.c new file mode 100644 index 0000000..99b8345 --- /dev/null +++ b/progs/bpfRingbufProg.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bpf_helpers.h" + +// This can't be easily changed since the program is loaded on boot and may be +// run against tests at a slightly different version. +#define TEST_RINGBUF_MAGIC_NUM 12345 + +// This ring buffer is for testing purposes only. +DEFINE_BPF_RINGBUF_EXT(test_ringbuf, __u64, 4096, AID_ROOT, AID_ROOT, 0660, "", "", false); + +// This program is for test purposes only - it should never be attached to a +// socket, only executed manually with BPF_PROG_RUN. +DEFINE_BPF_PROG_KVER("skfilter/ringbuf_test", AID_ROOT, AID_ROOT, test_ringbuf_prog, KVER(5, 8, 0)) +(void* unused_ctx) { + __u64* output = bpf_test_ringbuf_reserve(); + if (output == NULL) return 1; + + (*output) = TEST_RINGBUF_MAGIC_NUM; + bpf_test_ringbuf_submit(output); + + return 0; +} + +LICENSE("Apache 2.0"); +CRITICAL("BPF Ringbuf test");