Re: [exim] Exim 4.88(9): failed to read pipe from transport

Top Page
Delete this message
Reply to this message
Author: Jeremy Harris
Date:  
To: exim-users
Subject: Re: [exim] Exim 4.88(9): failed to read pipe from transport
On 24/05/17 18:14, Axel Rau wrote:
> What is the status of this problem:
> —-
> failed to read pipe from transport process 28932 for transport smtp: required size=2680 > remaining size=329 and unfinished=false
> ——
> with many recipients over TLS ?


Disabling TLS will reduce the frequency this bites; it's to do with the
the pipe used for feeding results back from the transport process to
the parent responsible for running them, assessing the result, and
logging. The size of a result increased compared to previous Exim
versions because we now pass back the peer certificate - easily kilobyte
sized. FreeBSD has a PIPE_BUF size of 512 - but the code reading the
pipe assumes it will always get a response element (not the entire
response, just one bit) in one read.

[ POSIX says that _writes_ of less that PIPE_BUF into a pipe are
atomic. But that only says that competing write won't interleave;
Nothing about whether a large-enough read request will always
empty a pipe. Perhaps that is specified elsewhere; I've not looked.

Irrelevant, now I've found the 512 value.
]

Disabling TLS is not a sufficient fix, as response elements other than
the certificate info could be large; eg. an error message.

The "many recipients" probably only increases the probability, is not
a requirement for the bug to bite.

The issue is less likely under Linux which has PIPE_BUF 4096.
Nonetheless a fix is required; not only for FreeBSD users but also
for IOT tiny implementations.

Bug 2130 raised.
--
Cheers,
Jeremy