diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-03-06 12:13:06 -0500 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-03-06 12:13:57 -0500 |
commit | 7f6fa29f18aa84743185ee7ada97f277459228a7 (patch) | |
tree | 16813f807c7a11e5110ec9124c44fb38a2f1d577 /src | |
parent | e434ad39ae7316bcf35fd578dd34ad7e1ff3c25f (diff) | |
download | postgresql-7f6fa29f18aa84743185ee7ada97f277459228a7.tar.gz postgresql-7f6fa29f18aa84743185ee7ada97f277459228a7.zip |
Fix user-after-free bug.
Introduced by commit aea5d298362e881b13d95a48c5ae116879237389.
Patch from Amit Kapila. Issue discovered independently by Amit Kapila
and Ashutosh Sharma.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/postmaster/bgworker.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c index 42760b92bb1..10e0f88b0de 100644 --- a/src/backend/postmaster/bgworker.c +++ b/src/backend/postmaster/bgworker.c @@ -440,12 +440,14 @@ ReportBackgroundWorkerExit(slist_mutable_iter *cur) { RegisteredBgWorker *rw; BackgroundWorkerSlot *slot; + int notify_pid; rw = slist_container(RegisteredBgWorker, rw_lnode, cur->cur); Assert(rw->rw_shmem_slot < max_worker_processes); slot = &BackgroundWorkerData->slot[rw->rw_shmem_slot]; slot->pid = rw->rw_pid; + notify_pid = rw->rw_worker.bgw_notify_pid; /* * If this worker is slated for deregistration, do that before notifying @@ -458,8 +460,8 @@ ReportBackgroundWorkerExit(slist_mutable_iter *cur) rw->rw_worker.bgw_restart_time == BGW_NEVER_RESTART) ForgetBackgroundWorker(cur); - if (rw->rw_worker.bgw_notify_pid != 0) - kill(rw->rw_worker.bgw_notify_pid, SIGUSR1); + if (notify_pid != 0) + kill(notify_pid, SIGUSR1); } /* |