Re: Bug plperl.c
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Mark Murawski <markm-lists@intellasoft.net>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2022-02-25T21:36:42Z
Lists: pgsql-bugs
Attachments
- prevent-spi-execution-during-plperl-compilation.patch (text/x-diff) patch
Mark Murawski <markm-lists@intellasoft.net> writes: > Were you able to reproduce using the updated example? Sorry, this wasn't at the top of my to-do queue. It does reproduce for me, and I think what we need to do about it is the attached. In the normal code paths, this change will disallow usage of SPI until we have completed compile_plperl_function and have a valid "prodesc" to look at. I didn't care for your proposed workaround because (1) it'd allow execution of non-read-only code during compilation of a supposedly read-only function; (2) it didn't patch the dozen or so other places where plperl SPI functions could try to dereference prodesc; (3) allowing code execution during function validation is, if not an actual security hole, certainly on the hairy edge of being one. I'm somewhat comforted about (3) because it seems the problem is only reachable from plperlu not plperl. It's still pretty scary though. I realize that this solution might make your use-case rather awkward. As far as function validation goes, you can still create your functions by setting check_function_bodies = off. If you feel you need to have Perl code that executes during compilation otherwise, I'm not sure what to tell you, except that it doesn't seem like a great idea. I also noticed while looking at this that the relatively-recently-added plperl_spi_commit and plperl_spi_rollback functions neglected to do check_spi_usage_allowed(), so this fixes that too. regards, tom lane
Commits
-
Disallow execution of SPI functions during plperl function compilation.
- 31befa6be620 11.16 landed
- 0f7b62f29d16 12.11 landed
- 9b2d762a283d 13.7 landed
- ac910bb2328f 14.3 landed
- 638300fef541 15.0 landed
- 4936747c4772 10.21 landed