diff --git a/CMakeLists.txt b/CMakeLists.txt index 59f703d..8aec847 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,7 @@ add_custom_target(samples ALL ${CMAKE_CURRENT_SOURCE_DIR}/build/map_in_map_legacy.o ${CMAKE_CURRENT_SOURCE_DIR}/build/nullmapref.o ${CMAKE_CURRENT_SOURCE_DIR}/build/stackok.o + ${CMAKE_CURRENT_SOURCE_DIR}/store_map_value_in_map.o ${CMAKE_CURRENT_SOURCE_DIR}/build/packet_access.o ${CMAKE_CURRENT_SOURCE_DIR}/build/packet_start_ok.o ${CMAKE_CURRENT_SOURCE_DIR}/build/packet_overflow.o @@ -116,6 +117,10 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/build/stackok.o DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/stackok.c COMMAND clang -g -target bpf -Wall -O2 -I ${libbpf_SOURCE_DIR}/src -c ${CMAKE_CURRENT_SOURCE_DIR}/src/stackok.c -o ${CMAKE_CURRENT_SOURCE_DIR}/build/stackok.o) +add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/store_map_value_in_map.o + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/store_map_value_in_map.c + COMMAND clang -g -target bpf -Wall -O2 -I ${libbpf_SOURCE_DIR}/src -c ${CMAKE_CURRENT_SOURCE_DIR}/src/store_map_value_in_map.c -o ${CMAKE_CURRENT_SOURCE_DIR}/build/store_map_value_in_map.o) + add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/build/packet_access.o DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/packet_access.c COMMAND clang -g -target bpf -Wall -O2 -I ${libbpf_SOURCE_DIR}/src -c ${CMAKE_CURRENT_SOURCE_DIR}/src/packet_access.c -o ${CMAKE_CURRENT_SOURCE_DIR}/build/packet_access.o) diff --git a/build/store_map_value_in_map.o b/build/store_map_value_in_map.o new file mode 100644 index 0000000..2a815d3 Binary files /dev/null and b/build/store_map_value_in_map.o differ diff --git a/invalid/timeout-29db93548c671165313b314d4f83a3eefa24df37 b/invalid/timeout-29db93548c671165313b314d4f83a3eefa24df37 new file mode 100644 index 0000000..5daff96 Binary files /dev/null and b/invalid/timeout-29db93548c671165313b314d4f83a3eefa24df37 differ diff --git a/src/store_map_value_in_map.c b/src/store_map_value_in_map.c new file mode 100644 index 0000000..10accf8 --- /dev/null +++ b/src/store_map_value_in_map.c @@ -0,0 +1,33 @@ +// Copyright (c) Prevail Verifier contributors. +// SPDX-License-Identifier: MIT + +#include "bpf.h" + +__attribute__((section(".maps"), used)) +struct { + __uint(type, BPF_MAP_TYPE_ARRAY); + __type(key, uint32_t); + __type(value, uint32_t); + __uint(max_entries, 1); +} map1; + + +__attribute__((section(".maps"), used)) +struct { + __uint(type, BPF_MAP_TYPE_ARRAY); + __type(key, uint32_t); + __type(value, uint32_t); + __uint(max_entries, 1); +} map2; + +int func(void* ctx) { + // Lookup value from map1 and store it in map 2. + uint32_t key = 0; + uint32_t *val = bpf_map_lookup_elem(&map1, &key); + if (val) { + if (bpf_map_update_elem(&map2, &key, val, 0)) { + return 1; + } + } + return 0; +}