doveadm force-resync crashes at list/mailbox-list-fs-iter.c:507
Hi All,
In Dovecot 2.4.1 if I start doveadm force-resync with a non-existent mailbox that ends in a slash, the command crashes:
gdb -ex run --args doveadm force-resync -A test/
Thread 1 (Thread 0x7f9e5cc4a980 (LWP 442) "doveadm"): #0 fs_list_next_root(ctx=ctx@entry=0x55d248df6898) at list/mailbox-list-fs-iter.c:507 roots= <error reading variable roots (Cannot access memory at address 0x0)> count= <error reading variable count (Cannot access memory at address 0x8)> __func__= "fs_list_next_root" #1 0x00007f9e5dc417c2in fs_list_iter_reset(ctx=0x55d248df6898) at list/mailbox-list-fs-iter.c:830 __func__= <optimized out> #2 fs_list_iter_next(_ctx=0x55d248df6898) at list/mailbox-list-fs-iter.c:912 ctx= <optimized out> ret= 0 __func__= "fs_list_iter_next" #3 0x00007f9e5dc4f8ddin mailbox_list_iter_next_call(ctx=0x55d248df6898) at list/mailbox-list-iter.c:1009 info= <optimized out> set= 0x148d86ee0 ret= <optimized out> #4 mailbox_list_iter_next(ctx=0x55d248df6898) at list/mailbox-list-iter.c:1098 _data_stack_cur_id= 5 info= <optimized out> #5 0x00007f9e5dc50899in mailbox_list_ns_iter_try_next(_ctx=0x55d248df6488, info_r=<synthetic pointer>) at list/mailbox-list-iter.c:616 ctx= 0x55d248df6488 ns= <optimized out> info= <optimized out> suffix= <optimized out> has_children= <optimized out> __func__= <optimized out> #6 mailbox_list_ns_iter_next(_ctx=0x55d248df6488) at list/mailbox-list-iter.c:678 info= 0x0 #7 0x00007f9e5dc4f8ddin mailbox_list_iter_next_call(ctx=0x55d248df6488) at list/mailbox-list-iter.c:1009 info= <optimized out> set= 0x2fffffffd0 ret= <optimized out> #8 mailbox_list_iter_next(ctx=0x55d248df6488) at list/mailbox-list-iter.c:1098 _data_stack_cur_id= 4 info= <optimized out> #9 0x000055d20bc81a20in cmd_force_resync_run(_ctx=0x55d248db57a8, user=0x55d248dc6318) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:369 ctx= 0x55d248db57a8 iter_flags= (MAILBOX_LIST_ITER_RAW_LIST| MAILBOX_LIST_ITER_NO_AUTO_BOXES| MAILBOX_LIST_ITER_STAR_WITHIN_NS| MAILBOX_LIST_ITER_RETURN_NO_FLAGS| MAILBOX_LIST_ITER_FORCE_RESYNC) ns_mask= (MAIL_NAMESPACE_TYPE_PRIVATE| MAIL_NAMESPACE_TYPE_SHARED| MAIL_NAMESPACE_TYPE_PUBLIC) iter= 0x55d248df6488 info= <optimized out> ret= <optimized out> patterns= {0x55d248db5300"test/", 0x0} #10 0x000055d20bc856c2in doveadm_mail_next_user(ctx=ctx@entry=0x55d248db57a8, error_r=error_r@entry=0x7ffdbc3f0778) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:506 _data_stack_cur_id= 3 cctx= 0x55d248db39b8 input= {event_parent= 0x0, service= 0x55d20bcbd810"doveadm", protocol= 0x0, username= 0x55d248db81a0"akos@szots.dev", session_id= 0x0, session_id_prefix= 0x0, session_create_ time= 0, local_ip= {family= 0, u= {ip6= {__in6_u= {__u6_addr8= '\000' <repeats 15 times>, __u6_addr16= {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32= {0, 0, 0, 0}}}, ip4= {s_addr= 0}}, sco pe_id= 0}, remote_ip= {family= 0, u= {ip6= {__in6_u= {__u6_addr8= '\000' <repeats 15 times>, __u6_addr16= {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32= {0, 0, 0, 0}}}, ip4= {s_addr= 0}}, scope_id= 0}, local_port= 0, remote_port= 0, local_name= 0x0, userdb_fields= 0x0, code_override_fields= 0x0, forward_fields= 0x0, set_instance= 0x0, flags_override_add= 0, flags_over ride_remove= 0, no_userdb_lookup= false, debug= false, end_client_tls_secured= false, autocreated= false, no_free_init_failure= false} error= 0x0 ip= <optimized out> ret= <optimized out> dropping_privs= true cur_uid= 0 cur_cwd= 0x55d248d86df8"/" cur_ctx= 0x55d248dc2c80 reason= 0x55d248df57f0 __func__= "doveadm_mail_next_user" #11 0x000055d20bc87525in doveadm_mail_all_users(ctx=0x55d248db57a8, wildcard_user=0x55d20bcc015d "*") at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:584 _data_stack_cur_id= 2 cctx= 0x55d248db39b8 user_idx= 0 ip= <optimized out> user= 0x55d248db81a0"akos@szots.dev" error= 0x55d248d8e7d8"\t\350\330H\322U" ret= 1 #12 doveadm_mail_cmd_exec(ctx=0x55d248db57a8, wildcard_user=0x55d20bcc015d "*") at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:721 cctx= <optimized out> cli= <optimized out> ret= <optimized out> error= 0x55d248d8e7d8"\t\350\330H\322U" #13 doveadm_cmd_ver2_to_mail_cmd_wrapper(cctx=<optimized out>) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:1039 mctx= 0x55d248db57a8 mail_cmd= {alloc= 0x55d20bc803f0<cmd_force_resync_alloc>, name= 0x55d20bcbe92d"force-resync", usage_args= 0x55d20bcc5008"[-u <user>|-A] [-S <socket_path>] [-f] <mailbox mask>"} wildcard_user= 0x55d20bcc015d"*" #14 0x000055d20bc9ba77in doveadm_cmdline_run(argc=<optimized out>, argv=0x55d248d8e7c8, cctx=cctx@entry=0x55d248db39b8) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-cmd-parse.c:451 prefix= <optimized out> pargv= {arr= {buffer= 0x55d248db4388, element_size= 112}, v= 0x55d248db4388, v_modifiable= 0x55d248db4388} pargc= 8 pool= 0x55d248db4350 ptr_count= <optimized out> ptr= <optimized out> ptr_end= <optimized out> ptr_last_non_kv= <optimized out> #15 0x000055d20bc9bc2cin doveadm_cmdline_try_run(cmd_name=cmd_name@entry=0x55d248d8e7f9 "force-resync", argc=<optimized out>, argv=<optimized out>, cctx=cctx@entry=0x55d248db39b8) at /usr/s rc/debug/dovecot-2.4.1-4/src/doveadm/doveadm-cmd.c:160 cmd= <optimized out> #16 0x000055d20bc74fdein main(argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm.c:386 service_flags= <optimized out> cmd_name= 0x55d248d8e7f9"force-resync" i= <optimized out> quick_init= false c= <optimized out> longopts= {{name= 0x7f9e5dadb7a8"help", has_arg= 0, flag= 0x0, val= 0}, {name= 0x0, has_arg= 0, flag= 0x0, val= 0}} help_requested= <optimized out> longopt= 0x0 cctx= 0x55d248db39b8
Ákos
Hi All,
In Dovecot 2.4.1 if I start doveadm force-resync with a non-existent mailbox that ends in a slash, the command crashes:
gdb -ex run --args doveadm force-resync -A test/
Thread 1 (Thread 0x7f9e5cc4a980 (LWP 442) "doveadm"): #0 fs_list_next_root (ctx=ctx@entry=0x55d248df6898) at list/mailbox-list-fs-iter.c:507 roots = <error reading variable roots (Cannot access memory at address 0x0)> count = <error reading variable count (Cannot access memory at address 0x8)> __func__ = "fs_list_next_root" #1 0x00007f9e5dc417c2 in fs_list_iter_reset (ctx=0x55d248df6898) at list/mailbox-list-fs-iter.c:830 __func__ = <optimized out> #2 fs_list_iter_next (_ctx=0x55d248df6898) at list/mailbox-list-fs-iter.c:912 ctx = <optimized out> ret = 0 __func__ = "fs_list_iter_next" #3 0x00007f9e5dc4f8dd in mailbox_list_iter_next_call (ctx=0x55d248df6898) at list/mailbox-list-iter.c:1009 info = <optimized out> set = 0x148d86ee0 ret = <optimized out> #4 mailbox_list_iter_next (ctx=0x55d248df6898) at list/mailbox-list-iter.c:1098 _data_stack_cur_id = 5 info = <optimized out> #5 0x00007f9e5dc50899 in mailbox_list_ns_iter_try_next (_ctx=0x55d248df6488, info_r=<synthetic pointer>) at list/mailbox-list-iter.c:616 ctx = 0x55d248df6488 ns = <optimized out> info = <optimized out> suffix = <optimized out> has_children = <optimized out> __func__ = <optimized out> #6 mailbox_list_ns_iter_next (_ctx=0x55d248df6488) at list/mailbox-list-iter.c:678 info = 0x0 #7 0x00007f9e5dc4f8dd in mailbox_list_iter_next_call (ctx=0x55d248df6488) at list/mailbox-list-iter.c:1009 info = <optimized out> set = 0x2fffffffd0 ret = <optimized out> #8 mailbox_list_iter_next (ctx=0x55d248df6488) at list/mailbox-list-iter.c:1098 _data_stack_cur_id = 4 info = <optimized out> #9 0x000055d20bc81a20 in cmd_force_resync_run (_ctx=0x55d248db57a8, user=0x55d248dc6318) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:369 ctx = 0x55d248db57a8 iter_flags = (MAILBOX_LIST_ITER_RAW_LIST | MAILBOX_LIST_ITER_NO_AUTO_BOXES | MAILBOX_LIST_ITER_STAR_WITHIN_NS | MAILBOX_LIST_ITER_RETURN_NO_FLAGS | MAILBOX_LIST_ITER_FORCE_RESYNC) ns_mask = (MAIL_NAMESPACE_TYPE_PRIVATE | MAIL_NAMESPACE_TYPE_SHARED | MAIL_NAMESPACE_TYPE_PUBLIC) iter = 0x55d248df6488 info = <optimized out> ret = <optimized out> patterns = {0x55d248db5300 "test/", 0x0} #10 0x000055d20bc856c2 in doveadm_mail_next_user (ctx=ctx@entry=0x55d248db57a8, error_r=error_r@entry=0x7ffdbc3f0778) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:506 _data_stack_cur_id = 3 cctx = 0x55d248db39b8 input = {event_parent = 0x0, service = 0x55d20bcbd810 "doveadm", protocol = 0x0, username = 0x55d248db81a0 [1]"akos@szots.dev", session_id = 0x0, session_id_prefix = 0x0, session_create_ time = 0, local_ip = {family = 0, u = {ip6 = {__in6_u = {__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, ip4 = {s_addr = 0}}, sco pe_id = 0}, remote_ip = {family = 0, u = {ip6 = {__in6_u = {__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, ip4 = {s_addr = 0}}, scope_id = 0}, local_port = 0, remote_port = 0, local_name = 0x0, userdb_fields = 0x0, code_override_fields = 0x0, forward_fields = 0x0, set_instance = 0x0, flags_override_add = 0, flags_over ride_remove = 0, no_userdb_lookup = false, debug = false, end_client_tls_secured = false, autocreated = false, no_free_init_failure = false} error = 0x0 ip = <optimized out> ret = <optimized out> dropping_privs = true cur_uid = 0 cur_cwd = 0x55d248d86df8 "/" cur_ctx = 0x55d248dc2c80 reason = 0x55d248df57f0 __func__ = "doveadm_mail_next_user" #11 0x000055d20bc87525 in doveadm_mail_all_users (ctx=0x55d248db57a8, wildcard_user=0x55d20bcc015d "*") at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:584 _data_stack_cur_id = 2 cctx = 0x55d248db39b8 user_idx = 0 ip = <optimized out> user = 0x55d248db81a0 [2]"akos@szots.dev" error = 0x55d248d8e7d8 "\t\350\330H\322U" ret = 1 #12 doveadm_mail_cmd_exec (ctx=0x55d248db57a8, wildcard_user=0x55d20bcc015d "*") at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:721 cctx = <optimized out> cli = <optimized out> ret = <optimized out> error = 0x55d248d8e7d8 "\t\350\330H\322U" #13 doveadm_cmd_ver2_to_mail_cmd_wrapper (cctx=<optimized out>) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-mail.c:1039 mctx = 0x55d248db57a8 mail_cmd = {alloc = 0x55d20bc803f0 <cmd_force_resync_alloc>, name = 0x55d20bcbe92d "force-resync", usage_args = 0x55d20bcc5008 "[-u <user>|-A] [-S <socket_path>] [-f] <mailbox mask>"} wildcard_user = 0x55d20bcc015d "*" #14 0x000055d20bc9ba77 in doveadm_cmdline_run (argc=<optimized out>, argv=0x55d248d8e7c8, cctx=cctx@entry=0x55d248db39b8) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm-cmd-parse.c:451 prefix = <optimized out> pargv = {arr = {buffer = 0x55d248db4388, element_size = 112}, v = 0x55d248db4388, v_modifiable = 0x55d248db4388} pargc = 8 pool = 0x55d248db4350 ptr_count = <optimized out> ptr = <optimized out> ptr_end = <optimized out> ptr_last_non_kv = <optimized out> #15 0x000055d20bc9bc2c in doveadm_cmdline_try_run (cmd_name=cmd_name@entry=0x55d248d8e7f9 "force-resync", argc=<optimized out>, argv=<optimized out>, cctx=cctx@entry=0x55d248db39b8) at /usr/s rc/debug/dovecot-2.4.1-4/src/doveadm/doveadm-cmd.c:160 cmd = <optimized out> #16 0x000055d20bc74fde in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/dovecot-2.4.1-4/src/doveadm/doveadm.c:386 service_flags = <optimized out> cmd_name = 0x55d248d8e7f9 "force-resync" i = <optimized out> quick_init = false c = <optimized out> longopts = {{name = 0x7f9e5dadb7a8 "help", has_arg = 0, flag = 0x0, val = 0}, {name = 0x0, has_arg = 0, flag = 0x0, val = 0}} help_requested = <optimized out> longopt = 0x0 cctx = 0x55d248db39b8
Akos
References
Visible links
- mailto:akos@szots.dev
- mailto:akos@szots.dev
On 29/07/2025 00:58 EEST Ákos Szőts via dovecot <dovecot@dovecot.org> wrote:
Hi All,
In Dovecot 2.4.1 if I start doveadm force-resync with a non-existent mailbox that ends in a slash, the command crashes:
gdb -ex run --args doveadm force-resync -A test/
Thank you for reporting the issue. It would be useful in future to include doveconf -n with these kind of reports, I was able to reproduce this now after guessing your config.
Aki
On 29/07/2025 09:25 EEST Aki Tuomi via dovecot <dovecot@dovecot.org> wrote:
On 29/07/2025 00:58 EEST Ákos Szőts via dovecot <dovecot@dovecot.org> wrote:
Hi All,
In Dovecot 2.4.1 if I start doveadm force-resync with a non-existent mailbox that ends in a slash, the command crashes:
gdb -ex run --args doveadm force-resync -A test/
Thank you for reporting the issue. It would be useful in future to include doveconf -n with these kind of reports, I was able to reproduce this now after guessing your config.
Aki
This is fixed with https://github.com/dovecot/core/commit/178b8b75a34db2e7c486dcfd8a0ca8e6d53d0...
Aki
participants (2)
-
Aki Tuomi
-
Ákos Szőts