mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2026-03-10 10:19:21 +03:00
Compare commits
30 Commits
copilot/fi
...
e42aa6bf78
| Author | SHA1 | Date | |
|---|---|---|---|
| e42aa6bf78 | |||
| ef05c4f0c4 | |||
| 7f6e527b47 | |||
| a0afd98744 | |||
| ae448abdad | |||
| cfe854b339 | |||
| c075bd85a8 | |||
| 6f749ab71c | |||
| 0e36e095f0 | |||
| 34e4d4a54b | |||
| df3ea19f0e | |||
| 9da4aabda5 | |||
| 3cb3dd20fc | |||
| b551b77e25 | |||
| 609b8f4a5e | |||
| 0a87ff8fbd | |||
| 6016f84315 | |||
| 9d27b935b7 | |||
| 1e1104d3ba | |||
| 074efb5479 | |||
| fe460de5a6 | |||
| 6ef941db21 | |||
| d7d3ec8cac | |||
| 68e9f0b593 | |||
| f1012da5fb | |||
| 1411d4ceb4 | |||
| a3176175f9 | |||
| 88af7986b4 | |||
| 38f102e2e7 | |||
| 4a4c1c79de |
3
.github/workflows/coverity.yml
vendored
3
.github/workflows/coverity.yml
vendored
@ -4,6 +4,7 @@ name: Coverity
|
|||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 0 * * *"
|
- cron: "0 0 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@ -11,7 +12,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
scan:
|
scan:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ github.repository_owner == 'SoftEtherVPN' }}
|
if: ${{ github.repository_owner == 'SoftEtherVPN' || github.event_name == 'workflow_dispatch' }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
10
.github/workflows/windows.yml
vendored
10
.github/workflows/windows.yml
vendored
@ -8,10 +8,11 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
platform: [
|
platform: [
|
||||||
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat"},
|
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
||||||
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"}
|
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
||||||
|
{ ARCHITECTURE: arm64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/ARM64/bin/clang-cl.exe", VCPKG_TRIPLET: "arm64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsarm64.bat", RUNNER: "windows-11-arm", CMAKE_EXTRA_FLAGS: "-DOQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON"}
|
||||||
]
|
]
|
||||||
runs-on: windows-latest
|
runs-on: ${{ matrix.platform.RUNNER }}
|
||||||
name: ${{ matrix.platform.ARCHITECTURE }}
|
name: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -33,12 +34,13 @@ jobs:
|
|||||||
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
||||||
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
||||||
|
CMAKE_EXTRA_FLAGS: ${{ matrix.platform.CMAKE_EXTRA_FLAGS }}
|
||||||
run: |
|
run: |
|
||||||
set BUILD_NUMBER=0
|
set BUILD_NUMBER=0
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
call "%VCVARS_PATH%"
|
call "%VCVARS_PATH%"
|
||||||
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% ..
|
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% %CMAKE_EXTRA_FLAGS% ..
|
||||||
cmake --build .
|
cmake --build .
|
||||||
mkdir installers
|
mkdir installers
|
||||||
vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
||||||
|
|||||||
10
.github/workflows/windows_release.yml
vendored
10
.github/workflows/windows_release.yml
vendored
@ -26,13 +26,14 @@ jobs:
|
|||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
build-windows:
|
build-windows:
|
||||||
name: ${{ matrix.platform.ARCHITECTURE }}
|
name: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
runs-on: windows-latest
|
runs-on: ${{ matrix.platform.RUNNER }}
|
||||||
needs: ["release"]
|
needs: ["release"]
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
platform: [
|
platform: [
|
||||||
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat"},
|
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
||||||
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat"}
|
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
||||||
|
{ ARCHITECTURE: arm64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/ARM64/bin/clang-cl.exe", VCPKG_TRIPLET: "arm64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsarm64.bat", RUNNER: "windows-11-arm", CMAKE_EXTRA_FLAGS: "-DOQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON"}
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout repository"
|
- name: "Checkout repository"
|
||||||
@ -57,11 +58,12 @@ jobs:
|
|||||||
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
||||||
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
||||||
|
CMAKE_EXTRA_FLAGS: ${{ matrix.platform.CMAKE_EXTRA_FLAGS }}
|
||||||
run: |
|
run: |
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
call "%VCVARS_PATH%"
|
call "%VCVARS_PATH%"
|
||||||
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% ..
|
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% %CMAKE_EXTRA_FLAGS% ..
|
||||||
cmake --build .
|
cmake --build .
|
||||||
mkdir installers
|
mkdir installers
|
||||||
vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
vpnsetup /SFXMODE:vpnclient /SFXOUT:"installers\softether-vpnclient-%VERSION%.%BUILD_NUMBER%.%ARCHITECTURE%.exe"
|
||||||
|
|||||||
@ -87,6 +87,10 @@ into it. So that is what will be described below.
|
|||||||
- x86-on-x64
|
- x86-on-x64
|
||||||
|
|
||||||
Cross compile x86 executables with 64-bit compiler
|
Cross compile x86 executables with 64-bit compiler
|
||||||
|
|
||||||
|
- arm64-on-x64
|
||||||
|
|
||||||
|
Cross compile arm64 executables with x64t compiler
|
||||||
|
|
||||||
On 64-bit Windows, all four configurations can be used. 32-bit platforms can only use 32-bit compiler.
|
On 64-bit Windows, all four configurations can be used. 32-bit platforms can only use 32-bit compiler.
|
||||||
|
|
||||||
|
|||||||
52
src/BUILD_WinArm64.md
Normal file
52
src/BUILD_WinArm64.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# How to build and install SoftEther VPN on Windows ARM64
|
||||||
|
|
||||||
|
This document describes how to build SoftEther VPN for Windows ARM64 and how to install the VPN Client and Neo6 virtual network adapter on Windows on ARM devices.
|
||||||
|
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
|
||||||
|
- Build host: Windows x64
|
||||||
|
|
||||||
|
- Target device: Windows 10 / Windows 11 ARM64
|
||||||
|
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
**Notes before building**: ARM64 builds are cross-compiled from an x64 Windows host. An existing x64-native build is required to generate hamcore.se2.
|
||||||
|
1. Follow [BUILD_WINDOWS.md](BUILD_WINDOWS.md##Building)
|
||||||
|
|
||||||
|
1. Build x64 (Native): From the build menu, select x64-on-x64. Complete the build successfully. This build is required to generate shared resources
|
||||||
|
|
||||||
|
1. Build ARM64 (Cross-Compiled): From the same build menu, select arm64-on-x64.
|
||||||
|
Build the ARM64 version of SoftEther VPN.
|
||||||
|
|
||||||
|
1. Building the Neo6 Virtual Network Adapter (ARM64)
|
||||||
|
|
||||||
|
Open the following project in Visual Studio:
|
||||||
|
```
|
||||||
|
.\src\Neo6\Neo6.vcxproj
|
||||||
|
```
|
||||||
|
|
||||||
|
SoftEther VPN Client uses the Neo6 virtual network adapter.
|
||||||
|
|
||||||
|
|
||||||
|
Driver Output Files
|
||||||
|
The ARM64 driver package includes:
|
||||||
|
```
|
||||||
|
Neo6_arm64_VPN.sys
|
||||||
|
Neo6_arm64_VPN.inf
|
||||||
|
```
|
||||||
|
Driver Signing and Installation (Windows ARM64)
|
||||||
|
```
|
||||||
|
Enable test-signing mode: bcdedit /set testsigning on
|
||||||
|
Reboot the system.
|
||||||
|
Testing signing:
|
||||||
|
Install the Neo6 ARM64 driver.
|
||||||
|
```
|
||||||
|
# Summary
|
||||||
|
|
||||||
|
SoftEther VPN can be cross-compiled for Windows ARM64 on an x64 host
|
||||||
|
VPN Client works natively on Windows on ARM
|
||||||
|
Neo6 ARM64 driver requires Microsoft signing for production use
|
||||||
|
Test-signing is suitable for local development only
|
||||||
@ -2562,9 +2562,16 @@ void OvsRecvPacket(OPENVPN_SERVER *s, LIST *recv_packet_list, UINT protocol)
|
|||||||
Debug("OpenVPN Channel %u Failed.\n", j);
|
Debug("OpenVPN Channel %u Failed.\n", j);
|
||||||
OvsLog(s, se, c, "LO_CHANNEL_FAILED");
|
OvsLog(s, se, c, "LO_CHANNEL_FAILED");
|
||||||
|
|
||||||
// Return the AUTH_FAILED
|
if ((se->IpcAsync->ErrorCode == ERR_AUTHTYPE_NOT_SUPPORTED) ||
|
||||||
str = "AUTH_FAILED";
|
(se->IpcAsync->ErrorCode == ERR_AUTH_FAILED) ||
|
||||||
WriteFifo(c->SslPipe->SslInOut->SendFifo, str, StrSize(str));
|
(se->IpcAsync->ErrorCode == ERR_PROXY_AUTH_FAILED) ||
|
||||||
|
(se->IpcAsync->ErrorCode == ERR_USER_AUTHTYPE_NOT_PASSWORD) ||
|
||||||
|
(se->IpcAsync->ErrorCode == ERR_NOT_SUPPORTED_AUTH_ON_OPENSOURCE))
|
||||||
|
{
|
||||||
|
// Return the AUTH_FAILED
|
||||||
|
str = "AUTH_FAILED";
|
||||||
|
WriteFifo(c->SslPipe->SslInOut->SendFifo, str, StrSize(str));
|
||||||
|
}
|
||||||
|
|
||||||
s->SessionEstablishedCount++;
|
s->SessionEstablishedCount++;
|
||||||
|
|
||||||
|
|||||||
@ -4761,7 +4761,7 @@ static void MY_SHA0_Transform(MY_SHA0_CTX* ctx) {
|
|||||||
UCHAR* p = ctx->buf;
|
UCHAR* p = ctx->buf;
|
||||||
int t;
|
int t;
|
||||||
for(t = 0; t < 16; ++t) {
|
for(t = 0; t < 16; ++t) {
|
||||||
UINT tmp = *p++ << 24;
|
UINT tmp = (UINT)*p++ << 24;
|
||||||
tmp |= *p++ << 16;
|
tmp |= *p++ << 16;
|
||||||
tmp |= *p++ << 8;
|
tmp |= *p++ << 8;
|
||||||
tmp |= *p++;
|
tmp |= *p++;
|
||||||
|
|||||||
@ -63,7 +63,7 @@ static int ydays[] =
|
|||||||
0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
|
0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
|
||||||
};
|
};
|
||||||
|
|
||||||
static UINT current_num_thread = 0;
|
static COUNTER *current_num_thread = NULL;
|
||||||
static UINT cached_number_of_cpus = 0;
|
static UINT cached_number_of_cpus = 0;
|
||||||
|
|
||||||
|
|
||||||
@ -776,6 +776,7 @@ void InitThreading()
|
|||||||
{
|
{
|
||||||
thread_pool = NewSk();
|
thread_pool = NewSk();
|
||||||
thread_count = NewCounter();
|
thread_count = NewCounter();
|
||||||
|
current_num_thread = NewCounter();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Release of thread pool
|
// Release of thread pool
|
||||||
@ -821,6 +822,9 @@ void FreeThreading()
|
|||||||
|
|
||||||
DeleteCounter(thread_count);
|
DeleteCounter(thread_count);
|
||||||
thread_count = NULL;
|
thread_count = NULL;
|
||||||
|
|
||||||
|
DeleteCounter(current_num_thread);
|
||||||
|
current_num_thread = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Thread pool procedure
|
// Thread pool procedure
|
||||||
@ -1028,9 +1032,9 @@ THREAD *NewThreadNamed(THREAD_PROC *thread_proc, void *param, char *name)
|
|||||||
|
|
||||||
Wait(pd->InitFinishEvent, INFINITE);
|
Wait(pd->InitFinishEvent, INFINITE);
|
||||||
|
|
||||||
current_num_thread++;
|
Inc(current_num_thread);
|
||||||
|
|
||||||
// Debug("current_num_thread = %u\n", current_num_thread);
|
// Debug("current_num_thread = %u\n", Count(current_num_thread));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1055,8 +1059,8 @@ void CleanupThread(THREAD *t)
|
|||||||
|
|
||||||
Free(t);
|
Free(t);
|
||||||
|
|
||||||
current_num_thread--;
|
Dec(current_num_thread);
|
||||||
//Debug("current_num_thread = %u\n", current_num_thread);
|
//Debug("current_num_thread = %u\n", Count(current_num_thread));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Release thread (pool)
|
// Release thread (pool)
|
||||||
|
|||||||
@ -72,11 +72,26 @@ int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, char *CmdLine, int CmdShow)
|
|||||||
|
|
||||||
// Compiler dependent
|
// Compiler dependent
|
||||||
#ifndef OS_WIN32
|
#ifndef OS_WIN32
|
||||||
// Gcc compiler
|
// GCC or Clang compiler
|
||||||
#define GCC_PACKED __attribute__ ((__packed__))
|
#define GCC_PACKED __attribute__ ((__packed__))
|
||||||
|
// Clang compiler
|
||||||
|
#if defined(__has_feature)
|
||||||
|
#if __has_feature(thread_sanitizer)
|
||||||
|
#define ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread")))
|
||||||
|
#endif // __has_feature(thread_sanitizer)
|
||||||
|
#endif // __has_feature
|
||||||
|
// GCC compiler
|
||||||
|
#if defined(__SANITIZE_THREAD__) && !defined(ATTRIBUTE_NO_TSAN)
|
||||||
|
#define ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread")))
|
||||||
|
#endif // __SANITIZE_THREAD__
|
||||||
|
// Other or older Clang/GCC compiler
|
||||||
|
#ifndef ATTRIBUTE_NO_TSAN
|
||||||
|
#define ATTRIBUTE_NO_TSAN
|
||||||
|
#endif // ATTRIBUTE_NO_TSAN
|
||||||
#else // OS_WIN32
|
#else // OS_WIN32
|
||||||
// VC++ compiler
|
// VC++ compiler
|
||||||
#define GCC_PACKED
|
#define GCC_PACKED
|
||||||
|
#define ATTRIBUTE_NO_TSAN
|
||||||
#endif // OS_WIN32
|
#endif // OS_WIN32
|
||||||
|
|
||||||
// Macro that displays the current file name and line number
|
// Macro that displays the current file name and line number
|
||||||
|
|||||||
@ -470,6 +470,7 @@ LIST *LoadLangList()
|
|||||||
b = ReadDump(filename);
|
b = ReadDump(filename);
|
||||||
if (b == NULL)
|
if (b == NULL)
|
||||||
{
|
{
|
||||||
|
FreeLangList(o);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2140,9 +2140,13 @@ void UnixMemoryFree(void *addr)
|
|||||||
// SIGCHLD handler
|
// SIGCHLD handler
|
||||||
void UnixSigChldHandler(int sig)
|
void UnixSigChldHandler(int sig)
|
||||||
{
|
{
|
||||||
|
int old_errno = errno;
|
||||||
|
|
||||||
// Recall the zombie processes
|
// Recall the zombie processes
|
||||||
while (waitpid(-1, NULL, WNOHANG) > 0);
|
while (waitpid(-1, NULL, WNOHANG) > 0);
|
||||||
signal(SIGCHLD, UnixSigChldHandler);
|
signal(SIGCHLD, UnixSigChldHandler);
|
||||||
|
|
||||||
|
errno = old_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable core dump
|
// Disable core dump
|
||||||
|
|||||||
669
src/bin/hamcore/wwwroot/admin/default/package-lock.json
generated
669
src/bin/hamcore/wwwroot/admin/default/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
28
tsan_suppressions.txt
Normal file
28
tsan_suppressions.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# This file contains suppressions for Thread Sanitizer.
|
||||||
|
# For the specification, refer to: https://github.com/google/sanitizers/wiki/threadsanitizersuppressions
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Set/Wait
|
||||||
|
# This provides synchronization equivalent to a lock, but Thread Sanitizer cannot recognize it.
|
||||||
|
|
||||||
|
# Thread Sanitizer reports data race on Halt in TK64.
|
||||||
|
# https://github.com/SoftEtherVPN/SoftEtherVPN/pull/2221
|
||||||
|
race_top:FreeTick64
|
||||||
|
|
||||||
|
# Thread Sanitizer reports data races on Finished and NoDelayFlag in CONNECT_SERIAL_PARAM,
|
||||||
|
# shared between BindConnectThreadForIPv4, BindConnectThreadForIPv6, and BindConnectEx5.
|
||||||
|
# https://github.com/SoftEtherVPN/SoftEtherVPN/pull/2222
|
||||||
|
race_top:BindConnectThreadForIPv4
|
||||||
|
race_top:BindConnectThreadForIPv6
|
||||||
|
race_top:BindConnectEx5
|
||||||
|
|
||||||
|
|
||||||
|
## Manual PTHREAD_MUTEX_RECURSIVE
|
||||||
|
# The Lock/Unlock mechanism on Unix is a manual, hand-coded implementation of PTHREAD_MUTEX_RECURSIVE.
|
||||||
|
# We avoid using the PTHREAD_MUTEX_RECURSIVE directly because it exhibits critical bugs, such as deadlocks
|
||||||
|
# on certain older systems(Linux, Solaris, or macOS). While Thread Sanitizer will report data races,
|
||||||
|
# these warnings should be ignored as the logic has been carefully implemented to ensure thread safety.
|
||||||
|
# https://github.com/SoftEtherVPN/SoftEtherVPN/pull/2219
|
||||||
|
race_top:UnixLock
|
||||||
|
race_top:UnixUnlockEx
|
||||||
Reference in New Issue
Block a user