summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera2015-12-27 16:03:19 +0000
committerAlvaro Herrera2015-12-27 16:03:19 +0000
commit743229a67e24aaee3f671bc5692100fe94c47436 (patch)
tree957d27ec940b2d66d89aa6625b7678547380c800
parentfec1ad94dfc5ddacfda8d249bf4b3c739da8f7a1 (diff)
Add forgotten CHECK_FOR_INTERRUPT calls in pgcrypto's crypt()
Both Blowfish and DES implementations of crypt() can take arbitrarily long time, depending on the number of rounds specified by the caller; make sure they can be interrupted. Author: Andreas Karlsson Reviewer: Jeff Janes Backpatch to 9.1.
-rw-r--r--contrib/pgcrypto/crypt-blowfish.c3
-rw-r--r--contrib/pgcrypto/crypt-des.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/contrib/pgcrypto/crypt-blowfish.c b/contrib/pgcrypto/crypt-blowfish.c
index 4054e6a06fc..6feaefcf7be 100644
--- a/contrib/pgcrypto/crypt-blowfish.c
+++ b/contrib/pgcrypto/crypt-blowfish.c
@@ -33,6 +33,7 @@
*/
#include "postgres.h"
+#include "miscadmin.h"
#include "px-crypt.h"
#include "px.h"
@@ -670,6 +671,8 @@ _crypt_blowfish_rn(const char *key, const char *setting,
do
{
+ CHECK_FOR_INTERRUPTS();
+
data.ctx.P[0] ^= data.expanded_key[0];
data.ctx.P[1] ^= data.expanded_key[1];
data.ctx.P[2] ^= data.expanded_key[2];
diff --git a/contrib/pgcrypto/crypt-des.c b/contrib/pgcrypto/crypt-des.c
index 682958600a6..a4aa4966bfc 100644
--- a/contrib/pgcrypto/crypt-des.c
+++ b/contrib/pgcrypto/crypt-des.c
@@ -61,6 +61,7 @@
*/
#include "postgres.h"
+#include "miscadmin.h"
#include "px-crypt.h"
@@ -540,6 +541,8 @@ do_des(uint32 l_in, uint32 r_in, uint32 *l_out, uint32 *r_out, int count)
while (count--)
{
+ CHECK_FOR_INTERRUPTS();
+
/*
* Do each round.
*/