This is useful when checking connection issues, and can be used to
check broken random number generator and replay attacks.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
- GNU treats void* as char* when doing pointer arithmetic, so let's make it clear
- Fix memory leak, save copy from malloc() and pass the original pointer to free()
- minor type mismatches
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
- The usage of `pthread_setname_np` is not supported on versions of
glibc earlier than 2.12. This patch checks the glibc MINOR version and
only uses that API where supported.
- This will suppress undeclared function warning when compiling
with uClibc/musl-libc.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
Close#603
After use, sensitive data should be overwritten, but memset() and hand-written code can be silently stripped out by an optimizing compiler or by the linker.
The sodium_memzero() function tries to effectively zero len bytes starting at pnt, even if optimizations are being applied to the code.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
- Added one macro to avoid dangling pointers
- Added two functions to perform NULL pointer check
since the allocation is not guaranteed by C library, although it
is a rare case, just for sanity
- Add NULL pointer check to brealloc() and bfree() and for sanity as well
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
This is an option in the origin configure script, add this to configure.ac to generate
config.h since submodules are sharing the same file.
All checks needed are guaranteed, thus simply add it to the ending of file.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
errno is never set to zero by any system call or library function,
and it's programmer's resposibility to reset it before doing checks.
Otherwise the error might be misleading.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
The whole remote_ctx is inserted into the cache and sockaddr_storage contains
both address and port.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
This may fix#565
It is not recommended to compare two structs via memcmp although they have been
memset to 0.
Added two helper functions to compare sockaddr_storage, one for address only and
the other one takes port into account.
These two functions are based on Unbound version in util/net_help.c, and
comform needs of shadowsocks-libev.
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
code issues found by Clang with
CFLAGS="-Os -Wall -Wextra -Werror=unused-const-variable -Wno-error=unused-parameter"
enabled
The details as follows:
- variable initialization issue, modified them as Clang suggested
- data type mismatch when comparing, fix them either by casting or changing
the data type of index of iterator
- get_sockaddr() in netutils may return -1 thus changed returning type from
size_t to ssize_t, which makes Clang happier
- recvfrom() in udprelay is identical, fix this by creating local variable
for comparison and assign back to buf->len when returning value is acceptable
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
Note:
- ChaCha20 with an extended (96 bit) nonce and a 32-bit counter has
been implemented as crypto_stream_chacha20_ietf() from LibSodium 1.0.4
- The name of new cipher is "chacha20-ietf"
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
If we already defined `CFLAGS=-D_FORTIFY_SOURCE=1`, it will still check `-D_FORTIFY_SOURCE=2` and
add it to CPPFLAGS. In this case, we redefine `_FORTIFY_SOURCE` to both 1 and 2 if compiler accepts `-D_FORTIFY_SOURCE=2`.
Fix this issue by checking whether `_FORTIFY_SOURCE` was defined or not.
If defined, do nothing. If not, then check `-D_FORTIFY_SOURCE=2`.
BTW, OpenWrt's buildroot uses `-D_FORTIFY_SOURCE=1` for most targets by default.