Skip to content

Commit

Permalink
Pickup latest ubpf and fix breaking contract changes (#3531)
Browse files Browse the repository at this point in the history
* Pickup latest ubpf and fix breaking contract changes

Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>

* Suppress warnings in external code

Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>

---------

Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
Co-authored-by: Alan Jowett <alan.jowett@microsoft.com>
Co-authored-by: Dave Thaler <dthaler1968@gmail.com>
  • Loading branch information
3 people committed May 16, 2024
1 parent ec9df02 commit fa56e03
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 10 deletions.
2 changes: 1 addition & 1 deletion external/ubpf
Submodule ubpf updated 51 files
+163 −0 .github/workflows/fuzzing.yml
+9 −1 .github/workflows/main.yml
+3 −3 .github/workflows/posix.yml
+2 −2 .github/workflows/windows.yml
+4 −0 CMakeLists.txt
+1 −1 README.md
+1 −0 cmake/options.cmake
+24 −1 cmake/settings.cmake
+62 −0 custom_tests/CMakeLists.txt
+35 −0 custom_tests/README.md
+1 −0 custom_tests/data/ubpf_test_external_dispatcher_context_overwrite.input
+1 −0 custom_tests/data/ubpf_test_external_dispatcher_simple_context.input
+1 −0 custom_tests/data/ubpf_test_jit_unexpected_instruction.input
+1 −0 custom_tests/data/ubpf_test_update_dispatcher.input
+1 −0 custom_tests/data/ubpf_test_update_helpers.input
+7 −0 custom_tests/descrs/ubpf_test_external_dispatcher_context_overwrite.md
+4 −0 custom_tests/descrs/ubpf_test_external_dispatcher_simple_context.md
+4 −0 custom_tests/descrs/ubpf_test_jit_buffer_too_small.md
+4 −0 custom_tests/descrs/ubpf_test_jit_unexpected_instruction.md
+4 −0 custom_tests/descrs/ubpf_test_update_dispatcher.md
+4 −0 custom_tests/descrs/ubpf_test_update_helpers.md
+225 −0 custom_tests/srcs/test_helpers.h
+98 −0 custom_tests/srcs/ubpf_custom_test_support.cc
+58 −0 custom_tests/srcs/ubpf_custom_test_support.h
+76 −0 custom_tests/srcs/ubpf_test_external_dispatcher_context_overwrite.cc
+73 −0 custom_tests/srcs/ubpf_test_external_dispatcher_simple_context.cc
+53 −0 custom_tests/srcs/ubpf_test_jit_buffer_too_small.cc
+46 −0 custom_tests/srcs/ubpf_test_jit_unexpected_instruction.cc
+104 −0 custom_tests/srcs/ubpf_test_update_dispatcher.cc
+143 −0 custom_tests/srcs/ubpf_test_update_helpers.cc
+1 −1 external/bpf_conformance
+29 −0 libfuzzer/CMakeLists.txt
+148 −0 libfuzzer/libfuzz_harness.cc
+1 −1 requirements.txt
+17 −0 ubpf/disassembler.py
+8 −0 ubpf_plugin/CMakeLists.txt
+9 −8 ubpf_plugin/test_helpers.h
+115 −20 ubpf_plugin/ubpf_plugin.cc
+2 −0 vm/CMakeLists.txt
+9 −1 vm/compat/windows/sys/mman.h
+10 −0 vm/compat/windows/unistd.h
+95 −10 vm/inc/ubpf.h
+21 −9 vm/test.c
+48 −7 vm/ubpf_int.h
+70 −13 vm/ubpf_jit.c
+291 −108 vm/ubpf_jit_arm64.c
+100 −0 vm/ubpf_jit_support.c
+117 −0 vm/ubpf_jit_support.h
+188 −50 vm/ubpf_jit_x86_64.c
+220 −53 vm/ubpf_jit_x86_64.h
+153 −31 vm/ubpf_vm.c
2 changes: 1 addition & 1 deletion libs/execution_context/ebpf_program.c
Original file line number Diff line number Diff line change
Expand Up @@ -1087,7 +1087,7 @@ _ebpf_program_update_interpret_helpers(
}

#if !defined(CONFIG_BPF_INTERPRETER_DISABLED)
if (ubpf_register(program->code_or_vm.vm, (unsigned int)index, NULL, (void*)helper) < 0) {
if (ubpf_register(program->code_or_vm.vm, (unsigned int)index, NULL, (external_function_t)helper) < 0) {
EBPF_LOG_MESSAGE_UINT64(
EBPF_TRACELOG_LEVEL_ERROR, EBPF_TRACELOG_KEYWORD_PROGRAM, "ubpf_register failed", index);
result = EBPF_INVALID_ARGUMENT;
Expand Down
4 changes: 3 additions & 1 deletion libs/service/api_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,9 @@ ebpf_verify_and_load_program(
}

for (uint32_t helper_id = 0; (size_t)helper_id < helper_id_address.size(); helper_id++) {
if (ubpf_register(vm, helper_id, nullptr, reinterpret_cast<void*>(helper_id_address[helper_id])) < 0) {
if (ubpf_register(
vm, helper_id, nullptr, reinterpret_cast<external_function_t>(helper_id_address[helper_id])) <
0) {
result = EBPF_JIT_COMPILATION_FAILED;
goto Exit;
}
Expand Down
26 changes: 23 additions & 3 deletions libs/ubpf/kernel/ubpf_kernel.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,32 @@ map_register(int r)
return 0;
}

#include "ubpf_int.h"

// Thunk out JIT related calls.
// Workaround until https://github.com/iovisor/ubpf/issues/185 is fixed.
int
ubpf_translate_x86_64(struct ubpf_vm* vm, uint8_t* buffer, size_t* size, char** errmsg)
struct ubpf_jit_result
ubpf_translate_x86_64(struct ubpf_vm* vm, uint8_t* buffer, size_t* size)
{
return -1;
__fastfail(0);
struct ubpf_jit_result result = {0};
return result;
}

bool
ubpf_jit_update_dispatcher_x86_64(
struct ubpf_vm* vm, external_function_dispatcher_t new_dispatcher, uint8_t* buffer, size_t size, uint32_t offset)
{
__fastfail(0);
return false;
}

bool
ubpf_jit_update_helper_x86_64(
struct ubpf_vm* vm, ext_func new_helper, unsigned int idx, uint8_t* buffer, size_t size, uint32_t offset)
{
__fastfail(0);
return false;
}

#pragma warning(push)
Expand Down
11 changes: 7 additions & 4 deletions libs/ubpf/user/ubpf_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,13 @@
#define free(X) ebpf_free(X)

#pragma warning(push)
#pragma warning(disable : 4100) // unreferenced formal parameter
#pragma warning(disable : 4211) // nonstandard extension used: redefined extern to static
#pragma warning(disable : 6387) // ubpf_jit.c(70): error C6387: 'buffer' could be '0'
#pragma warning(disable : 4100) // unreferenced formal parameter
#pragma warning(disable : 4211) // nonstandard extension used: redefined extern to static
#pragma warning(disable : 6387) // ubpf_jit.c(70): error C6387: 'buffer' could be '0'
#pragma warning(disable : 26451) // Arithmetic overflow: Using operator '*' on a 4 byte value and then casting the
// result to a 8 byte value.
#include "ubpf_jit.c"
#include "ubpf_jit_support.c"
#include "ubpf_jit_x86_64.c"
#pragma warning(pop)
#include "ubpf_vm.c"
#pragma warning(pop)

0 comments on commit fa56e03

Please sign in to comment.