Bug 4197

Summary: buffer overflow x86_64
Product: Postgres@Etersoft Reporter: Andrey Chichak <andrey.chichak>
Component: пакетыAssignee: Boris Savelev <boris>
Status: CLOSED FIXED QA Contact:
Severity: major    
Priority: P4 CC: boris, goga, lav
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 4030    

Description Andrey Chichak 2009-08-06 14:43:48 MSD
сервер работающий под ALTLinux x86_64 Sisyphus.

[chch@ws-chch ~]$ psql -U postgres
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# select lower('q');
server closed the connection unexpectedly
	This probably means the server terminated abnormally
	before or while processing the request.
Соединение с сервером было потеряно. Попытка переустановить: Безуспешно.
!> \q

в логах сервера "buffer overflow"

проверено на двух системах.
Comment 1 Boris Savelev 2009-08-06 15:20:26 MSD
воспроизводится на обычном postgresql8.3-server на i586
postgresql8.3-server-8.3.7-alt3
postgresql8.3-8.3.7-alt3
Comment 2 Boris Savelev 2009-08-06 15:27:19 MSD
на предыдущей версии все норм. видимо все сломал патч http://git.altlinux.org/people/misha/packages/?p=postgresql8.3.git;a=blob;f=0001-fix-buffer_overflow.patch;h=28a042a73272633871a686bdea38ea45698c94ca;hb=8ddddf0e5e0f271833e07a27a57662e501720692
Comment 3 Vitaly Lipatov 2009-08-06 16:29:47 MSD
Предполагаю, что поможет установка сборки для версии 5.0
Comment 4 Станислав Коробейников 2009-08-06 17:08:06 MSD
в логах Postgres на i586

*** buffer overflow detected ***: postgres: postgres postgres [local] SELECT terminated
======= Backtrace: =========
/lib/libc.so.6(__fortify_fail+0x40)[0xb7d6afe0]
/lib/libc.so.6[0xb7d69230]
/lib/libc.so.6(__asprintf_chk+0x0)[0xb7d6ab60]
postgres: postgres postgres [local] SELECT[0x827b635]
postgres: postgres postgres [local] SELECT(upper+0xc6)[0x827b916]
postgres: postgres postgres [local] SELECT(ExecMakeFunctionResult+0x325)[0x8182345]
Comment 5 Boris Savelev 2009-08-06 17:11:37 MSD
*** buffer overflow detected ***: postgres: postgres postgres [local] SELECT terminated
======= Backtrace: =========
/lib/libc.so.6(__fortify_fail+0x40)[0xb7dccf30]
/lib/libc.so.6[0xb7dcb180]
/lib/libc.so.6(__asprintf_chk+0x0)[0xb7dccab0]
postgres: postgres postgres [local] SELECT[0x827b6e5]
postgres: postgres postgres [local] SELECT(lower+0xc6)[0x827baa6]
postgres: postgres postgres [local] SELECT(ExecMakeFunctionResult+0x325)[0x81823f5]
postgres: postgres postgres [local] SELECT[0x8183acc]
postgres: postgres postgres [local] SELECT(ExecProject+0x1f8)[0x817f6e8]
postgres: postgres postgres [local] SELECT(ExecResult+0x7b)[0x819283b]
postgres: postgres postgres [local] SELECT(ExecProcNode+0x238)[0x817ea98]
postgres: postgres postgres [local] SELECT(ExecutorRun+0x2ce)[0x817c6ae]
postgres: postgres postgres [local] SELECT[0x82298d1]
postgres: postgres postgres [local] SELECT(PortalRun+0x1d9)[0x822aea9]
postgres: postgres postgres [local] SELECT[0x82253dd]
postgres: postgres postgres [local] SELECT(PostgresMain+0xefb)[0x8226feb]
postgres: postgres postgres [local] SELECT[0x81f4d6f]
postgres: postgres postgres [local] SELECT(PostmasterMain+0xcef)[0x81f738f]
postgres: postgres postgres [local] SELECT(main+0x9cc)[0x81a3f9c]
/lib/libc.so.6(__libc_start_main+0xe6)[0xb7d05b26]
postgres: postgres postgres [local] SELECT[0x80809d1]
Comment 6 Станислав Коробейников 2009-08-06 17:20:57 MSD
в логах Postgres на i586

*** buffer overflow detected ***: postgres: postgres postgres [local] SELECT terminated
======= Backtrace: =========
/lib/libc.so.6(__fortify_fail+0x40)[0xb7d6afe0]
/lib/libc.so.6[0xb7d69230]
/lib/libc.so.6(__asprintf_chk+0x0)[0xb7d6ab60]
postgres: postgres postgres [local] SELECT[0x827b635]
postgres: postgres postgres [local] SELECT(upper+0xc6)[0x827b916]
postgres: postgres postgres [local] SELECT(ExecMakeFunctionResult+0x325)[0x8182345]
Comment 7 Станислав Коробейников 2009-08-06 17:21:24 MSD
При подключении к слушающему процессу
через
gdb /usr/bin/postmaster PID:

#4  0xb7d87230 in __chk_fail () from /lib/libc.so.6
#5  0xb7d88b60 in __wcstombs_chk () from /lib/libc.so.6
#6  0x0827b635 in wcstotext (str=0x8513e60, ncodes=<value optimized out>) at
/usr/include/bits/stdlib.h:151
#7  0x0827b916 in upper (fcinfo=0xbfed6208) at oracle_compat.c:442
Comment 8 Boris Savelev 2009-08-06 17:21:59 MSD
сборка от 5.0 работает. кто виноват и что делать?-)
Comment 9 Vitaly Lipatov 2009-08-06 17:40:16 MSD
Там проблема со старым знакомым VARDATA(result):

<------>/* Make workspace certainly large enough for result */
<------>result = (text *) palloc((ncodes + 1) * MB_CUR_MAX + VARHDRSZ);

<------>/* Do the conversion */
<------>nbytes = wcstombs((char *) VARDATA(result), str,
<------><------><------><------><------>  (ncodes + 1) * MB_CUR_MAX);

в функции wcstotext

Боюсь, что это далеко не единственное место. Считаю причиной проблемы ошибку в компиляторе. Воспроизвести проблему отдельно не удалось.
Comment 10 Vitaly Lipatov 2009-10-19 18:40:39 MSD
Давайте что-то сделаем, например проверим на Ubuntu. Если ошибка в компиляторе, это сразу всплывёт.
Comment 11 Boris Savelev 2009-10-19 19:04:07 MSD
есть же патч в альте, который исправляет проблему. 
Comment 12 Boris Savelev 2009-10-20 22:28:45 MSD
postgresql-8.3eter-8.3.7-alt5.src.rpm