Since commit365ee28("BUG/MINOR: hlua: prevent LJMP in hlua_traceback()") we now use lua_pcall() to protect sensitive parts of hlua_traceback() function, and this to prevent Lua from crashing the process in case of unexpected Lua error. This is still relevant, but an error was made, as lua_pcall() was given the nresult argument '1' when _hlua_traceback() internal function doesn't push any argument on the stack. Because of this, it seems Lua API still tries to push garbage object on top of the stack before returning. This may cause functions that leverage hlua_traceback() in the middle of stack manipulation to end up having a corrupted stack when continuing after the hlua_traceback(). There doesn't seem to be many places where this could be a problem, as this was discovered using the reproducer documented inf535d3e("BUG/MEDIUM: debug: only dump Lua state when panicking"). Indeed, when hlua_traceback() was used from the signal handler while the thread was previously executing Lua, when returning to Lua after the handler the Lua stack would be corrupted. To fix the issue, we emphasize on the fact that the _hlua_traceback() function doesn't push anything on the stack, returns 0, thus lua_pcall() is given 0 'nresult' argument to prevent anything from being pushed after the execution, preserving the original stack state. This should be backported to all stable versions (because365ee28was backported there)
HAProxy
HAProxy is a free, very fast and reliable reverse-proxy offering high availability, load balancing, and proxying for TCP and HTTP-based applications.
Installation
The INSTALL file describes how to build HAProxy. A list of packages is also available on the wiki.
Getting help
The discourse and the mailing-list are available for questions or configuration assistance. You can also use the slack or IRC channel. Please don't use the issue tracker for these.
The issue tracker is only for bug reports or feature requests.
Documentation
The HAProxy documentation has been split into a number of different files for ease of use. It is available in text format as well as HTML. The wiki is also meant to replace the old architecture guide.
Please refer to the following files depending on what you're looking for:
- INSTALL for instructions on how to build and install HAProxy
- BRANCHES to understand the project's life cycle and what version to use
- LICENSE for the project's license
- CONTRIBUTING for the process to follow to submit contributions
The more detailed documentation is located into the doc/ directory:
- doc/intro.txt for a quick introduction on HAProxy
- doc/configuration.txt for the configuration's reference manual
- doc/lua.txt for the Lua's reference manual
- doc/SPOE.txt for how to use the SPOE engine
- doc/network-namespaces.txt for how to use network namespaces under Linux
- doc/management.txt for the management guide
- doc/regression-testing.txt for how to use the regression testing suite
- doc/peers.txt for the peers protocol reference
- doc/coding-style.txt for how to adopt HAProxy's coding style
- doc/internals for developer-specific documentation (not all up to date)
License
HAProxy is licensed under GPL 2 or any later version, the headers under LGPL 2.1. See the LICENSE file for a more detailed explanation.
