From: Alvaro Herrera Date: Sun, 27 Dec 2015 16:03:19 +0000 (-0300) Subject: Add forgotten CHECK_FOR_INTERRUPT calls in pgcrypto's crypt() X-Git-Tag: REL9_6_BETA1~945 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=743229a67e24aaee3f671bc5692100fe94c47436;p=postgresql 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. --- diff --git a/contrib/pgcrypto/crypt-blowfish.c b/contrib/pgcrypto/crypt-blowfish.c index 4054e6a06f..6feaefcf7b 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 682958600a..a4aa4966bf 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. */