On 07/05/2017 12:25 AM, Lukas Tribus wrote: > > Am 04.07.2017 um 23:18 schrieb Willy Tarreau: >> On Tue, Jul 04, 2017 at 10:57:08PM +0200, Lukas Tribus wrote: >>> The call trace doesn't really look different when I used -dM or >>> -DDEBUG_MEMORY. >>> >>> I was able to get a different trace by actually connecting to a backend >>> however, >>> (instead of showing an haproxy internal 403 error): >> (...) >> >> Thank you Lukas, let's hope this will help. >> >> > > Another bisect (this time with -dM or -DDEBUG_MEMORY), another commit... > Now it points to 23e9e931 (MINOR: log: Add logurilen tunable). > >
Hi Lukas, Indeed this commit introduced a regression. The commit in attachment should fix the issue. R, Emeric
>From 595396561c380aa100e2c1f80299e5fadd18e663 Mon Sep 17 00:00:00 2001 From: Emeric Brun <[email protected]> Date: Wed, 5 Jul 2017 13:33:16 +0200 Subject: [PATCH] BUG/MAJOR: http: fix buffer overflow on loguri buffer. The pool used to log the uri was created with a size of 0 because the configuration and 'tune.http.logurilen' were parsed too earlier. The fix consist to postpone the pool_create as it is done for cookie captures. Regression introduced with 'MINOR: log: Add logurilen tunable' --- src/cfgparse.c | 2 ++ src/proto_http.c | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 3706bca..600f273 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -7404,6 +7404,8 @@ int check_config_validity() if (!global.tune.requri_len) global.tune.requri_len = REQURI_LEN; + pool2_requri = create_pool("requri", global.tune.requri_len , MEM_F_SHARED); + pool2_capture = create_pool("capture", global.tune.cookie_len, MEM_F_SHARED); /* allocate pool of resolution per resolvers */ diff --git a/src/proto_http.c b/src/proto_http.c index 46cb6ff..7141833 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -459,7 +459,6 @@ void init_proto_http() /* memory allocations */ pool2_http_txn = create_pool("http_txn", sizeof(struct http_txn), MEM_F_SHARED); - pool2_requri = create_pool("requri", global.tune.requri_len , MEM_F_SHARED); pool2_uniqueid = create_pool("uniqueid", UNIQUEID_LEN, MEM_F_SHARED); } -- 2.7.4

