summaryrefslogtreecommitdiff
path: root/src/backend/postmaster/postmaster.c
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2012-04-08 18:28:12 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2012-04-08 19:08:13 +0300
commitef29bb1f7254222835267cc03389ed12602c677c (patch)
tree985f3562c0a8de92789faf074bb3ff0eaa964111 /src/backend/postmaster/postmaster.c
parent63d8636c50f2ca053aa6a214340bb322bc5687d5 (diff)
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.
Diffstat (limited to 'src/backend/postmaster/postmaster.c')
-rw-r--r--src/backend/postmaster/postmaster.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 067edcfe290..3f7605ce9b1 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -971,6 +971,11 @@ PostmasterMain(int argc, char *argv[])
set_max_safe_fds();
/*
+ * Set reference point for stack-depth checking.
+ */
+ set_stack_base();
+
+ /*
* Initialize the list of active backends.
*/
BackendList = DLNewList();
@@ -3991,6 +3996,11 @@ SubPostmasterMain(int argc, char *argv[])
read_backend_variables(argv[2], &port);
/*
+ * Set reference point for stack-depth checking
+ */
+ set_stack_base();
+
+ /*
* Set up memory area for GSS information. Mirrors the code in ConnCreate
* for the non-exec case.
*/