Skip to content

Commit dc15581

Browse files
committed
BUG/MEDIUM: http-ana: Don't release too early the L7 buffer
In some cases, the buffer used to store the request to be able to perform a L7 retry is released released too early, leading to a crash because a retry is performed with an empty request. First, there is a test on invalid 101 responses that may be caught by the "junk-response" retry policy. Then, it is possible to get an error (empty-response, bad status code...) after an interim response. In both cases, the L7 buffer is already released while it should not. To fix the issue, the L7 buffer is now released at the end of the AN_RES_WAIT_HTTP analyser, but only when a response was successfully received and processed. In all error cases, the stream is quickly released, with the L7 buffer. So there is no leak and it is safer this way. This patch may fix the issue #2793. It must be as far as 2.4.
1 parent ceb80ae commit dc15581

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/http_ana.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,9 +1451,6 @@ int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit)
14511451
return 0;
14521452
}
14531453

1454-
/* Now, L7 buffer is useless, it can be released */
1455-
b_free(&txn->l7_buffer);
1456-
14571454
msg->msg_state = HTTP_MSG_BODY;
14581455

14591456

@@ -1642,6 +1639,9 @@ int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit)
16421639
}
16431640

16441641
end:
1642+
/* Now, L7 buffer is useless, it can be released */
1643+
b_free(&txn->l7_buffer);
1644+
16451645
/* we want to have the response time before we start processing it */
16461646
s->logs.t_data = ns_to_ms(now_ns - s->logs.accept_ts);
16471647

0 commit comments

Comments
 (0)