Auteur: Jeremy Harris Date: À: exim-users Sujet: 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.