Re: dovecot crash with Panic: file istream-header-filter.c: line 663

2023-03-13 Thread Patrick Mansfield
On Mon, Mar 13, 2023 at 04:33:38PM +0100, Gerald Galster wrote:
> > After the above, it's no longer crashing, and my email client's "pending 
> > operations" have
> > cleared.
> 
> Does your server use ECC memory and if so, are there any errors logged 
> (bitflip, ...)?
> 
> Best regards,
> Gerald

I don't have the logs from that time them nor do I see any hardware / memory 
errors.

I also haven't had any other odd failures.

But how can I tell if I have ECC memory or not?

-- Patrick


Re: dovecot crash with Panic: file istream-header-filter.c: line 663

2023-03-13 Thread Patrick Mansfield
On Mon, Mar 13, 2023 at 11:01:35AM +0200, Timo Sirainen wrote:
> On 12. Mar 2023, at 20.17, Patrick Mansfield  wrote:
> > 
> > Mar 12 10:32:27 goffin dovecot[8269]: imap(patman)<8452>: 
> > Panic: file istream-header-filter.c: line 663 
> > (i_stream_header_filter_snapshot_free): assertion failed: 
> > (snapshot->mstream->snapshot_pending)
> 
> This is unfortunately rather difficult to debug. First you should find out 
> which folder and mail this is happening in. You can do that with gdb:
> 
> > #16 0x7fa3849aa60a in index_mail_parse_headers_internal 
> > (mail=mail@entry=0x56150ea5fc78, headers=headers@entry=0x0) at 
> > index/index-mail-headers.c:465
> 
> fr 16
> p mail.box.vname
> p mail.uid

OK, I had to use a bit different syntax:

