mirror of
https://github.com/postgres/postgres.git
synced 2026-06-27 17:31:57 -04:00
pgcrypto: avoid recursive ResourceOwnerForget().
Raising an error within a function using an OSSLCipher object led
to a complaint from ResourceOwnerForget and then a double-free crash,
because ResOwnerReleaseOSSLCipher forgot to unhook the OSSLCipher
object from its owner. (The sibling logic for OSSLDigest objects got
this right, as did every other ReleaseResource function AFAICS.)
Oversight in cd694f60d.
Bug: #19527
Reported-by: Yuelin Wang <3020001251@tju.edu.cn>
Author: Yuelin Wang <3020001251@tju.edu.cn>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/19527-6e7686960c6dce78@postgresql.org
Backpatch-through: 17
This commit is contained in:
parent
9a60f295bc
commit
80bb0ebcc1
1 changed files with 4 additions and 1 deletions
|
|
@ -832,7 +832,10 @@ px_find_cipher(const char *name, PX_Cipher **res)
|
|||
static void
|
||||
ResOwnerReleaseOSSLCipher(Datum res)
|
||||
{
|
||||
free_openssl_cipher((OSSLCipher *) DatumGetPointer(res));
|
||||
OSSLCipher *cipher = (OSSLCipher *) DatumGetPointer(res);
|
||||
|
||||
cipher->owner = NULL;
|
||||
free_openssl_cipher(cipher);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue