An ocean of details
We've been hard at work authoring this (hopefully last) beta release to the 0.7.x facil.io.
There's just one or two planned API updates for the HTTP module (which is why we're still in beta phase). These changes shouldn't effect any code, but they will effect ABI compatibility, so if you need ABI compatibility, you'll need to wait a bit longer.
Here's what this update includes:
Security: (fio
) Slowloris mitigation is now part of the core library, where FIO_SLOWLORIS_LIMIT
pending calls to write
(currently 1,024 backlogged calls) will flag the connection as an attacker and either close the connection or ignore it. This protocol independent approach improves security.
Security: (http
) HTTP/1.1 client throttling - new requests will not be consumed until pending responses were sent. Since HTTP/1.1 is a response-request protocol, this protocol specific approach should protect the HTTP application against slow clients.
Fix: (fio
) fixed fallback implementation for fio_atomic_xchange
when missing atomic primitives in compiler (older compilers). Credit to @Low-power for identifying and fixing the issue (PR #55).
Fix: (fio
) fixed a possible unreleased lock when a memory allocation failed (no memory in the system). Credit to @Low-power for identifying and fixing the issue (PR #54).
Fix: (fio
) fixed the fio_sock_sendfile_from_fd
fall-back for a missing sendfile
. Credit to @Low-power for identifying and fixing the typo (PR #49).
Fix: (fio
) fixed fio_pending
not decrementing packet count before reaching zero.
Fix: (fio
) fixed logging message for overflowing log messages. Credit to @weskerfoot (Wesley Kerfoot) and @adam12 (Adam Daniels) for exposing the issue (issue iodine/#56).
Fix: (fio
, fio_risky_hash
) Florian Weber (@Florianjw) exposed a byte ordering error (last 7 byte reading order) and took time challenge the algorithm. The exposed errors were fixed and the exposed a possible attack on RiskyHash using a variation on a Meet-In-The-Middle attack, written by Hening Makholm (@hmakholm). This prompted an update and fixes to the function.
Fix: (fio
) fixed fio_str_resize
where data might be lost if data was written beyond the current size and the requested size is larger then the String's capacity (i.e., when fio_str_resize
is (mis)used as an alternative to fio_str_capa_assert
).
Fix: (json
/ redis
) fixed JSON formatting error caused by buffer reallocation when multiple (more then 48) escape sequences were detected. This issue also effected the Redis command callback handler (which was using JSON for IPC).
Fix: (redis
) fixed a potential double free
call.
Fix: (redis
) fixed a recursive endless loop when converting nested Hash Tables to Redis objects (which normally wouldn't happen anyway, since they would be processed as JSON).
Fix: (redis
) fixed Redis reconnection. Address and port data was mistakingly written at the wrong address, causing it to be overwritten by incoming (non-pub/sub) data.
Fix: (redis
) fixed a race condition in the Redis reconnection logic which might have caused more then a single pub/sub connection to be established and the first pending command to be sent again.
Fix: (fio
) fix capacity maximization log to accommodate issues where getrlimit
would return a rlim_max
that's too high for rlim_cur
(macOS).
Fix: (fio
) fix uninitialized kqueue
message in fio_poll_remove_fd
.
Fix: (http
) possible fix for http_connect
, where host
header length might have been left uninitialized, resulting in possible errors.
Fix: (fio
) fixed logging error message for long error messages.
Update: (fio
/ makefile
) improved detection for polling system call, sendfile
, etc'.
Update: (fio
) improved signal handling. Signal handling now propagates to pre-existing signal handlers. In addition, the fio_signal_handler_reset
function was made public, allowing facil.io signal handlers to be removed immediately following startup (using fio_state_callback_add
with FIO_CALL_PRE_START
to call fio_signal_handler_reset
).
Update: (fio
) improved pub/sub memory usage to minimize message copying in cluster mode (same memory is used for IPC and local-process message publishing).
Update: (fio
) updated the non-cryptographic PRG algorithm for performance and speed. Now the fio_rand
functions are modeled after the xoroshiro128+
algorithm, with an automated re-seeding counter based on RiskyHash. This should improve performance for non cryptographic random requirements.
Compatibility: (fio
) mitigate undefined MAP_ANONYMOUS on MacOS <= 10.10. Credit to @xicreative (Evan Pavlica) for iodine/PR#61.
Compatibility: (fio
) various Solaris OS compatibility patches, courtesy of @Low-power (PR #52, #53).