(gdb) fr 16
#16 0x7fa3849aa60a in index_mail_parse_headers_internal 
(mail=mail@entry=0x56150ea5fc78, headers=headers@entry=0x0)
at index/index-mail-headers.c:465
465 message_parser_parse_header(data->parser_ctx, 
&data->hdr_size,
(gdb) p mail->mail.mail->box->vname
$1 = 0x56150ea60840 "INBOX"
(gdb)  p mail->mail.mail->uid
$2 = 33655

> Likely deleting that mail manually from the mbox will fix it. Of course, it 
> would be nice if we were able to reproduce the bug also. Once you've found 
> the broken folder, could you anonymize the mbox file contents and send it to 
> me privately? https://github.com/dovecot/tools/blob/main/mbox-anonymize.pl 
> can help you do it. Although I'm not sure if even that is enough to reproduce 
> the bug - might need the dovecot.index* files also but those contain cached 
> headers from the emails, which can be rather sensitive data.
> 
> Other things besides deleting the mail that might help, and would be useful 
> to know whether they help:
> 
>  * doveadm fetch -u user imap.bodystructure mailbox $folder uid $uid

The above hits the same crash:

$ doveadm fetch -u patman imap.bodystructure mailbox INBOX uid 33655
Error: net_connect_unix(/run/dovecot/stats-writer) failed: Permission denied
doveadm(patman): Panic: file istream-header-filter.c: line 663 
(i_stream_header_filter_snapshot_free): assertion failed: 
(snapshot->mstream->snapshot_pending)
doveadm(patman): Error: Raw backtrace: 
/usr/lib64/dovecot/libdovecot.so.0(backtrace_append+0x46) [0x7fd12d418f46] -> 
/usr/lib64/dovecot/libdovecot.so.0(backtrace_get+0x22) [0x7fd12d419082] -> 
/usr/lib64/dovecot/libdovecot.so.0(+0x109557) [0x7fd12d423557] -> 
/usr/lib64/dovecot/libdovecot.so.0(+0x109597) [0x7fd12d423597] -> 
/usr/lib64/dovecot/libdovecot.so.0(+0x5e0e1) [0x7fd12d3780e1] -> 
/usr/lib64/dovecot/libdovecot.so.0(+0x59df8) [0x7fd12d373df8] -> 
/usr/lib64/dovecot/libdovecot.so.0(i_stream_snapshot_free+0x1c) 
[0x7fd12d430b6c] -> /usr/lib64/dovecot/libdovecot.so.0(i_stream_unref+0x54) 
[0x7fd12d430c14] -> 
/usr/lib64/dovecot/libdovecot.so.0(message_parse_header_deinit+0x19) 
[0x7fd12d401179] -> /usr/lib64/dovecot/libdovecot.so.0(+0xe8ea1) 
[0x7fd12d402ea1] -> 
/usr/lib64/dovecot/libdovecot.so.0(message_parser_parse_next_block+0x4c) 
[0x7fd12d403edc] -> 
/usr/lib64/dovecot/libdovecot.so.0(message_parser_parse_header+0x59) 
[0x7fd12d404029] -> 
/usr/lib64/dovecot/libdovecot-storage.so.0(index_mail_parse_headers_internal+0x11a)
 [0x7fd12d5ce60a] -> 
/usr/lib64/dovecot/libdovecot-storage.so.0(index_mail_parse_headers+0x4e) 
[0x7fd12d5ce71e] -> /usr/lib64/dovecot/libdovecot-storage.so.0(+0xdd21e) 
[0x7fd12d5d421e] -> /usr/lib64/dovecot/libdovecot-storage.so.0(+0xdd2b3) 
[0x7fd12d5d42b3] -> 
/usr/lib64/dovecot/libdovecot-storage.so.0(index_mail_get_special+0x20d) 
[0x7fd12d5d46cd] -> 
/usr/lib64/dovecot/libdovecot-storage.so.0(mail_get_special+0xe) 
[0x7fd12d553a1e] -> /usr/bin/doveadm(+0x3893c) [0x5650816db93c] -> 
/usr/bin/doveadm(+0x3e12e) [0x5650816e112e] -> /usr/bin/doveadm(+0x3bba1) 
[0x5650816deba1] -> 
/usr/bin/doveadm(doveadm_cmd_ver2_to_mail_cmd_wrapper+0x29b) [0x5650816dfe0b] 
-> /usr/bin/doveadm(doveadm_cmd_run_ver2+0x4ff) [0x5650816ea67f] -> 
/usr/bin/doveadm(doveadm_cmd_try_run_ver2+0x3b) [0x5650816ea6fb] -> 
/usr/bin/doveadm(main+0x282) [0x5650816cbd92] -> /lib64/libc.so.6(+0x27510) 
[0x7fd12cb6a510] -> /lib64/libc.so.6(__libc_start_main+0x89) [0x7fd12cb6a5c9] 
-> /usr/bin/doveadm(_start+0x25) [0x5650816cbfa5]
Aborted (core dumped)

>  * doveadm mailbox cache remove -u user mailbox $folder uid $uid

Ran (not as root):

$ doveadm mailbox cache remove -u patman mailbox INBOX uid 33655
Error: net_connect_unix(/run/dovecot/stats-writer) failed: Permission denied
mailbox uid   result
INBOX   33655 ok

After the above, it's no longer crashing, and my email client's "pending 
operations" have
cleared.

And this now works:

$ doveadm fetch -u patman imap.bodystructure mailbox IN

Re: dovecot crash with Panic: file istream-header-filter.c: line 663

2023-03-12 Thread Patrick Mansfield
On Sun, Mar 12, 2023 at 11:17:43AM -0700, Patrick Mansfield wrote:
> 
> email client is fairemail version 1.2042a on android, but an older version 
> had the same
> problem.
> 
> I mainly use fairemail to read emails on my phone, and that is working fine 
> but I noticed
> that deleted emails were not actually getting deleted, that it has a bunch of 
> "pending
> operations" it has were not running, and that dovecot has been crashing like 
> this since
> about feb 2 (over a month ago). I can't figure out what changed at that time, 
> but my cert
> says it should have expired over a year ago, but the cert as created 26 
> months ago.
> 
> log files only go back to Feb 5 so just missed that.
> 
> I generated a new cert but it's still crashing (I probably still need to do 
> something on
> the client side or my setup is broken).
> 
> I assume there is something wrong or some "snapshot" thing that's stuck, but 
> since it's
> crashing I can't figure out what the undelysing problem is.

Another thing I noticed:

I think I deleted all emails left in the "Trash" folder outside of imap on Feb 
4 (using
mutt locally) - or that that folder was modified on Feb 4, that is also the 
same timestamp
as my ~/Mail/.imap directory, and is about the time I think it started crashing.

And that these were all dated Feb 4:

$ ls -ld ~/Mail/.imap ~/Mail/Trash ~/Mail/.imap/dovecot.list.index
drwx--. 118 patman patman4096 Feb  4 09:29 /home/patman/Mail/.imap
-rw---1 patman patman   14696 Feb  4 09:11 
/home/patman/Mail/.imap/dovecot.list.index
-rw---1 patman patman 1459841 Feb  4 09:11 /home/patman/Mail/Trash

-- Patrick


dovecot crash with Panic: file istream-header-filter.c: line 663

2023-03-12 Thread Patrick Mansfield
Hi -

I'm hitting a crash in dovecot, I get this logged followed by a terse stack 
trace and
systemd-coredump details not included here - full gdb stack trace and more 
details are
further down:


