fix stack corruption in DB::get

This commit is contained in:
Grant Limberg 2025-09-08 08:49:23 -07:00
parent a78ac17d10
commit 71d68e9a60
No known key found for this signature in database
GPG key ID: 8F2F97D3BE8D7735
2 changed files with 24 additions and 5 deletions

View file

@ -4,12 +4,14 @@ cmake_minimum_required (VERSION 3.13)
project (zerotier-one LANGUAGES CXX C)
option(ZT1_CENTRAL_CONTROLLER "Build with ZeroTier Central Controller support" OFF)
oiption(ADDRESS_SANITIZER "Build with Address Sanitizer enabled (only for x86_64/arm64)" OFF
)
set (PROJ_DIR ${PROJECT_SOURCE_DIR})
execute_process(COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE CPU_ARCHITECTURE)
set(CPU_ARCHITECTURE ${CPU_ARCHITECTURE} CACHE STRING "Target CPU architecture (detected automatically)")
message(STATUS "Detected CPU architecture: ${CPU_ARCHITECTURE}")
if(CPU_ARCHITECTURE STREQUAL "x86_64")
add_definitions(
-DZT_ARCHITECTURE=2
@ -20,9 +22,19 @@ if(CPU_ARCHITECTURE STREQUAL "x86_64")
-DZT_USE_FAST_X64_ED25519=1
)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -z noexecstack")
elseif(CPU_ARCHITECTURE STREQUAL "aarch64")
if(ADDRESS_SANITIZER)
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
endif()
elseif(CPU_ARCHITECTURE STREQUAL "aarch64" OR CPU_ARCHITECTURE STREQUAL "arm64")
add_definitions(-DZT_ARCHITECTURE=4 -DZT_ARCH_ARM_HAS_NEON=1 -DZT_SSO_SUPPORTED=1 -DZT_AES_NEON=1)
add_compile_options(-march=armv8-a+crypto -mtune=generic -mstrict-align)
if(ADDRESS_SANITIZER)
add_compile_options(-fsanitize=address)
add_link_options(-fsanitize=address)
endif()
endif()
include(FetchContent)

View file

@ -216,14 +216,21 @@ bool DB::get(const uint64_t networkId, nlohmann::json& network, const uint64_t m
return true;
}
bool DB::get(const uint64_t networkId, nlohmann::json& network, const uint64_t memberId, nlohmann::json& member, NetworkSummaryInfo& info)
bool DB::get(
const uint64_t networkId,
nlohmann::json& network,
const uint64_t memberId,
nlohmann::json& member,
NetworkSummaryInfo& info)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::getNetworkAndMemberAndSummary");
auto scope = tracer->WithActiveSpan(span);
char networkIdStr[17];
char memberIdStr[11];
char networkIdStr[32];
memset(networkIdStr, 0, sizeof(networkIdStr));
char memberIdStr[32];
memset(memberIdStr, 0, sizeof(memberIdStr));
span->SetAttribute("network_id", Utils::hex(networkId, networkIdStr));
span->SetAttribute("member_id", Utils::hex(memberId, memberIdStr));