pgsql: Fix new and latent bugs with errno handling in secure_read/secur

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix new and latent bugs with errno handling in secure_read/secur
Дата
Msg-id E1Vke7t-0000Ny-Pj@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix new and latent bugs with errno handling in secure_read/secure_write.

These functions must be careful that they return the intended value of
errno to their callers.  There were several scenarios where this might
not happen:

1. The recent SSL renegotiation patch added a hunk of code that would
execute after setting errno.  In the first place, it's doubtful that we
should consider renegotiation to be successfully completed after a failure,
and in the second, there's no real guarantee that the called OpenSSL
routines wouldn't clobber errno.  Fix by not executing that hunk except
during success exit.

2. errno was left in an unknown state in case of an unrecognized return
code from SSL_get_error().  While this is a "can't happen" case, it seems
like a good idea to be sure we know what would happen, so reset errno to
ECONNRESET in such cases.  (The corresponding code in libpq's fe-secure.c
already did this.)

3. There was an (undocumented) assumption that client_read_ended() wouldn't
change errno.  While true in the current state of the code, this seems less
than future-proof.  Add explicit saving/restoring of errno to make sure
that changes in the called functions won't break things.

I see no need to back-patch, since #1 is new code and the other two issues
are mostly hypothetical.

Per discussion with Amit Kapila.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/36a3be6540b90c6a5d307c0ed9de2076ce5a821c

Modified Files
--------------
src/backend/libpq/be-secure.c |   37 +++++++++++++++++++++----------------
src/backend/tcop/postgres.c   |    6 ++++++
2 files changed, 27 insertions(+), 16 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Michael Meskes
Дата:
Сообщение: pgsql: Allow C array definitions to use sizeof().
Следующее
От: Jeff Davis
Дата:
Сообщение: pgsql: Lessen library-loading log level.