Re: plperl sigfpe reset can crash the server
От | Andres Freund |
---|---|
Тема | Re: plperl sigfpe reset can crash the server |
Дата | |
Msg-id | 201208240644.15864.andres@2ndquadrant.com обсуждение исходный текст |
Ответ на | Re: plperl crash with Debian 6 (64 bit), pl/perlu, libwww and https (Andres Freund <andres@2ndquadrant.com>) |
Ответы |
Re: plperl sigfpe reset can crash the server
|
Список | pgsql-hackers |
On Thursday, August 23, 2012 12:17:22 PM Andres Freund wrote: > Hi, > > While debugging an instance of this bug I noticed that plperlu always > removes the SIGFPE handler and sets it to ignore: > > > andres@awork2:~$ psql -p 5435 -U postgres -h /var/run/postgresql test > Timing is on. > psql (9.1devel, server 9.1.5) > Type "help" for help. > > test=# SELECT pg_backend_pid(); > pg_backend_pid > ---------------- > 9287 > > root@awork2:/home/andres# grep -E '^Sig(Cgt|Ign)' /proc/9287/status|awk > '{print $2}' > 0000000001301800 > 0000000180006287 > > test=# DO LANGUAGE plperlu $$$$; > > root@awork2:/home/andres# grep -E '^Sig(Cgt|Ign)' /proc/9287/status|awk > '{print $2}' > 0000000001301880 > 0000000180006207 > > Note the 8'th bit being unset in SigCgt and set in SigIgn. Thats SIGFPE... > > Not sure how relevant this really is, but it could cause errors to be > ignored... In fact it can be used to crash the server: test=# SELECT (-2^31)::int/-1; ERROR: floating-point exception DETAIL: An invalid floating-point operation was signaled. This probably means an out-of-range result or an invalid operation, such as division by zero. test=# DO LANGUAGE plperl $$$$; DO Time: 172.235 ms test=# SELECT (-2^31)::int/-1; server closed the connection unexpectedlyThis probably means the server terminated abnormallybefore or while processing therequest. The connection to the server was lost. Attempting reset: Failed. Greetings, Andres -- Andres Freund http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services
В списке pgsql-hackers по дате отправления: