Cap wal_buffers to avoid a server crash when it's set very large.
authorRobert Haas
Tue, 4 Aug 2015 16:58:54 +0000 (12:58 -0400)
committerRobert Haas
Tue, 4 Aug 2015 17:05:52 +0000 (13:05 -0400)
It must be possible to multiply wal_buffers by XLOG_BLCKSZ without
overflowing int, or calculations in StartupXLOG will go badly wrong
and crash the server.  Avoid that by imposing a maximum value on
wal_buffers.  This will be just under 2GB, assuming the usual value
for XLOG_BLCKSZ.

Josh Berkus, per an analysis by Andrew Gierth.

src/backend/utils/misc/guc.c

index 61cde68a6c32d915203a90e9cf5f5d4b43b02745..e710c41079c4c5d35461b88187b653462fae8f3d 100644 (file)
@@ -2050,7 +2050,7 @@ static struct config_int ConfigureNamesInt[] =
            GUC_UNIT_XBLOCKS
        },
        &XLOGbuffers,
-       -1, -1, INT_MAX,
+       -1, -1, (INT_MAX / XLOG_BLCKSZ),
        check_wal_buffers, NULL, NULL
    },