Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 4197 - buffer overflow x86_64   Make a simular bug
Summary: buffer overflow x86_64
Status: CLOSED FIXED
Alias: None
Product: Postgres@Etersoft
Classification: Продукты (Products)
Component: пакеты (show other bugs)
Version: не указана
Hardware: PC All
: P4 major
Target Milestone: ---
Assignee: Boris Savelev
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 4030
  Show dependency treegraph
 
In work:
Reported: 2009-08-06 14:43 MSD by Andrey Chichak
Modified: 2010-01-29 19:19 MSK (History)
3 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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