From 3ef7daa73169fc0d72b60e79ac6782d903dd6d4e Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 15 Apr 2024 08:26:41 +0200 Subject: [PATCH] BUG/MAJOR: ring: use the correct size to reallocate startup_logs In 3.0-dev, with commit 7c9ce715c9 ("MINOR: ring: make callers use ring_data() and ring_size(), not ring->buf"), we made startup_logs_dup() use ring_size() to get the old ring size and pass it to ring_new() to create a new ring. But due to the ambiguity of the allocate vs usable size, this resulted in slightly shrinking the buffer compared to the previous one, occasionally causing crashes if the first one was already full of warnings, as seen in GH issue #2529. We need to use the allocated size instead, thanks to the function brought by previous commit. No backport is needed, this only affects 3.0-dev. Thanks to @felipewd for the detailed report that allowed to spot the problem. --- src/errors.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/errors.c b/src/errors.c index 62a5ebd3b9..1069a69d23 100644 --- a/src/errors.c +++ b/src/errors.c @@ -201,7 +201,7 @@ struct ring *startup_logs_dup(struct ring *src) struct ring *dst = NULL; /* must use the size of the previous buffer */ - dst = ring_new(ring_size(src)); + dst = ring_new(ring_allocated_size(src)); if (!dst) goto error; -- 2.47.3