Hello,
We are experiencing for the past weeks a segfault on haproxy processes when
reloading haproxy.

Each thread generates a coredump. Fortunately, this is the old process that
crashes, so there is no production impact.
The same behaviour happens with haproxy 2.0.25 compiled with OpenSSL 1.1.1l

Core was generated by `/root/haproxy -sf 42184 42185 42186 42187 42188
42189 42190 42191 42192 42193 4'.
Program terminated with signal 6, Aborted.
#0  0x00007f414c4d4495 in raise () from /lib64/libc.so.6
(gdb) bt full
#0  0x00007f414c4d4495 in raise () from /lib64/libc.so.6
No symbol table info available.
#1  0x00007f414c4d5c75 in abort () from /lib64/libc.so.6
No symbol table info available.
#2  0x00007f414c5123a7 in __libc_message () from /lib64/libc.so.6
No symbol table info available.
#3  0x00007f414c517dee in malloc_printerr () from /lib64/libc.so.6
No symbol table info available.
#4  0x00007f414c51ac3d in _int_free () from /lib64/libc.so.6
No symbol table info available.
#5  0x000000000047149c in ssl_sock_free_ssl_conf (conf=0x6f3d440) at
src/ssl_sock.c:3766
No locals.
#6  0x0000000000479f3d in ssl_sock_free_ssl_conf (conf=<optimized out>) at
src/ssl_sock.c:3764
No locals.
#7  ssl_sock_free_all_ctx (bind_conf=bind_conf@entry=0x6f3d160) at
src/ssl_sock.c:5144
        node = 0x6f4ac60
        sni = 0x6f4ac40
#8  0x000000000047a4a1 in ssl_sock_destroy_bind_conf (bind_conf=0x6f3d160)
at src/ssl_sock.c:5176
No locals.
#9  0x000000000050aae8 in deinit () at src/haproxy.c:2673


haproxy -vv output :

Build options :
  TARGET  = linux-glibc
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement
-fwrapv -Wno-unused-label -Wno-sign-compare -Wno-unused-parameter
-Wno-old-style-declaration -Wno-ignored-qualifiers -Wno-clobbered
-Wno-missing-field-initializers -Wno-implicit-fallthrough
-Wno-stringop-overflow -Wtype-limits -Wshift-negative-value
-Wshift-overflow=2 -Wduplicated-cond -Wnull-dereference
  OPTIONS = USE_THREAD=0 USE_STATIC_PCRE=1 USE_OPENSSL=1 USE_LUA=1
USE_ZLIB=1 USE_NS=

Feature list : -51DEGREES +ACCEPT4 -CLOSEFROM +CPU_AFFINITY +CRYPT_H
-DEVICEATLAS +DL +EPOLL -EVPORTS +FUTEX +GETADDRINFO -KQUEUE +LIBCRYPT
+LINUX_SPLICE +LINUX_TPROXY +LUA -MY_ACCEPT4 -MY_EPOLL -MY_SPLICE
+NETFILTER -NS -OBSOLETE_LINKER +OPENSSL -PCRE -PCRE2 -PCRE2_JIT -PCRE_JIT
+POLL +PRCTL -PRIVATE_CACHE -PTHREAD_PSHARED -REGPARM +RT -SLZ +STATIC_PCRE
-STATIC_PCRE2 -SYSTEMD +TFO +THREAD +THREAD_DUMP +TPROXY -VSYSCALL -WURFL
+ZLIB

Default settings :
  bufsize = 16384, maxrewrite = 1024, maxpollevents = 200

Built with multi-threading support (MAX_THREADS=64, default=32).
Built with OpenSSL version : OpenSSL 1.1.1t  7 Feb 2023
Running on OpenSSL version : OpenSSL 1.1.1t  7 Feb 2023
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3
Built with Lua version : Lua 5.4.4
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT
IP_FREEBIND
Built with zlib version : 1.2.13
Running on zlib version : 1.2.13
Compression algorithms supported : identity("identity"),
deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with PCRE version : 8.45 2021-06-15
Running on PCRE version : 8.45 2021-06-15
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Encrypted password support via crypt(3): yes

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.

Available multiplexer protocols :
(protocols marked as <default> cannot be specified using 'proto' keyword)
              h2 : mode=HTX        side=FE|BE     mux=H2
              h2 : mode=HTTP       side=FE        mux=H2
       <default> : mode=HTX        side=FE|BE     mux=H1
       <default> : mode=TCP|HTTP   side=FE|BE     mux=PASS

Available services : none

Available filters :
        [SPOE] spoe
        [COMP] compression
        [CACHE] cache
        [TRACE] trace


I understand this is linked to some SSL config file, but fail to find what.
The haproxy config file is very large (> 1000 lines) with dozens of
frontend/backend. It will help me to know which one is it. Any "gdb" advice
how to narrow the issue down ?

Thanks,

Olivier

Reply via email to