Hi,
i try to test lua in haproxy and i got segfault while doing curl request :
# curl http://127.0.0.1 -H "X-debug-me: yes"
curl: (52) Empty reply from server
---
# gdb ./haproxy
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
http://www.gnu.org/software/gdb/bugs/...
Reading symbols from /root/haproxy/haproxy...done.
(gdb) run -f /etc/haproxy/haproxy.cfg -db
Starting program: /root/haproxy/haproxy -f /etc/haproxy/haproxy.cfg -db
Program received signal SIGSEGV, Segmentation fault.
__memmove_ssse3 () at ../sysdeps/x86_64/multiarch/memcpy-ssse3.S:2976
2976 ../sysdeps/x86_64/multiarch/memcpy-ssse3.S: Aucun fichier ou dossier de ce type.
(gdb) bt
#0 __memmove_ssse3 () at ../sysdeps/x86_64/multiarch/memcpy-ssse3.S:2976
#1 0x00000000004130a9 in buffer_insert_line2 (b=0x7e53b0, pos=0x7e541c "\r\n", str=0x782850 "", len=20) at src/buffer.c:126
#2 0x0000000000468c99 in http_header_add_tail2 (msg=0x7cd5a0, hdr_idx=0x7cd540, text=0x782850 "", len=20) at src/proto_http.c:507
#3 0x0000000000472ebb in http_process_request (s=0x7cd1e0, req=0x7cd1f0, an_bit=512) at src/proto_http.c:4596
#4 0x00000000004b7202 in process_stream (t=0x7d4cb0) at src/stream.c:1741
#5 0x00000000004196c4 in process_runnable_tasks () at src/task.c:238
#6 0x000000000040c148 in run_poll_loop () at src/haproxy.c:1515
#7 0x000000000040cca2 in main (argc=4, argv=0x7fffffffe6f8) at src/haproxy.c:1874
---
# ./haproxy -vv
HA-Proxy version 1.6-dev3-03d0e4-59 2015/08/11
Copyright 2000-2015 Willy Tarreau <willy@haproxy.org>
Build options :
TARGET = linux2628
CPU = generic
CC = gcc
CFLAGS = -O0
OPTIONS = USE_ZLIB=1 USE_OPENSSL=1 USE_PCRE=1
Default settings :
maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200
Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.7
Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with OpenSSL version : OpenSSL 1.0.1e 11 Feb 2013
Running on OpenSSL version : OpenSSL 1.0.1e 11 Feb 2013
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.30 2012-02-04
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with Lua version : Lua 5.3.1
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND
Available polling systems :
epoll : pref=300, test result OK
poll : pref=200, test result OK
select : pref=150, test result OK
Total: 3 (3 usable), will use epoll.
---
global
log /dev/log local0
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
nbproc 1
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-ciphers kEECDH+aECDSA+AES:kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
ssl-default-bind-options no-sslv3
lua-load /root/haproxy/mylua.lua
defaults
log global
mode http
option httplog
option log-health-checks
option log-separate-errors
maxconn 19500 # Should be slightly smaller than global.maxconn.
timeout client 60s # Client and server timeout must match the longest
timeout server 60s # time we may wait for a response from the server.
timeout queue 60s # Don't queue requests too long if saturated.
timeout connect 4s # There's no reason to change this one.
timeout http-request 5s # A complete request may never take that long.
# Uncomment the following one to protect against nkiller2. But warning!
# some slow clients might sometimes receive truncated data if last
# segment is lost and never retransmitted :
# option nolinger
option httpclose
option abortonclose
balance roundrobin
option forwardfor header remote-ip
retries 2
option redispatch
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
### HTTP ###
frontend fe:80
bind 127.0.0.1:80
acl debugme req.hdr_cnt(X-debug-me) ge 1
http-request lua mirror if debugme
default_backend be
frontend fe:443
bind 127.0.0.1:443 ssl crt /etc/ssl/private
default_backend be
backend be
server s1 127.0.0.2
server s2 127.0.0.3
server s3 127.0.0.4
Regards,
--
Marc-Antoine
i try to test lua in haproxy and i got segfault while doing curl request :
# curl http://127.0.0.1 -H "X-debug-me: yes"
curl: (52) Empty reply from server
---
# gdb ./haproxy
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
http://www.gnu.org/software/gdb/bugs/...
Reading symbols from /root/haproxy/haproxy...done.
(gdb) run -f /etc/haproxy/haproxy.cfg -db
Starting program: /root/haproxy/haproxy -f /etc/haproxy/haproxy.cfg -db
Program received signal SIGSEGV, Segmentation fault.
__memmove_ssse3 () at ../sysdeps/x86_64/multiarch/memcpy-ssse3.S:2976
2976 ../sysdeps/x86_64/multiarch/memcpy-ssse3.S: Aucun fichier ou dossier de ce type.
(gdb) bt
#0 __memmove_ssse3 () at ../sysdeps/x86_64/multiarch/memcpy-ssse3.S:2976
#1 0x00000000004130a9 in buffer_insert_line2 (b=0x7e53b0, pos=0x7e541c "\r\n", str=0x782850 "", len=20) at src/buffer.c:126
#2 0x0000000000468c99 in http_header_add_tail2 (msg=0x7cd5a0, hdr_idx=0x7cd540, text=0x782850 "", len=20) at src/proto_http.c:507
#3 0x0000000000472ebb in http_process_request (s=0x7cd1e0, req=0x7cd1f0, an_bit=512) at src/proto_http.c:4596
#4 0x00000000004b7202 in process_stream (t=0x7d4cb0) at src/stream.c:1741
#5 0x00000000004196c4 in process_runnable_tasks () at src/task.c:238
#6 0x000000000040c148 in run_poll_loop () at src/haproxy.c:1515
#7 0x000000000040cca2 in main (argc=4, argv=0x7fffffffe6f8) at src/haproxy.c:1874
---
# ./haproxy -vv
HA-Proxy version 1.6-dev3-03d0e4-59 2015/08/11
Copyright 2000-2015 Willy Tarreau <willy@haproxy.org>
Build options :
TARGET = linux2628
CPU = generic
CC = gcc
CFLAGS = -O0
OPTIONS = USE_ZLIB=1 USE_OPENSSL=1 USE_PCRE=1
Default settings :
maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200
Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.7
Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with OpenSSL version : OpenSSL 1.0.1e 11 Feb 2013
Running on OpenSSL version : OpenSSL 1.0.1e 11 Feb 2013
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.30 2012-02-04
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with Lua version : Lua 5.3.1
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND
Available polling systems :
epoll : pref=300, test result OK
poll : pref=200, test result OK
select : pref=150, test result OK
Total: 3 (3 usable), will use epoll.
---
global
log /dev/log local0
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
nbproc 1
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-ciphers kEECDH+aECDSA+AES:kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
ssl-default-bind-options no-sslv3
lua-load /root/haproxy/mylua.lua
defaults
log global
mode http
option httplog
option log-health-checks
option log-separate-errors
maxconn 19500 # Should be slightly smaller than global.maxconn.
timeout client 60s # Client and server timeout must match the longest
timeout server 60s # time we may wait for a response from the server.
timeout queue 60s # Don't queue requests too long if saturated.
timeout connect 4s # There's no reason to change this one.
timeout http-request 5s # A complete request may never take that long.
# Uncomment the following one to protect against nkiller2. But warning!
# some slow clients might sometimes receive truncated data if last
# segment is lost and never retransmitted :
# option nolinger
option httpclose
option abortonclose
balance roundrobin
option forwardfor header remote-ip
retries 2
option redispatch
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
### HTTP ###
frontend fe:80
bind 127.0.0.1:80
acl debugme req.hdr_cnt(X-debug-me) ge 1
http-request lua mirror if debugme
default_backend be
frontend fe:443
bind 127.0.0.1:443 ssl crt /etc/ssl/private
default_backend be
backend be
server s1 127.0.0.2
server s2 127.0.0.3
server s3 127.0.0.4
Regards,
--
Marc-Antoine