]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Reject CancelRequestPacket having unexpected length.
authorNoah Misch <noah@leadboat.com>
Sat, 21 Jan 2023 14:08:00 +0000 (06:08 -0800)
committerNoah Misch <noah@leadboat.com>
Sat, 21 Jan 2023 14:08:04 +0000 (06:08 -0800)
When the length was too short, the server read outside the allocation.
That yielded the same log noise as sending the correct length with
(backendPID,cancelAuthCode) matching nothing.  Change to a message about
the unexpected length.  Given the attacker's lack of control over the
memory layout and the general lack of diversity in memory layouts at the
code in question, we doubt a would-be attacker could cause a segfault.
Hence, while the report arrived via security@postgresql.org, this is not
a vulnerability.  Back-patch to v11 (all supported versions).

Andrey Borodin, reviewed by Tom Lane.  Reported by Andrey Borodin.

src/backend/postmaster/postmaster.c

index a8b3f5000c2a3d0e6e3ab33dcc1a71ebb183b0b0..6a8cda633240e22be776f9e427acf44bd8302a96 100644 (file)
@@ -2000,6 +2000,13 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done)
 
        if (proto == CANCEL_REQUEST_CODE)
        {
+               if (len != sizeof(CancelRequestPacket))
+               {
+                       ereport(COMMERROR,
+                                       (errcode(ERRCODE_PROTOCOL_VIOLATION),
+                                        errmsg("invalid length of startup packet")));
+                       return STATUS_ERROR;
+               }
                processCancelRequest(port, buf);
                /* Not really an error, but we don't want to proceed further */
                return STATUS_ERROR;