Package: release.debian.org Severity: normal Tags: trixie X-Debbugs-Cc: [email protected] Control: affects -1 + src:dovecot User: [email protected] Usertags: pu
The version of dovecot currently staged for inclusion in the next trixie point release inadvertently introduced a memory leak when backporting upstream's fix for CVE-2026-27857. After conversation with the security team, we decided that the leak was not severe enough to warrant a revision to the DSA, but could instead wait for the upcoming trixie point release. So that's what this request is about. This change updates debian/patches/CVE-2026-27857-2.patch to remove a stray line "id->log_reply = str_new(default_pool, 64);" It also refreshes debian/patches/CVE-2026-27857-4.patch based on contextual changes from updating -2. This change also pulls in an autopkgtest that was introduced in the bookworm update in DSA 6197 to detect a regression in that update. debdiff is attached. noah
diff -Nru dovecot-2.4.1+dfsg1/debian/changelog dovecot-2.4.1+dfsg1/debian/changelog --- dovecot-2.4.1+dfsg1/debian/changelog 2026-03-31 15:07:17.000000000 -0400 +++ dovecot-2.4.1+dfsg1/debian/changelog 2026-05-06 15:18:43.000000000 -0400 @@ -1,3 +1,10 @@ +dovecot (1:2.4.1+dfsg1-6+deb13u5) trixie; urgency=medium + + * [b357180] autopkgtests: Add managesieved authentication test + * [c9d69a1] Fix memory leak in CVE-2026-27857 fix + + -- Noah Meyerhans <[email protected]> Wed, 06 May 2026 15:18:43 -0400 + dovecot (1:2.4.1+dfsg1-6+deb13u4) trixie-security; urgency=medium * [bc29057] CVE-2025-59028: auth: Don't disconnect auth client when diff -Nru dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-2.patch dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-2.patch --- dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-2.patch 2026-03-31 15:07:17.000000000 -0400 +++ dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-2.patch 2026-05-05 20:14:11.000000000 -0400 @@ -20,8 +20,10 @@ src/plugins/virtual/virtual-config.c | 2 +- 13 files changed, 30 insertions(+), 19 deletions(-) ---- dovecot-2.4.1+dfsg1.orig/src/imap-login/imap-login-client.c -+++ dovecot-2.4.1+dfsg1/src/imap-login/imap-login-client.c +Index: dovecot/src/imap-login/imap-login-client.c +=================================================================== +--- dovecot.orig/src/imap-login/imap-login-client.c ++++ dovecot/src/imap-login/imap-login-client.c @@ -382,7 +382,7 @@ static int imap_client_create(struct cli imap_client->parser = imap_parser_create(imap_client->common.input, @@ -40,21 +42,24 @@ /* CRLF is lost from buffer when streams are reopened. */ imap_client->skip_line = FALSE; ---- dovecot-2.4.1+dfsg1.orig/src/imap-login/imap-login-cmd-id.c -+++ dovecot-2.4.1+dfsg1/src/imap-login/imap-login-cmd-id.c -@@ -346,7 +346,9 @@ int cmd_id(struct imap_client *client) +Index: dovecot/src/imap-login/imap-login-cmd-id.c +=================================================================== +--- dovecot.orig/src/imap-login/imap-login-cmd-id.c ++++ dovecot/src/imap-login/imap-login-cmd-id.c +@@ -346,7 +346,8 @@ int cmd_id(struct imap_client *client) id->params->pool = param_pool; id->parser = imap_parser_create(client->common.input, client->common.output, - IMAP_LOGIN_MAX_LINE_LENGTH); + IMAP_LOGIN_MAX_LINE_LENGTH, + NULL); -+ id->log_reply = str_new(default_pool, 64); if (client->set->imap_literal_minus) imap_parser_enable_literal_minus(id->parser); parser_flags = IMAP_PARSE_FLAG_STOP_AT_LIST; ---- dovecot-2.4.1+dfsg1.orig/src/imap/cmd-append.c -+++ dovecot-2.4.1+dfsg1/src/imap/cmd-append.c +Index: dovecot/src/imap/cmd-append.c +=================================================================== +--- dovecot.orig/src/imap/cmd-append.c ++++ dovecot/src/imap/cmd-append.c @@ -1063,7 +1063,8 @@ static bool cmd_append_full(struct clien o_stream_unset_flush_callback(client->output); @@ -65,8 +70,10 @@ if (client->set->imap_literal_minus) imap_parser_enable_literal_minus(ctx->save_parser); ---- dovecot-2.4.1+dfsg1.orig/src/imap/cmd-setmetadata.c -+++ dovecot-2.4.1+dfsg1/src/imap/cmd-setmetadata.c +Index: dovecot/src/imap/cmd-setmetadata.c +=================================================================== +--- dovecot.orig/src/imap/cmd-setmetadata.c ++++ dovecot/src/imap/cmd-setmetadata.c @@ -289,7 +289,8 @@ cmd_setmetadata_start(struct imap_setmet asynchronously the same way as APPEND does. */ client->input_lock = cmd; @@ -77,8 +84,10 @@ if (client->set->imap_literal_minus) imap_parser_enable_literal_minus(ctx->parser); o_stream_unset_flush_callback(client->output); ---- dovecot-2.4.1+dfsg1.orig/src/imap/imap-client.c -+++ dovecot-2.4.1+dfsg1/src/imap/imap-client.c +Index: dovecot/src/imap/imap-client.c +=================================================================== +--- dovecot.orig/src/imap/imap-client.c ++++ dovecot/src/imap/imap-client.c @@ -975,7 +975,8 @@ client_command_new(struct client *client } else { cmd->parser = @@ -89,8 +98,10 @@ if (client->set->imap_literal_minus) imap_parser_enable_literal_minus(cmd->parser); } ---- dovecot-2.4.1+dfsg1.orig/src/lib-imap-client/imapc-connection.c -+++ dovecot-2.4.1+dfsg1/src/lib-imap-client/imapc-connection.c +Index: dovecot/src/lib-imap-client/imapc-connection.c +=================================================================== +--- dovecot.orig/src/lib-imap-client/imapc-connection.c ++++ dovecot/src/lib-imap-client/imapc-connection.c @@ -1876,7 +1876,8 @@ static void imapc_connection_connect_nex o_stream_set_flush_callback(conn->output, imapc_connection_connected, conn); @@ -101,8 +112,10 @@ conn->to = timeout_add(conn->client->set->imapc_connection_timeout_interval_msecs, imapc_connection_timeout, conn); conn->to_output = timeout_add(conn->client->set->imapc_max_idle_time_secs*1000, ---- dovecot-2.4.1+dfsg1.orig/src/lib-imap-storage/imap-msgpart.c -+++ dovecot-2.4.1+dfsg1/src/lib-imap-storage/imap-msgpart.c +Index: dovecot/src/lib-imap-storage/imap-msgpart.c +=================================================================== +--- dovecot.orig/src/lib-imap-storage/imap-msgpart.c ++++ dovecot/src/lib-imap-storage/imap-msgpart.c @@ -149,7 +149,7 @@ imap_msgpart_get_header_fields(pool_t po int result = 0; @@ -112,8 +125,10 @@ if (imap_parser_finish_line(parser, 0, 0, &args) > 0 && imap_arg_get_list_full(args, &hdr_list, &list_count) && ---- dovecot-2.4.1+dfsg1.orig/src/lib-imap/imap-bodystructure.c -+++ dovecot-2.4.1+dfsg1/src/lib-imap/imap-bodystructure.c +Index: dovecot/src/lib-imap/imap-bodystructure.c +=================================================================== +--- dovecot.orig/src/lib-imap/imap-bodystructure.c ++++ dovecot/src/lib-imap/imap-bodystructure.c @@ -722,7 +722,7 @@ int imap_bodystructure_parse_full(const input = i_stream_create_from_data(bodystructure, strlen(bodystructure)); (void)i_stream_read(input); @@ -132,8 +147,10 @@ ret = imap_parser_finish_line(parser, 0, IMAP_PARSE_FLAG_NO_UNESCAPE | IMAP_PARSE_FLAG_LITERAL_TYPE, &args); if (ret < 0) { ---- dovecot-2.4.1+dfsg1.orig/src/lib-imap/imap-envelope.c -+++ dovecot-2.4.1+dfsg1/src/lib-imap/imap-envelope.c +Index: dovecot/src/lib-imap/imap-envelope.c +=================================================================== +--- dovecot.orig/src/lib-imap/imap-envelope.c ++++ dovecot/src/lib-imap/imap-envelope.c @@ -222,7 +222,7 @@ bool imap_envelope_parse(const char *env input = i_stream_create_from_data(envelope, strlen(envelope)); (void)i_stream_read(input); @@ -143,8 +160,10 @@ ret = imap_parser_finish_line(parser, 0, IMAP_PARSE_FLAG_LITERAL_TYPE, &args); if (ret < 0) { ---- dovecot-2.4.1+dfsg1.orig/src/lib-imap/imap-parser.c -+++ dovecot-2.4.1+dfsg1/src/lib-imap/imap-parser.c +Index: dovecot/src/lib-imap/imap-parser.c +=================================================================== +--- dovecot.orig/src/lib-imap/imap-parser.c ++++ dovecot/src/lib-imap/imap-parser.c @@ -69,7 +69,8 @@ struct imap_parser { struct imap_parser * @@ -155,8 +174,10 @@ { struct imap_parser *parser; ---- dovecot-2.4.1+dfsg1.orig/src/lib-imap/imap-parser.h -+++ dovecot-2.4.1+dfsg1/src/lib-imap/imap-parser.h +Index: dovecot/src/lib-imap/imap-parser.h +=================================================================== +--- dovecot.orig/src/lib-imap/imap-parser.h ++++ dovecot/src/lib-imap/imap-parser.h @@ -38,6 +38,9 @@ enum imap_parser_error { IMAP_PARSE_ERROR_LITERAL_TOO_BIG }; @@ -177,8 +198,10 @@ void imap_parser_ref(struct imap_parser *parser); void imap_parser_unref(struct imap_parser **parser); ---- dovecot-2.4.1+dfsg1.orig/src/lib-imap/test-imap-parser.c -+++ dovecot-2.4.1+dfsg1/src/lib-imap/test-imap-parser.c +Index: dovecot/src/lib-imap/test-imap-parser.c +=================================================================== +--- dovecot.orig/src/lib-imap/test-imap-parser.c ++++ dovecot/src/lib-imap/test-imap-parser.c @@ -16,7 +16,7 @@ static void test_imap_parser_crlf(void) test_begin("imap parser crlf handling"); @@ -215,8 +238,10 @@ ret = imap_parser_read_command_name(parser, &atom); test_assert_idx(ret == tests[i].ret, i); test_assert_idx(ret <= 0 || strcmp(tests[i].tag, atom) == 0, i); ---- dovecot-2.4.1+dfsg1.orig/src/plugins/virtual/virtual-config.c -+++ dovecot-2.4.1+dfsg1/src/plugins/virtual/virtual-config.c +Index: dovecot/src/plugins/virtual/virtual-config.c +=================================================================== +--- dovecot.orig/src/plugins/virtual/virtual-config.c ++++ dovecot/src/plugins/virtual/virtual-config.c @@ -54,7 +54,7 @@ virtual_search_args_parse(const string_t input = i_stream_create_from_data(str_data(rule), str_len(rule)); (void)i_stream_read(input); diff -Nru dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-4.patch dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-4.patch --- dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-4.patch 2026-03-31 15:07:17.000000000 -0400 +++ dovecot-2.4.1+dfsg1/debian/patches/CVE-2026-27857-4.patch 2026-05-05 20:33:28.000000000 -0400 @@ -11,8 +11,10 @@ src/imap-login/imap-login-cmd-id.c | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) ---- dovecot-2.4.1+dfsg1.orig/src/imap-login/imap-login-client.c -+++ dovecot-2.4.1+dfsg1/src/imap-login/imap-login-client.c +Index: dovecot/src/imap-login/imap-login-client.c +=================================================================== +--- dovecot.orig/src/imap-login/imap-login-client.c ++++ dovecot/src/imap-login/imap-login-client.c @@ -379,10 +379,13 @@ static int imap_client_create(struct cli return -1; } @@ -44,8 +46,10 @@ /* CRLF is lost from buffer when streams are reopened. */ imap_client->skip_line = FALSE; ---- dovecot-2.4.1+dfsg1.orig/src/imap-login/imap-login-client.h -+++ dovecot-2.4.1+dfsg1/src/imap-login/imap-login-client.h +Index: dovecot/src/imap-login/imap-login-client.h +=================================================================== +--- dovecot.orig/src/imap-login/imap-login-client.h ++++ dovecot/src/imap-login/imap-login-client.h @@ -11,6 +11,10 @@ /* maximum length for IMAP command line. */ #define IMAP_LOGIN_MAX_LINE_LENGTH 8192 @@ -57,8 +61,10 @@ enum imap_client_id_state { IMAP_CLIENT_ID_STATE_LIST = 0, IMAP_CLIENT_ID_STATE_KEY, ---- dovecot-2.4.1+dfsg1.orig/src/imap-login/imap-login-cmd-id.c -+++ dovecot-2.4.1+dfsg1/src/imap-login/imap-login-cmd-id.c +Index: dovecot/src/imap-login/imap-login-cmd-id.c +=================================================================== +--- dovecot.orig/src/imap-login/imap-login-cmd-id.c ++++ dovecot/src/imap-login/imap-login-cmd-id.c @@ -344,10 +344,14 @@ int cmd_id(struct imap_client *client) client->cmd_id = id = i_new(struct imap_client_cmd_id, 1); id->params = p_new(param_pool, struct imap_id_params, 1); @@ -72,6 +78,6 @@ IMAP_LOGIN_MAX_LINE_LENGTH, - NULL); + ¶ms); - id->log_reply = str_new(default_pool, 64); if (client->set->imap_literal_minus) imap_parser_enable_literal_minus(id->parser); + parser_flags = IMAP_PARSE_FLAG_STOP_AT_LIST; diff -Nru dovecot-2.4.1+dfsg1/debian/tests/control dovecot-2.4.1+dfsg1/debian/tests/control --- dovecot-2.4.1+dfsg1/debian/tests/control 2026-03-06 15:20:26.000000000 -0500 +++ dovecot-2.4.1+dfsg1/debian/tests/control 2026-05-05 20:12:28.000000000 -0400 @@ -6,7 +6,7 @@ Depends: dovecot-core, systemd-sysv Test-Command: run-parts --report --exit-on-error debian/tests/usage -Depends: dovecot-imapd, dovecot-pop3d, python3 +Depends: dovecot-imapd, dovecot-pop3d, dovecot-managesieved, sieve-connect, python3 Restrictions: needs-root, breaks-testbed, allow-stderr Tests: testmails diff -Nru dovecot-2.4.1+dfsg1/debian/tests/usage/sieve dovecot-2.4.1+dfsg1/debian/tests/usage/sieve --- dovecot-2.4.1+dfsg1/debian/tests/usage/sieve 1969-12-31 19:00:00.000000000 -0500 +++ dovecot-2.4.1+dfsg1/debian/tests/usage/sieve 2026-05-05 20:12:28.000000000 -0400 @@ -0,0 +1,8 @@ +#!/usr/bin/bash +# Validate managesieved authentication + +user=dep8 +pass=test + +sieve-connect --notlsverify --debug -s localhost \ + -p 4190 -u "$user" --list --passwordfd 3 3< <(echo "$pass")

