In `ckch_inst_sni_ctx_to_sni_filters` use `calloc()` to allocate the filter
array. When the function fails to allocate memory for a single entry the
whole array will be `free()`d using free_sni_filters(). With the previous
`malloc()` the pointers for entries after the failing allocation could
possibly be a garbage value.

This bug was introduced in commit 38df1c8006a2adf97f4ad5a183f80cfdcba3da8a,
which is 2.2+. No backport needed.
 src/ssl_sock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/ssl_sock.c b/src/ssl_sock.c
index 73375bcf9..3d32ced7f 100644
--- a/src/ssl_sock.c
+++ b/src/ssl_sock.c
@@ -3939,7 +3939,7 @@ static int ckch_inst_sni_ctx_to_sni_filters(const struct 
ckch_inst *ckchi, char
        if (!tmp_fcount)
                goto end;
-       tmp_filter = malloc(sizeof(*tmp_filter) * tmp_fcount);
+       tmp_filter = calloc(tmp_fcount, sizeof(*tmp_filter));
        if (!tmp_filter) {
                errcode |= ERR_FATAL|ERR_ALERT;
                goto error;

Reply via email to