• Michael Paquier's avatar
    Add safeguards for pg_fsync() called with incorrectly-opened fds · 12198239
    Michael Paquier authored
    On some platforms, fsync() returns EBADFD when opening a file descriptor
    with O_RDONLY (read-only), leading ultimately now to a PANIC to prevent
    data corruption.
    
    This commit adds a new sanity check in pg_fsync() based on fcntl() to
    make sure that we don't repeat again mistakes with incorrectly-set file
    descriptors so as problems are detected at an early stage.  Without
    that, such errors could only be detected after running Postgres on a
    specific supported platform for the culprit code path, which could take
    some time before being found.  b8e19b93 was a fix for such a problem,
    which got undetected for more than 5 years, and a586cc4b fixed another
    similar issue.
    
    Note that the new check added works as well when fsync=off is
    configured, so as all regression tests would detect problems as long as
    assertions are enabled.  fcntl() being not available on Windows, the
    new checks do not happen there.
    
    Author: Michael Paquier
    Reviewed-by: Mark Dilger
    Discussion: https://postgr.es/m/20191009062640.GB21379@paquier.xyz
    12198239
fd.c 91.9 KB