]> granicus.if.org Git - postgresql/commit
Do stack-depth checking in all postmaster children.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Sun, 8 Apr 2012 15:28:12 +0000 (18:28 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Sun, 8 Apr 2012 16:09:37 +0000 (19:09 +0300)
commitddeac5dec10abe8b26d6a336f95ca593dcf3f3df
tree87aa7da18b06c8e07d4c7da75db58571c27e5851
parent1cba1142b3e3b09866eeb68b939136bea30e2695
Do stack-depth checking in all postmaster children.

We used to only initialize the stack base pointer when starting up a regular
backend, not in other processes. In particular, autovacuum workers can run
arbitrary user code, and without stack-depth checking, infinite recursion
in e.g an index expression will bring down the whole cluster.

The comment about PL/Java using set_stack_base() is not yet true. As the
code stands, PL/java still modifies the stack_base_ptr variable directly.
However, it's been discussed in the PL/Java mailing list that it should be
changed to use the function, because PL/Java is currently oblivious to the
register stack used on Itanium. There's another issues with PL/Java, namely
that the stack base pointer it sets is not really the base of the stack, it
could be something close to the bottom of the stack. That's a separate issue
that might need some further changes to this code, but that's a different
story.

Backpatch to all supported releases.
src/backend/postmaster/postmaster.c
src/backend/tcop/postgres.c
src/include/miscadmin.h