Hi again Steve,

On Mon, Jan 13, 2014 at 08:44:08AM +0100, Willy Tarreau wrote:
> Hi Steve,
> 
> On Fri, Jan 10, 2014 at 02:16:48PM -0800, Steve Ruiz wrote:
> > I'm experimenting with haproxy on a centos6 VM here.  I found that when I
> > specified a health check page (option httpchk GET /url), and that page
> > didn't exist, we have a large 404 page returned, and that causes haproxy to
> > quickly segfault (seems like on the second try GET'ing and parsing the
> > page).  I couldn't figure out from the website where to submit a bug, so I
> > figure I'll try here first.
> > 
> > Steps to reproduce:
> > - setup http backend, with option httpchk and httpcheck expect string x.
> > Make option httpchk point to a non-existent page
> > - On backend server, set it up to serve large 404 response (in my case, the
> > 404 page is 186kB, as it has an inline graphic and inline css)
> > - Start haproxy, and wait for it to segfault
> > 
> > I wasn't sure exactly what was causing this at first, so I did some work to
> > narrow it down with GDB.  The variable values from gdb led me to the cause
> > on my side, and hopefully can help you fix the issue.  I could not make
> > this work with simply a large page for the http response - in that case, it
> > seems to work as advertised, only inspecting the response up to
> > tune.chksize (default 16384 as i've left it).  But if I do this with a 404,
> > it seems to kill it.  Let me know what additional information you need if
> > any.  Thanks and kudos for the great bit of software!
> 
> Thanks for all these details. I remember that the http-expect code puts
> a zero at the end of the received buffer prior to looking up the string.
> But it might be possible that there would be some cases where it doesn't
> do it, or maybe it dies after restoring it. Another thing I'm thinking
> about is that we're using the trash buffer for many operations and I'm
> realizing that the check buffer's size might possibly be larger :-/

I'm a bit puzzled, not only I cannot reproduce the issue, but also I do
not see in the code how this could happen, so I must be missing something.
Could you please post the output of "strace -tt" on haproxy when it does
this ? Especially the last checks ? I'm suspecting an anomaly in the receive
buffer size calculation but all I read here seems fine, which puzzles me.

Thanks!
Willy


Reply via email to