segfault in IMAP APPEND with compressed maildir
Hi!
After upgrading from Debian wheezy with (self compiled) dovecot 2.2.15 to Debian jessie with (self compiled) 2.2.24, I observe the following segmentation fault in the logs:
Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(<imap client>) failed: read(size=8003) failed: Connection reset by peer (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(zlib(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap)) failed: read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap) failed: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Fatal: master: service(imap): child 22902 killed with signal 11 (core dumped)
We also observed the same (rare) error in the past on the old system. But on the old system, there were only the first 3 lines without the segmentation fault, so we ignored the issue until now.
The problem always happens on IMAP folders where the client writes to, like "trash", "drafts", "sent" and the like.
I wasn't able to actively reproduce this issue, but can only observe in the logs that some customers run into this issue from time to time.
So all I have is a core dump with the following backtrace:
Core was generated by `dovecot/imap'. Program terminated with signal SIGSEGV, Segmentation fault. (gdb) bt full #0 0x00007f57e276f29f in i_stream_default_get_size (stream=0x1fd2790, exact=<optimized out>, size_r=0x7ffed3839718) at istream.c:807 No locals. #1 0x00007f57e17024e4 in zlib_mail_close (_mail=0x1fd4de0) at zlib-plugin.c:170 mail = 0x1fd4de0 zmail = 0x1fd5398 zuser = 0x1fbd040 cache = 0x1fbd050 size = 33201320 #2 0x00007f57e2a2a8b9 in mailbox_save_cancel (_ctx=_ctx@entry=0x1fc4d48) at mail-storage.c:2117 ctx = 0x1fd3dd0 keywords = 0x0 mail = <optimized out> __FUNCTION__ = "mailbox_save_cancel" #3 0x000000000040c759 in cmd_append_finish (ctx=0x1fc4cf0) at cmd-append.c:149 __FUNCTION__ = "cmd_append_finish" #4 0x000000000040c835 in client_input_append (cmd=0x1fc4bc0) at cmd-append.c:89 ctx = <optimized out> client = 0x1fc3fc0 reason = 0x1f9e0b8 "Disconnected in APPEND (1 msgs, 306 secs, 188416/1122858 bytes)" finished = <optimized out> lit_offset = <optimized out> __FUNCTION__ = "client_input_append" #5 0x00007f57e2778dcc in io_loop_call_io (io=0x1fc4ad0) at ioloop.c:564 ioloop = 0x1fa6750 t_id = 2 __FUNCTION__ = "io_loop_call_io" #6 0x00007f57e277a0f1 in io_loop_handler_run_internal (ioloop=ioloop@entry=0x1fa6750) at ioloop-epoll.c:220 ctx = 0x1fa8260 io = <optimized out> tv = {tv_sec = 1799, tv_usec = 997118} events_count = <optimized out> msecs = <optimized out> ret = 1 i = 0 j = <optimized out> call = <optimized out> __FUNCTION__ = "io_loop_handler_run_internal" #7 0x00007f57e2778e55 in io_loop_handler_run (ioloop=ioloop@entry=0x1fa6750) at ioloop.c:612 No locals. #8 0x00007f57e2778ff8 in io_loop_run (ioloop=0x1fa6750) at ioloop.c:588 __FUNCTION__ = "io_loop_run" #9 0x00007f57e2713713 in master_service_run (service=0x1fa65f0, callback=callback@entry=0x423a20 <client_connected>) at master-service.c:640 No locals. #10 0x000000000040c427 in main (argc=1, argv=0x1fa6390) at main.c:460 set_roots = {0x42c480 <imap_setting_parser_info>, 0x635440 <lda_setting_parser_info>, 0x0} login_set = {auth_socket_path = 0x1f9e048 "ailed: Connection reset by peer", postlogin_socket_path = 0x0, postlogin_timeout_secs = 60, callback = 0x424170 <login_client_connected>, failure_callback = 0x423b30 <login_client_failed>, request_auth_token = 1} service_flags = <optimized out> storage_service_flags = <optimized out> username = 0x0 auth_socket_path = 0x42d42e "auth-master" c = <optimized out>
This is on a server, which uses compressed maildir on a NFS storage.
Here's dovecot -n output:
# 2.2.24 (a82c823): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.14 (099a97c) # OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.4 auth_cache_negative_ttl = 5 mins auth_cache_size = 100 M auth_cache_ttl = 15 mins auth_default_realm = example.com auth_master_user_separator = * auth_mechanisms = plain login auth_verbose = yes dict { acl = mysql:/etc/dovecot/dovecot-dict-sql.conf } disable_plaintext_auth = no listen = * log_timestamp = "%Y-%m-%d %H:%M:%S " mail_fsync = always mail_gid = 999 mail_location = maildir:~/mail mail_plugins = acl quota zlib mail_uid = 999 managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapflags mmap_disable = yes namespace { list = children location = maildir:%%h/mail:INDEX=~/mail/shared/%%u prefix = shared/%%u/ separator = / subscriptions = no type = shared } namespace inbox { inbox = yes location = prefix = separator = / type = private } passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } plugin { acl = vfile acl_shared_dict = proxy::acl quota = maildir sieve = ~/.dovecot.sieve sieve_dir = ~/mail/sieve sieve_extensions = +imapflags zlib_save = gz } pop3_no_flag_updates = yes pop3_uidl_format = %v.%u protocols = imap pop3 sieve service auth { unix_listener auth-master { group = vmail mode = 0600 user = vmail } } service dict { unix_listener dict { group = vmail mode = 0600 user = vmail } } service imap { process_limit = 4000 } service managesieve-login { inet_listener sieve { port = 4190 } } service managesieve { process_limit = 100 } service pop3 { process_limit = 1000 } shutdown_clients = no ssl = no syslog_facility = local2 userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } verbose_proctitle = yes protocol imap { mail_max_userip_connections = 10 mail_plugins = acl quota zlib imap_quota imap_acl } protocol pop3 { mail_plugins = acl quota zlib }
I hope, that this is all required information to find and solve this issue.
Greetings Roland
On 07.06.2016 11:20, Roland Rosenfeld wrote:
Hi!
After upgrading from Debian wheezy with (self compiled) dovecot 2.2.15 to Debian jessie with (self compiled) 2.2.24, I observe the following segmentation fault in the logs:
Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(<imap client>) failed: read(size=8003) failed: Connection reset by peer (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(zlib(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap)) failed: read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap) failed: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Fatal: master: service(imap): child 22902 killed with signal 11 (core dumped)
We also observed the same (rare) error in the past on the old system. But on the old system, there were only the first 3 lines without the segmentation fault, so we ignored the issue until now.
The problem always happens on IMAP folders where the client writes to, like "trash", "drafts", "sent" and the like.
I wasn't able to actively reproduce this issue, but can only observe in the logs that some customers run into this issue from time to time.
So all I have is a core dump with the following backtrace:
Core was generated by `dovecot/imap'. Program terminated with signal SIGSEGV, Segmentation fault. (gdb) bt full #0 0x00007f57e276f29f in i_stream_default_get_size (stream=0x1fd2790, exact=<optimized out>, size_r=0x7ffed3839718) at istream.c:807 No locals. #1 0x00007f57e17024e4 in zlib_mail_close (_mail=0x1fd4de0) at zlib-plugin.c:170 mail = 0x1fd4de0 zmail = 0x1fd5398 zuser = 0x1fbd040 cache = 0x1fbd050 size = 33201320 #2 0x00007f57e2a2a8b9 in mailbox_save_cancel (_ctx=_ctx@entry=0x1fc4d48) at mail-storage.c:2117 ctx = 0x1fd3dd0 keywords = 0x0 mail = <optimized out> __FUNCTION__ = "mailbox_save_cancel" #3 0x000000000040c759 in cmd_append_finish (ctx=0x1fc4cf0) at cmd-append.c:149 __FUNCTION__ = "cmd_append_finish" #4 0x000000000040c835 in client_input_append (cmd=0x1fc4bc0) at cmd-append.c:89 ctx = <optimized out> client = 0x1fc3fc0 reason = 0x1f9e0b8 "Disconnected in APPEND (1 msgs, 306 secs, 188416/1122858 bytes)" finished = <optimized out> lit_offset = <optimized out> __FUNCTION__ = "client_input_append" #5 0x00007f57e2778dcc in io_loop_call_io (io=0x1fc4ad0) at ioloop.c:564 ioloop = 0x1fa6750 t_id = 2 __FUNCTION__ = "io_loop_call_io" #6 0x00007f57e277a0f1 in io_loop_handler_run_internal (ioloop=ioloop@entry=0x1fa6750) at ioloop-epoll.c:220 ctx = 0x1fa8260 io = <optimized out> tv = {tv_sec = 1799, tv_usec = 997118} events_count = <optimized out> msecs = <optimized out> ret = 1 i = 0 j = <optimized out> call = <optimized out> __FUNCTION__ = "io_loop_handler_run_internal" #7 0x00007f57e2778e55 in io_loop_handler_run (ioloop=ioloop@entry=0x1fa6750) at ioloop.c:612 No locals. #8 0x00007f57e2778ff8 in io_loop_run (ioloop=0x1fa6750) at ioloop.c:588 __FUNCTION__ = "io_loop_run" #9 0x00007f57e2713713 in master_service_run (service=0x1fa65f0, callback=callback@entry=0x423a20 <client_connected>) at master-service.c:640 No locals. #10 0x000000000040c427 in main (argc=1, argv=0x1fa6390) at main.c:460 set_roots = {0x42c480 <imap_setting_parser_info>, 0x635440 <lda_setting_parser_info>, 0x0} login_set = {auth_socket_path = 0x1f9e048 "ailed: Connection reset by peer", postlogin_socket_path = 0x0, postlogin_timeout_secs = 60, callback = 0x424170 <login_client_connected>, failure_callback = 0x423b30 <login_client_failed>, request_auth_token = 1} service_flags = <optimized out> storage_service_flags = <optimized out> username = 0x0 auth_socket_path = 0x42d42e "auth-master" c = <optimized out>
This is on a server, which uses compressed maildir on a NFS storage.
Here's dovecot -n output:
# 2.2.24 (a82c823): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.14 (099a97c) # OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.4 auth_cache_negative_ttl = 5 mins auth_cache_size = 100 M auth_cache_ttl = 15 mins auth_default_realm = example.com auth_master_user_separator = * auth_mechanisms = plain login auth_verbose = yes dict { acl = mysql:/etc/dovecot/dovecot-dict-sql.conf } disable_plaintext_auth = no listen = * log_timestamp = "%Y-%m-%d %H:%M:%S " mail_fsync = always mail_gid = 999 mail_location = maildir:~/mail mail_plugins = acl quota zlib mail_uid = 999 managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapflags mmap_disable = yes namespace { list = children location = maildir:%%h/mail:INDEX=~/mail/shared/%%u prefix = shared/%%u/ separator = / subscriptions = no type = shared } namespace inbox { inbox = yes location = prefix = separator = / type = private } passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } plugin { acl = vfile acl_shared_dict = proxy::acl quota = maildir sieve = ~/.dovecot.sieve sieve_dir = ~/mail/sieve sieve_extensions = +imapflags zlib_save = gz } pop3_no_flag_updates = yes pop3_uidl_format = %v.%u protocols = imap pop3 sieve service auth { unix_listener auth-master { group = vmail mode = 0600 user = vmail } } service dict { unix_listener dict { group = vmail mode = 0600 user = vmail } } service imap { process_limit = 4000 } service managesieve-login { inet_listener sieve { port = 4190 } } service managesieve { process_limit = 100 } service pop3 { process_limit = 1000 } shutdown_clients = no ssl = no syslog_facility = local2 userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } verbose_proctitle = yes protocol imap { mail_max_userip_connections = 10 mail_plugins = acl quota zlib imap_quota imap_acl } protocol pop3 { mail_plugins = acl quota zlib }
I hope, that this is all required information to find and solve this issue.
Greetings Roland
Hi!
This would appear to be fixed in https://github.com/dovecot/core/commit/5df8396a7cbad0b38b83a86667fb3d4c223f6...
Aki Tuomi Dovecot Oy
On 07.06.2016 11:52, Aki Tuomi wrote:
On 07.06.2016 11:20, Roland Rosenfeld wrote:
Hi!
After upgrading from Debian wheezy with (self compiled) dovecot 2.2.15 to Debian jessie with (self compiled) 2.2.24, I observe the following segmentation fault in the logs:
Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(<imap client>) failed: read(size=8003) failed: Connection reset by peer (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(zlib(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap)) failed: read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap) failed: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Fatal: master: service(imap): child 22902 killed with signal 11 (core dumped)
We also observed the same (rare) error in the past on the old system. But on the old system, there were only the first 3 lines without the segmentation fault, so we ignored the issue until now.
The problem always happens on IMAP folders where the client writes to, like "trash", "drafts", "sent" and the like.
I wasn't able to actively reproduce this issue, but can only observe in the logs that some customers run into this issue from time to time.
So all I have is a core dump with the following backtrace:
Core was generated by `dovecot/imap'. Program terminated with signal SIGSEGV, Segmentation fault. (gdb) bt full #0 0x00007f57e276f29f in i_stream_default_get_size (stream=0x1fd2790, exact=<optimized out>, size_r=0x7ffed3839718) at istream.c:807 No locals. #1 0x00007f57e17024e4 in zlib_mail_close (_mail=0x1fd4de0) at zlib-plugin.c:170 mail = 0x1fd4de0 zmail = 0x1fd5398 zuser = 0x1fbd040 cache = 0x1fbd050 size = 33201320 #2 0x00007f57e2a2a8b9 in mailbox_save_cancel (_ctx=_ctx@entry=0x1fc4d48) at mail-storage.c:2117 ctx = 0x1fd3dd0 keywords = 0x0 mail = <optimized out> __FUNCTION__ = "mailbox_save_cancel" #3 0x000000000040c759 in cmd_append_finish (ctx=0x1fc4cf0) at cmd-append.c:149 __FUNCTION__ = "cmd_append_finish" #4 0x000000000040c835 in client_input_append (cmd=0x1fc4bc0) at cmd-append.c:89 ctx = <optimized out> client = 0x1fc3fc0 reason = 0x1f9e0b8 "Disconnected in APPEND (1 msgs, 306 secs, 188416/1122858 bytes)" finished = <optimized out> lit_offset = <optimized out> __FUNCTION__ = "client_input_append" #5 0x00007f57e2778dcc in io_loop_call_io (io=0x1fc4ad0) at ioloop.c:564 ioloop = 0x1fa6750 t_id = 2 __FUNCTION__ = "io_loop_call_io" #6 0x00007f57e277a0f1 in io_loop_handler_run_internal (ioloop=ioloop@entry=0x1fa6750) at ioloop-epoll.c:220 ctx = 0x1fa8260 io = <optimized out> tv = {tv_sec = 1799, tv_usec = 997118} events_count = <optimized out> msecs = <optimized out> ret = 1 i = 0 j = <optimized out> call = <optimized out> __FUNCTION__ = "io_loop_handler_run_internal" #7 0x00007f57e2778e55 in io_loop_handler_run (ioloop=ioloop@entry=0x1fa6750) at ioloop.c:612 No locals. #8 0x00007f57e2778ff8 in io_loop_run (ioloop=0x1fa6750) at ioloop.c:588 __FUNCTION__ = "io_loop_run" #9 0x00007f57e2713713 in master_service_run (service=0x1fa65f0, callback=callback@entry=0x423a20 <client_connected>) at master-service.c:640 No locals. #10 0x000000000040c427 in main (argc=1, argv=0x1fa6390) at main.c:460 set_roots = {0x42c480 <imap_setting_parser_info>, 0x635440 <lda_setting_parser_info>, 0x0} login_set = {auth_socket_path = 0x1f9e048 "ailed: Connection reset by peer", postlogin_socket_path = 0x0, postlogin_timeout_secs = 60, callback = 0x424170 <login_client_connected>, failure_callback = 0x423b30 <login_client_failed>, request_auth_token = 1} service_flags = <optimized out> storage_service_flags = <optimized out> username = 0x0 auth_socket_path = 0x42d42e "auth-master" c = <optimized out>
This is on a server, which uses compressed maildir on a NFS storage.
Here's dovecot -n output:
# 2.2.24 (a82c823): /etc/dovecot/dovecot.conf # Pigeonhole version 0.4.14 (099a97c) # OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.4 auth_cache_negative_ttl = 5 mins auth_cache_size = 100 M auth_cache_ttl = 15 mins auth_default_realm = example.com auth_master_user_separator = * auth_mechanisms = plain login auth_verbose = yes dict { acl = mysql:/etc/dovecot/dovecot-dict-sql.conf } disable_plaintext_auth = no listen = * log_timestamp = "%Y-%m-%d %H:%M:%S " mail_fsync = always mail_gid = 999 mail_location = maildir:~/mail mail_plugins = acl quota zlib mail_uid = 999 managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapflags mmap_disable = yes namespace { list = children location = maildir:%%h/mail:INDEX=~/mail/shared/%%u prefix = shared/%%u/ separator = / subscriptions = no type = shared } namespace inbox { inbox = yes location = prefix = separator = / type = private } passdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } plugin { acl = vfile acl_shared_dict = proxy::acl quota = maildir sieve = ~/.dovecot.sieve sieve_dir = ~/mail/sieve sieve_extensions = +imapflags zlib_save = gz } pop3_no_flag_updates = yes pop3_uidl_format = %v.%u protocols = imap pop3 sieve service auth { unix_listener auth-master { group = vmail mode = 0600 user = vmail } } service dict { unix_listener dict { group = vmail mode = 0600 user = vmail } } service imap { process_limit = 4000 } service managesieve-login { inet_listener sieve { port = 4190 } } service managesieve { process_limit = 100 } service pop3 { process_limit = 1000 } shutdown_clients = no ssl = no syslog_facility = local2 userdb { args = /etc/dovecot/dovecot-sql.conf driver = sql } verbose_proctitle = yes protocol imap { mail_max_userip_connections = 10 mail_plugins = acl quota zlib imap_quota imap_acl } protocol pop3 { mail_plugins = acl quota zlib }
I hope, that this is all required information to find and solve this issue.
Greetings Roland Hi!
This would appear to be fixed in https://github.com/dovecot/core/commit/5df8396a7cbad0b38b83a86667fb3d4c223f6...
Aki Tuomi Dovecot Oy
Sorry I mean https://github.com/dovecot/core/commit/6bc001ee9dc03cb3107239861867cd674fd32...
Aki
Hi Aki!
On Tue, 07 Jun 2016, Aki Tuomi wrote:
This would appear to be fixed in https://github.com/dovecot/core/commit/5df8396a7cbad0b38b83a86667fb3d4c223f6...
Sorry I mean https://github.com/dovecot/core/commit/6bc001ee9dc03cb3107239861867cd674fd32...
Many thanks for your quick response.
I just applied the second patch and now we have to wait some days, to see weather the issue really disappeared. I'll keep you informed...
Tschoeeee
Roland
-- Roland Rosenfeld - Teamverantwortlicher Content Delivery - NED - Technik NETCOLOGNE Gesellschaft für Telekommunikation mbH Am Coloneum 9 50829 Köln Tel.: +49 221 2222-373 Fax: +49 221 2222-7373 Geschäftsführer: Jost Hermanns, Mario Wilhelm Vorsitzender des Aufsichtsrates: Dr. Andreas Cerbe HRB 25580, AG Köln
Hi Aki!
On Tue, 07 Jun 2016, Aki Tuomi wrote:
After upgrading from Debian wheezy with (self compiled) dovecot 2.2.15 to Debian jessie with (self compiled) 2.2.24, I observe the following segmentation fault in the logs:
Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(<imap client>) failed: read(size=8003) failed: Connection reset by peer (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 Jun 7 09:23:09 imap dovecot: imap(user@example.com): Error: read(zlib(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap)) failed: read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap) failed: zlib.read(/srv/mailstore/user@example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 (uid=0, box=trash) Jun 7 09:23:09 imap dovecot: imap(user@example.com): Fatal: master: service(imap): child 22902 killed with signal 11 (core dumped)
We also observed the same (rare) error in the past on the old system. But on the old system, there were only the first 3 lines without the segmentation fault, so we ignored the issue until now.
Sorry I mean https://github.com/dovecot/core/commit/6bc001ee9dc03cb3107239861867cd674fd32...
Many thanks! This really fixed the Segfault. After applying this patch on 2.2.24, the Segfault disappeared while the above Error messages stayed (as known from 2.2.15).
Tschoeeee
Roland
participants (2)
-
Aki Tuomi
-
Roland Rosenfeld