Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wi5AM-0000OM-2R for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 06:56:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wi4vB-00GFEq-30 for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 06:41:14 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whpk0-00DO8q-22 for pgsql-hackers@lists.postgresql.org; Thu, 09 Jul 2026 14:28:41 +0000 Received: from mail-qv1-xf29.google.com ([2607:f8b0:4864:20::f29]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whpjy-00000000UI4-2U1b for pgsql-hackers@postgresql.org; Thu, 09 Jul 2026 14:28:41 +0000 Received: by mail-qv1-xf29.google.com with SMTP id 6a1803df08f44-8eff5ce3b95so13679856d6.3 for ; Thu, 09 Jul 2026 07:28:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783607317; cv=none; d=google.com; s=arc-20260327; b=hVGb24gjPb7M8WGFhanM6ZpTHtE50R66QfUd0pK4PJ8QAX0aYV3wpVJvaR3CB9K+XC /2hUm5I1TpHhin638DNPNn3WLjR+NwIb3PKuTpOxeXjpmg5HFpHpTUXw+4bRV5BPWXxM jyIwhP3fR4RT7ynHS9Byj/MIhaCGzWtkh2U2R2k6EwOC9z5Cjz2xRb7MWNB9UvktNICD Qh9/CXEjKONSPhAOfxGavf5ZYfKHxiWt0aNvbRRS4N76cbeUFWhCU8vHvHRKNNpRVM+N E5jQTtuPNhouVMYApo0mZtxXt6ohy0hVU1OeyFqcSMd7jK0SoM6iap0tCHHA3MMPi4Li 3/sw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=Zf3vXEA1DG5rAMlp9eq3LehIXtFxQEfHJstCFjyfR5Q=; fh=33OU7BWuulPFH378PdKTnpeW+jw3IP20DTmpLDeQ3pE=; b=nXxZH7gn9xyk8DziJUAxiTbT+N0M0Ob7XyEJXCnpxCCYYOcpFI7YAFkaD4X9QOBeks Em8nHmw4Br0Mr7hTfporiPOSxsitXULmtt6j8qFnlWi8QBb9P47NcNfIknwuWTNum2MU tpdqvMsWNRnVxNQf6zh5JOo91etQexvTxaG8HQd9xhZFn4C5qfEhkbdjWvsy7VJHedpT LjEAGPR7BFYQnSWwGd6pDv+hsiXGxBO1ayOTBzEfcZ7dsOnRf+Qmy6VUAdE0Q3tLz8Ie k9zFtTfk3O4mhd3nwZYLoAoIJ+4crZR4c5E9rrAd+xoWIWCRcwVYqfGnMMDy/dLURu7Q zL7w==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783607317; x=1784212117; darn=postgresql.org; h=content-type:to:subject:message-id:date:from:mime-version:from:to :cc:subject:date:message-id:reply-to:content-type; bh=Zf3vXEA1DG5rAMlp9eq3LehIXtFxQEfHJstCFjyfR5Q=; b=kKNp+61JhgdZqYmlQH3b9wMUhieDhtUmr/vS12yA9WS12EKc43zp7sa7kmbiPi9wqH I9qIGFVOu/B0yTI7oK8n4jnZbnCqnlewgeRdH+HEOCEDwbTJ6ZfHmI43/pXO3iz+kECM 9XC0oaCw6zTv/5ZkyBNlzwk7KXVo/38nCtbI9iMk7NHftdpNio/wBYAHrGqHbS7AJ8BA 09oXvfFpY/WfZVs4yArq6doadGLZKRQxkaC75J+d1QhKcRa83KG+BA17b6fzzxjfBCzl G1duTfaTHJ2MzNJ4UfnAtvpmCJCHfLa5s88XIpZioUL/rsBzuwp1q+bRndVWffLZvX7p m8Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783607317; x=1784212117; h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Zf3vXEA1DG5rAMlp9eq3LehIXtFxQEfHJstCFjyfR5Q=; b=GYwmdeAjytjzpyhtdfcb1Z8aJsudclYw7DTV4/Wm5Psba6QNQMprYDdSXaq2fiv1Y+ W0abnLiUqziifA8KSUzqPai3e15kqw5UnotaYOFVf1V5wZFH2re38xYE1tEimr1fWkRe VLtih2j+dgwZ8aKWaYnyIdDP7rxl+H+XyMA+ub18JirDcLBeNu7hFCHQDXm4jVdnOO0k JOmY7VpHCbNaxIZBYwrI/vKDCKu8C2oO5Lqh6KgNknsWa9al5UZK8ETnnjh4ZlencuzW Z7/kcawnFWpGTReOfvBVpLe8EP+ZA2A7C5hbsRiI0Y4UdBMt+oYqIz0ULh7X8nKOcHy9 75TA== X-Gm-Message-State: AOJu0Yw9/6CVsNdEd/bM3S7P7jXudfaZqjveTv2Gd1zqx/a5MUewkclO EQvlBGFqJklMbEblH6YNOLeATOL6tsfZa4DqhbKVHZJrO/PoRrnTxBWPemvSKWrTEh+xdmqPutu G1qBakHU9KZUACywrCW4F9bwpG/OfNwaZSe0tzK8= X-Gm-Gg: AfdE7cmgaVig6vRmEwYrmXXR3sK/kecyz7qm1xDXK6yMBqXTboOE/WhP9Tpp8psixqo lRJkIwVt86NSAJ3RUh0VwJPpEayhTdQR0SrM0kG0gGqhFAjNMXuLwLxJeWZ3Tp+aREsEH99fdxC mwljTWpUqM7y8JdUS6IXUzGQnyYiW1wrrrtR2jiKGGs7LbIH/SbiEs4PgBYLKkcylzPjZDKijSG DbrEHmE2sc28fS2S3VxCRoiHbkEBGPYqNHgTuZgC61/ixnm/ItwBlKBrgdoelqiCuNk X-Received: by 2002:a05:6214:570d:b0:8ed:58a0:5ff6 with SMTP id 6a1803df08f44-8fec3049be4mr80260836d6.50.1783607317197; Thu, 09 Jul 2026 07:28:37 -0700 (PDT) MIME-Version: 1.0 From: Andreas Lind Date: Thu, 9 Jul 2026 16:28:25 +0200 X-Gm-Features: AUfX_myNWNBPG4A2m1nSGgBj5to9or5RttqkbbJREt4hQft9KOe5jeJ9-MXtHNg Message-ID: Subject: equalPolicy() doesn't compare the permissive flag To: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000008f8dac06562e7020" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008f8dac06562e7020 Content-Type: text/plain; charset="UTF-8" Hi, While working on an unrelated RLS patch, I noticed that equalPolicy() in relcache.c doesn't compare the permissive field of RowSecurityPolicy. It compares polcmd, hassublinks, policy_name, roles, qual, and with_check_qual, but not permissive, so two policies that are identical in every other respect except their PERMISSIVE/RESTRICTIVE designation are reported as equal. equalPolicy() is used (via equalRSDesc()) by RelationRebuildRelation() to decide whether an open relation's existing row-security descriptor can be kept as-is across a relcache rebuild, or must be treated as changed. ALTER POLICY has no way to flip a policy's PERMISSIVE/RESTRICTIVE designation, but DROP POLICY followed by CREATE POLICY of the same name, roles, command, and quals, differing only in AS PERMISSIVE/RESTRICTIVE, hits this exactly: the stale descriptor would be kept, leaving the relcache out of sync with how the policy should now combine with others (PERMISSIVE policies are ORed together; RESTRICTIVE policies are ANDed with the rest). I wasn't able to construct a simple SQL reproduction: RelationRebuildRelation() (and thus this comparison) is only reached while the relation is still open (refcount > 0) at the moment its invalidation is processed. Closing and reopening the relation between statements -- the usual behavior -- sidesteps the bug, and a second session can't hold the relation open across the DROP/CREATE either, since both need AccessExclusiveLock. This looks analogous to ab6d1cd26eb, which fixed the same kind of omission in this function for the USING qual and likewise shipped without a test. Patch attached. Regards, Andreas Lind --0000000000008f8dac06562e7020 Content-Type: application/octet-stream; name="0001-Fix-relcache-s-equalPolicy-to-compare-the-permissive.patch" Content-Disposition: attachment; filename="0001-Fix-relcache-s-equalPolicy-to-compare-the-permissive.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrdli61z0 RnJvbSBiNmE5MTg0YzkyMDJhODRjNWZhOTI1Y2I4NzkyNGI0N2JiZThhZWNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZWFzIExpbmQgPGFuZHJlYXNsaW5kcGV0ZXJzZW5AZ21h aWwuY29tPgpEYXRlOiBUaHUsIDkgSnVsIDIwMjYgMTU6MDY6MzkgKzAyMDAKU3ViamVjdDogW1BB VENIXSBGaXggcmVsY2FjaGUncyBlcXVhbFBvbGljeSgpIHRvIGNvbXBhcmUgdGhlCiBwZXJtaXNz aXZlL3Jlc3RyaWN0aXZlIGZsYWcKCmVxdWFsUG9saWN5KCkgaXMgdXNlZCBieSBlcXVhbFJTRGVz YygpLCB3aGljaCBSZWxhdGlvblJlYnVpbGRSZWxhdGlvbigpCmNvbnN1bHRzIHdoZW4gcmVidWls ZGluZyBhbiBvcGVuIHJlbGF0aW9uJ3MgcmVsY2FjaGUgZW50cnkgaW4gcGxhY2UKKHJlZmNvdW50 ID4gMCkgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGVudHJ5J3MgZXhpc3Rpbmcgcm93LXNlY3VyaXR5 CmRlc2NyaXB0b3IgY2FuIGJlIGtlcHQgYXMtaXMgb3IgbXVzdCBiZSB0cmVhdGVkIGFzIGNoYW5n ZWQuIEl0CmNvbXBhcmVkIHBvbGNtZCwgaGFzc3VibGlua3MsIHBvbGljeV9uYW1lLCByb2xlcywg cXVhbCwgYW5kCndpdGhfY2hlY2tfcXVhbCwgYnV0IG5ldmVyIHBlcm1pc3NpdmUsIHNvIHR3byBw b2xpY2llcyB0aGF0IGFyZQppZGVudGljYWwgaW4gZXZlcnkgb3RoZXIgcmVzcGVjdCBidXQgZGlm ZmVyIGluIHRoZWlyClBFUk1JU1NJVkUvUkVTVFJJQ1RJVkUgZGVzaWduYXRpb24gd2VyZSByZXBv cnRlZCBhcyBlcXVhbCwgYW5kIHRoZQpzdGFsZSBkZXNjcmlwdG9yICh3aXRoIHRoZSBvbGQgZGVz aWduYXRpb24pIHdvdWxkIGJlIGtlcHQuCgpUaGlzIGlzIHJlYWNoYWJsZSB3aXRob3V0IGFueSB1 bnN1cHBvcnRlZCBjYXRhbG9nIHN1cmdlcnk6IEFMVEVSClBPTElDWSBoYXMgbm8gd2F5IHRvIGNo YW5nZSBhIHBvbGljeSdzIFBFUk1JU1NJVkUvUkVTVFJJQ1RJVkUKZGVzaWduYXRpb24sIGJ1dCBE Uk9QIFBPTElDWSBmb2xsb3dlZCBieSBDUkVBVEUgUE9MSUNZIG9mIHRoZSBzYW1lCm5hbWUsIHJv bGVzLCBjb21tYW5kLCBhbmQgcXVhbHMsIGRpZmZlcmluZyBvbmx5IGluIEFTClBFUk1JU1NJVkUv UkVTVFJJQ1RJVkUsIGhpdHMgZXhhY3RseSB0aGlzIGNhc2UsIGFuZCB3b3VsZCBsZWF2ZSB0aGUK cmVsY2FjaGUgb3V0IG9mIHN5bmMgd2l0aCBob3cgdGhlIHBvbGljeSBzaG91bGQgbm93IGNvbWJp bmUgd2l0aApvdGhlcnMgKFBFUk1JU1NJVkUgcG9saWNpZXMgYXJlIE9SZWQgdG9nZXRoZXI7IFJF U1RSSUNUSVZFIHBvbGljaWVzCmFyZSBBTkRlZCB3aXRoIHRoZSByZXN0KS4KCk5vdGUgdGhhdCBS ZWxhdGlvblJlYnVpbGRSZWxhdGlvbigpLCBhbmQgdGh1cyB0aGlzIGNvbXBhcmlzb24sIGlzIG9u bHkKcmVhY2hlZCB3aGlsZSB0aGUgcmVsYXRpb24gaXMgc3RpbGwgb3BlbiAocmVmY291bnQgPiAw KSBhdCB0aGUgbW9tZW50Cml0cyBpbnZhbGlkYXRpb24gaXMgbG9jYWxseSBwcm9jZXNzZWQ7IGlm IG5vdGhpbmcgaG9sZHMgaXQgb3BlbiBhdAp0aGF0IHBvaW50LCBSZWxhdGlvbkNsZWFyUmVsYXRp b24oKSBqdXN0IGRlbGV0ZXMgdGhlIGVudHJ5IG91dHJpZ2h0CmFuZCBpdCBnZXRzIHJlYnVpbHQg ZnJvbSBzY3JhdGNoIG9uIG5leHQgYWNjZXNzLCBzaWRlc3RlcHBpbmcgdGhlCmNvbXBhcmlzb24g ZW50aXJlbHkuIENvbnNlcXVlbnRseSB0aGlzIGlzbid0IHJlYWNoYWJsZSB0aHJvdWdoIGEKc3Ry YWlnaHRmb3J3YXJkIHNlcXVlbmNlIG9mIG9yZGluYXJ5IFNRTCBzdGF0ZW1lbnRzOiBjbG9zaW5n IGFuZApyZW9wZW5pbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gc3RhdGVtZW50cyAodGhlIHVzdWFs IGJlaGF2aW9yKSBhdm9pZHMKdGhlIGJ1ZywgYW5kIGEgc2Vjb25kIHNlc3Npb24gY2Fubm90IGhv bGQgdGhlIHJlbGF0aW9uIG9wZW4gYWNyb3NzIHRoZQpEUk9QL0NSRUFURSBlaXRoZXIsIHNpbmNl IGJvdGggcmVxdWlyZSBBY2Nlc3NFeGNsdXNpdmVMb2NrLiBBcyB3aXRoCmFiNmQxY2QyNmViLCB3 aGljaCBmaXhlZCB0aGUgc2FtZSBraW5kIG9mIG9taXNzaW9uIGluIHRoaXMgZnVuY3Rpb24KZm9y IHRoZSBVU0lORyBxdWFsLCB0aGlzIGlzIGEgZml4IGZvciBhbiBpbnRlcm5hbCBjYWNoZS1jb25z aXN0ZW5jeQppbnZhcmlhbnQgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHdpdGggYSBzaW1wbGUgZXh0 ZXJuYWxseSBvYnNlcnZhYmxlCnRyaWdnZXIsIGFuZCBpcyBzdWJtaXR0ZWQgd2l0aG91dCBhIHJl cHJvZHVjdGlvbiBzY3JpcHQgZm9yIHRoYXQKcmVhc29uLgotLS0KIHNyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3JlbGNhY2hlLmMgfCAyICsrCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCsp CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKaW5kZXggZmI0ZTA0MmJlOGEuLjE5YzRmZjZl NzVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTk4MCw2ICs5ODAsOCBAQCBl cXVhbFBvbGljeShSb3dTZWN1cml0eVBvbGljeSAqcG9saWN5MSwgUm93U2VjdXJpdHlQb2xpY3kg KnBvbGljeTIpCiAKIAkJaWYgKHBvbGljeTEtPnBvbGNtZCAhPSBwb2xpY3kyLT5wb2xjbWQpCiAJ CQlyZXR1cm4gZmFsc2U7CisJCWlmIChwb2xpY3kxLT5wZXJtaXNzaXZlICE9IHBvbGljeTItPnBl cm1pc3NpdmUpCisJCQlyZXR1cm4gZmFsc2U7CiAJCWlmIChwb2xpY3kxLT5oYXNzdWJsaW5rcyAh PSBwb2xpY3kyLT5oYXNzdWJsaW5rcykKIAkJCXJldHVybiBmYWxzZTsKIAkJaWYgKHN0cmNtcChw b2xpY3kxLT5wb2xpY3lfbmFtZSwgcG9saWN5Mi0+cG9saWN5X25hbWUpICE9IDApCi0tIAoyLjUw LjEgKEFwcGxlIEdpdC0xNTUpCgo= --0000000000008f8dac06562e7020--