Mar 12 10:32:26 goffin dovecot[8269]: imap-login: Login: user=, 
method=PLAIN, rip=192.168.1.4, lip=192.168.1.1, mpid=8477, TLS, 
session=<5RvGYLf2RrDAqAEE>
Mar 12 10:32:26 goffin audit[8304]: USER_AUTH pid=8304 uid=0 auid=4294967295 
ses=4294967295 subj=kernel msg='op=PAM:authentication 
grantors=pam_usertype,pam_localuser,pam_unix acct="patman" 
exe="/usr/libexec/dovecot/auth" hostname=192.168.1.4 addr=192.168.1.4 
terminal=dovecot res=success'
Mar 12 10:32:26 goffin audit[8304]: USER_ACCT pid=8304 uid=0 auid=4294967295 
ses=4294967295 subj=kernel msg='op=PAM:accounting 
grantors=pam_unix,pam_localuser acct="patman" exe="/usr/libexec/dovecot/auth" 
hostname=192.168.1.4 addr=192.168.1.4 terminal=dovecot res=success'
Mar 12 10:32:26 goffin dovecot[8269]: imap-login: Login: user=, 
method=PLAIN, rip=192.168.1.4, lip=192.168.1.1, mpid=8479, TLS, 
session=
Mar 12 10:32:27 goffin dovecot[8269]: imap(patman)<8452>: 
Panic: file istream-header-filter.c: line 663 
(i_stream_header_filter_snapshot_free): assertion failed: 
(snapshot->mstream->snapshot_pending)
Mar 12 10:32:27 goffin audit[8452]: ANOM_ABEND auid=4294967295 uid=1000 
gid=1000 ses=4294967295 subj=kernel pid=8452 comm="imap" 
exe="/usr/libexec/dovecot/imap" sig=6 res=1


email client is fairemail version 1.2042a on android, but an older version had 
the same
problem.

I mainly use fairemail to read emails on my phone, and that is working fine but 
I noticed
that deleted emails were not actually getting deleted, that it has a bunch of 
"pending
operations" it has were not running, and that dovecot has been crashing like 
this since
about feb 2 (over a month ago). I can't figure out what changed at that time, 
but my cert
says it should have expired over a year ago, but the cert as created 26 months 
ago.

log files only go back to Feb 5 so just missed that.

I generated a new cert but it's still crashing (I probably still need to do 
something on
the client side or my setup is broken).

I assume there is something wrong or some "snapshot" thing that's stuck, but 
since it's
crashing I can't figure out what the undelysing problem is.

Thanks for any help.

More details:


# dovecot --version
2.3.20 (80a5ac675d)

Running with up to date fedora core 37.



# dovecot -n
# 2.3.20 (80a5ac675d): /etc/dovecot/dovecot.conf
# OS: Linux 6.1.15-200.fc37.x86_64 x86_64 Fedora release 37 (Thirty Seven)
# Hostname: specu
mail_location = mbox:~/Mail:INBOX=~/Mail/inbox
mbox_write_locks = fcntl
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
special_use = \Drafts
  }
  mailbox Junk {
special_use = \Junk
  }
  mailbox Sent {
special_use = \Sent
  }
  mailbox "Sent Messages" {
special_use = \Sent
  }
  mailbox Trash {
special_use = \Trash
  }
  prefix =
}
passdb {
  driver = pam
}
ssl = required
ssl_cert =  for more, q to quit, c to continue without paging-- 
#0  __pthread_kill_implementation (threadid=, 
signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
44return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO 
(ret) : 0;  

(gdb) bt
#0  __pthread_kill_implementation (threadid=, 
signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x7fa3840afec3 in __pthread_kill_internal (signo=6, threadid=) at pthread_kill.c:78
#2  0x7fa38405fa76 in __GI_raise (sig=sig@entry=6) at 
../sysdeps/posix/raise.c:26
#3  0x7fa3840497fc in __GI_abort () at abort.c:79
#4  0x7fa3847541e3 in default_fatal_finish (status=0, type=LOG_TYPE_PANIC) 
at ../lib/failures.c:465
#5  fatal_handler_real (ctx=, format=, 
args=) at ../lib/failures.c:477
#6  0x7fa3847ff5f7 in i_internal_fatal_handler (ctx=, 
format=, args=) at ../lib/failures.c:879
#7  0x7fa3847540e1 in i_panic (format=0x7fa384844040 "file %s: line %d 
(%s): assertion failed: (%s)") at ../lib/failures.c:530
#8  0x7fa38474fdf8 in i_stream_header_filter_snapshot_free 
(_snapshot=) at ../lib-mail/istream-header-filter.c:663
#9  i_stream_header_filter_snapshot_free (_snapshot=0x56150ea92250) at 
../lib-mail/istream-header-filter.c:655
#10 0x7fa38480cb6c in i_stream_snapshot_free 
(_snapshot=_snapshot@entry=0x56150ea9d2a0) at ../lib/istream.c:253
#11 0x7fa38480cc14 in i_stream_unref (stream=0x56150ea9d338) at 
../lib/istream.c:66
#12 0x7fa3847dd179 in message_parse_header_deinit 
(_ctx=_ctx@entry=0x56150ea9d0c8) at ../lib-mail/message-header-parser.c:52
#13 0x7fa3847deea1 in preparsed_parse_next_header (ctx=0x56150ea9d050, 
block_r=0x7ffc8222ca70) at ../lib-mail/message-parser-from-parts.c:310