1
0
mirror of https://github.com/postgres/postgres.git synced 2025-08-05 07:41:25 +03:00

Handle cancel requests with PID 0 gracefully

If the client sent a query cancel request with backend PID 0, it
tripped an assertion. With assertions disabled, you got this in the
log instead:

    LOG:  invalid cancel request with PID 0
    LOG:  wrong key in cancel request for process 0

Query cancellations don't even require authentication, so we better
tolerate bogus requests. Fix by turning the assertion into a regular
runtime check.

Spotted while testing libpq behavior with a modified server that
didn't send BackendKeyData to the client.

Backpatch-through: 18
This commit is contained in:
Heikki Linnakangas
2025-07-30 00:39:49 +03:00
parent 4300d8b6a7
commit 613f647122

View File

@@ -728,7 +728,11 @@ procsignal_sigusr1_handler(SIGNAL_ARGS)
void void
SendCancelRequest(int backendPID, const uint8 *cancel_key, int cancel_key_len) SendCancelRequest(int backendPID, const uint8 *cancel_key, int cancel_key_len)
{ {
Assert(backendPID != 0); if (backendPID == 0)
{
ereport(LOG, (errmsg("invalid cancel request with PID 0")));
return;
}
/* /*
* See if we have a matching backend. Reading the pss_pid and * See if we have a matching backend. Reading the pss_pid and