postgresql/src/backend/utils
Tom Lane edc0a8d82a Detect integer overflow while computing new array dimensions.
array_set_element() and related functions allow an array to be
enlarged by assigning to subscripts outside the current array bounds.
While these places were careful to check that the new bounds are
allowable, they neglected to consider the risk of integer overflow
in computing the new bounds.  In edge cases, we could compute new
bounds that are invalid but get past the subsequent checks,
allowing bad things to happen.  Memory stomps that are potentially
exploitable for arbitrary code execution are possible, and so is
disclosure of server memory.

To fix, perform the hazardous computations using overflow-detecting
arithmetic routines, which fortunately exist in all still-supported
branches.

The test cases added for this generate (after patching) errors that
mention the value of MaxArraySize, which is platform-dependent.
Rather than introduce multiple expected-files, use psql's VERBOSITY
parameter to suppress the printing of the message text.  v11 psql
lacks that parameter, so omit the tests in that branch.

Our thanks to Pedro Gallegos for reporting this problem.

Security: CVE-2023-5869
2023-11-06 10:56:43 -05:00
..
activity Avoid memory size overflow when allocating backend activity buffer 2023-10-03 15:37:21 +09:00
adt Detect integer overflow while computing new array dimensions. 2023-11-06 10:56:43 -05:00
cache Fix exception safety bug in typcache.c. 2023-09-13 14:46:16 +12:00
error Avoid calling proc_exit() in processes forked by system(). 2023-10-17 10:42:12 -05:00
fmgr Fix EXPLAIN of SEARCH BREADTH FIRST with a constant initial value. 2022-10-16 19:18:08 -04:00
hash Update copyright for 2021 2021-01-02 13:06:25 -05:00
init Set GUC "is_superuser" in all processes that set AuthenticatedUserId. 2023-11-06 06:14:17 -08:00
mb Add missing check of noError parameter in euc_tw_and_big5.c 2021-07-21 09:09:32 -04:00
misc Be more wary about NULL values for GUC string variables. 2023-11-02 11:47:33 -04:00
mmgr Re-bin segment when memory pages are freed. 2023-07-04 15:26:42 +12:00
resowner Refactor HMAC implementations 2021-04-03 17:30:49 +09:00
sort Avoid possible overflow with ltsGetFreeBlock() in logtape.c 2023-08-30 08:03:52 +09:00
time Revert "Improve error message on snapshot import in snapmgr.c" 2023-09-14 16:00:41 +09:00
.gitignore Rearrange makefile rules for running Gen_fmgrtab.pl. 2018-05-03 17:54:18 -04:00
Gen_dummy_probes.pl Emit dummy statements for probes.d probes when disabled 2021-05-10 11:40:03 +02:00
Gen_dummy_probes.pl.prolog Tweak generation of Gen_dummy_probes.pl 2021-05-11 20:02:02 -04:00
Gen_dummy_probes.sed Emit dummy statements for probes.d probes when disabled 2021-05-10 11:40:03 +02:00
Gen_fmgrtab.pl Update copyright for 2021 2021-01-02 13:06:25 -05:00
Makefile Tweak generation of Gen_dummy_probes.pl 2021-05-11 20:02:02 -04:00
README.Gen_dummy_probes Tweak generation of Gen_dummy_probes.pl 2021-05-11 20:02:02 -04:00
errcodes.txt Rethink SQLSTATE code for ERRCODE_IDLE_SESSION_TIMEOUT. 2021-01-11 14:53:42 -05:00
generate-errcodes.pl Update copyright for 2021 2021-01-02 13:06:25 -05:00
probes.d Update copyright for 2021 2021-01-02 13:06:25 -05:00

README.Gen_dummy_probes

# Generating dummy probes

If Postgres isn't configured with dtrace enabled, we need to generate
dummy probes for the entries in probes.d, that do nothing.

This is accomplished in Unix via the sed script `Gen_dummy_probes.sed`. We
used to use this in MSVC builds using the perl utility `psed`, which mimicked
sed. However, that utility disappeared from Windows perl distributions and so
we converted the sed script to a perl script to be used in MSVC builds.

We still keep the sed script as the authoritative source for generating
these dummy probes because except on Windows perl is not a hard requirement
when building from a tarball.

So, if you need to change the way dummy probes are generated, first change
the sed script, and when it's working generate the perl script. This can
be accomplished by using the perl utility s2p.

s2p is no longer part of the perl core, so it might not be on your system,
but it is available on CPAN and also in many package systems. e.g.
on Fedora it can be installed using `cpan App::s2p` or
`dnf install perl-App-s2p`.

The Makefile contains a recipe for regenerating Gen_dummy_probes.pl, so all
you need to do is once you have s2p installed is `make Gen_dummy_probes.pl`
Note that in a VPATH build this will generate the file in the vpath tree,
not the source tree.