Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Check criticalSharedRelcachesBuilt in GetSharedSecurityLabel().
authorJeff Davis <jdavis@postgresql.org>
Thu, 14 Oct 2021 19:25:48 +0000 (12:25 -0700)
committerJeff Davis <jdavis@postgresql.org>
Thu, 14 Oct 2021 19:25:48 +0000 (12:25 -0700)
An extension may want to call GetSecurityLabel() on a shared object
before the shared relcaches are fully initialized. For instance, a
ClientAuthentication_hook might want to retrieve the security label on
a role.

Discussion: https://postgr.es/m/ecb7af0b26e3be1d96d291c8453a86f1f82d9061.camel@j-davis.com
Backpatch-through: 9.6

src/backend/commands/seclabel.c

index 5f16d6cf1c1ef1172f0012cce5d36b6558984075..492b14d2668fa5917dafbdc41d58b137cc31049d 100644 (file)
@@ -169,8 +169,8 @@ GetSharedSecurityLabel(const ObjectAddress *object, const char *provider)
 
    pg_shseclabel = heap_open(SharedSecLabelRelationId, AccessShareLock);
 
-   scan = systable_beginscan(pg_shseclabel, SharedSecLabelObjectIndexId, true,
-                             NULL, 3, keys);
+   scan = systable_beginscan(pg_shseclabel, SharedSecLabelObjectIndexId,
+                             criticalSharedRelcachesBuilt, NULL, 3, keys);
 
    tuple = systable_getnext(scan);
    if (HeapTupleIsValid(tuple))