From c886c30cc8731a3fab989a2b361fd38c5bb1ad53 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Sun, 27 Dec 2015 13:03:19 -0300 Subject: [PATCH] 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. --- contrib/pgcrypto/crypt-blowfish.c | 3 +++ contrib/pgcrypto/crypt-des.c | 3 +++ 2 files changed, 6 insertions(+) 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 e943461599..6c45b42299 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. */