Skip to content

Commit 3bf4f5c

Browse files
committed
PG-1488: Only create keys for main/init forks
smgr_create is called for all forks. It is possible that additional forks for existing tables are created during a tde creation event. In practice this happens quite often with CREATE INDEX CONCURRENTLY. Without this fix, pg_tde created encryption keys for these existing tables, and later writes and reads tried to use these keys with all these issues. In practice some of the file got encrypted, some didn't, and earlier records that weren't encrypted became unreadable.
1 parent 01a8ee3 commit 3bf4f5c

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

contrib/pg_tde/src/smgr/pg_tde_smgr.c

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -242,20 +242,30 @@ tde_mdcreate(RelFileLocator relold, SMgrRelation reln, ForkNumber forknum, bool
242242

243243
mdcreate(relold, reln, forknum, isRedo);
244244

245-
/*
246-
* Later calls then decide to encrypt or not based on the existence of the
247-
* key
248-
*/
249-
key = tde_smgr_get_key(reln, event->alterAccessMethodMode ? NULL : &relold, true);
250-
251-
if (key)
252-
{
253-
tdereln->encrypted_relation = true;
254-
tdereln->relKey = *key;
255-
}
256-
else
245+
if (forknum == MAIN_FORKNUM || forknum == INIT_FORKNUM)
257246
{
258-
tdereln->encrypted_relation = false;
247+
/*
248+
* Only create keys when creating the main/init fork. Other forks can
249+
* be created later, even during tde creation events. We definitely do
250+
* not want to create keys then, even later, when we encrypt all
251+
* forks!
252+
*/
253+
254+
/*
255+
* Later calls then decide to encrypt or not based on the existence of
256+
* the key
257+
*/
258+
key = tde_smgr_get_key(reln, event->alterAccessMethodMode ? NULL : &relold, true);
259+
260+
if (key)
261+
{
262+
tdereln->encrypted_relation = true;
263+
tdereln->relKey = *key;
264+
}
265+
else
266+
{
267+
tdereln->encrypted_relation = false;
268+
}
259269
}
260270
}
261271

0 commit comments

Comments
 (0)