Avoid repeated table name lookups in createPartitionTable()
authorAlexander Korotkov <[email protected]>
Thu, 22 Aug 2024 06:50:48 +0000 (09:50 +0300)
committerAlexander Korotkov <[email protected]>
Thu, 22 Aug 2024 06:50:48 +0000 (09:50 +0300)
commit04158e7fa37c2dda9c3421ca922d02807b86df19
treeaa1c8d1d48c1336275b764418e9dcf039aefe7e2
parent9bb842f95ef3384f0822c386a4c569780e613e4e
Avoid repeated table name lookups in createPartitionTable()

Currently, createPartitionTable() opens newly created table using its name.
This approach is prone to privilege escalation attack, because we might end
up opening another table than we just created.

This commit address the issue above by opening newly created table by its
OID.  It appears to be tricky to get a relation OID out of ProcessUtility().
We have to extend TableLikeClause with new newRelationOid field, which is
filled within ProcessUtility() to be further accessed by caller.

Security: CVE-2014-0062
Reported-by: Noah Misch
Discussion: https://postgr.es/m/20240808171351.a9.nmisch%40google.com
Reviewed-by: Pavel Borisov, Dmitry Koval
src/backend/commands/tablecmds.c
src/backend/parser/gram.y
src/backend/tcop/utility.c
src/include/nodes/parsenodes.h