Thread: GSSAPI on Solaris - psql segfault

GSSAPI on Solaris - psql segfault

From
Stefan Kaltenbrunner
Date:
I just took a look at adding gssapi build support on solaris (solaris
10/x86_64, sun studio 10, 64bit build) which seemed easy enough by
educating configure to look for -lgss but while it compiles just fine
the resulting tree will not be able to complete a make check due to
psql(!) segfaulting as soon as it tries to connect to the backend.

the backtrace looks similiar to:


program terminated by signal SEGV (no mapping at the fault address)
0x00007fffffd3d401: _memcpy+0x00e1:     movq     %rax,(%rdi)
Current function is pqPutMsgBytes 475           memcpy(conn->outBuffer + conn->outMsgEnd, buf, len);
(dbx) where [1] _memcpy(0x4, 0x4709a0, 0x67, 0x2, 0x646c697562677000,
0x7361626174616400), at 0x7fffffd3d401
=>[2] pqPutMsgBytes(buf = 0x4709a0, len = 103U, conn = 0x4682f0), line
475 in "fe-misc.c" [3] pqPutnchar(s = 0x4709a0 "", len = 103U, conn = 0x4682f0), line 189
in "fe-misc.c" [4] pqPacketSend(conn = 0x4682f0, pack_type = '\0', buf = 0x4709a0,
buf_len = 103U), line 2439 in "fe-connect.c" [5] PQconnectPoll(conn = 0x4682f0), line 1299 in "fe-connect.c" [6]
connectDBComplete(conn= 0x4682f0), line 936 in "fe-connect.c" [7] PQsetdbLogin(pghost = (nil), pgport = (nil),
pgoptions= (nil),
 
pgtty = (nil), dbName = 0xfffffd7fffdffbeb "postgres", login = (nil),
pwd = (nil)), line 660 in "fe-connect.c" [8] main(argc = 3, argv = 0xfffffd7fffdff9b8), line 211 in "startup.c"


ideas ?


Stefan


Re: GSSAPI on Solaris - psql segfault

From
Bruce Momjian
Date:
Stefan Kaltenbrunner wrote:
> I just took a look at adding gssapi build support on solaris (solaris
> 10/x86_64, sun studio 10, 64bit build) which seemed easy enough by
> educating configure to look for -lgss but while it compiles just fine
> the resulting tree will not be able to complete a make check due to
> psql(!) segfaulting as soon as it tries to connect to the backend.

Can we add the segfault to the Solaris expected regression results?  ;-)

---------------------------------------------------------------------------


> 
> the backtrace looks similiar to:
> 
> 
> program terminated by signal SEGV (no mapping at the fault address)
> 0x00007fffffd3d401: _memcpy+0x00e1:     movq     %rax,(%rdi)
> Current function is pqPutMsgBytes
>   475           memcpy(conn->outBuffer + conn->outMsgEnd, buf, len);
> (dbx) where
>   [1] _memcpy(0x4, 0x4709a0, 0x67, 0x2, 0x646c697562677000,
> 0x7361626174616400), at 0x7fffffd3d401
> =>[2] pqPutMsgBytes(buf = 0x4709a0, len = 103U, conn = 0x4682f0), line
> 475 in "fe-misc.c"
>   [3] pqPutnchar(s = 0x4709a0 "", len = 103U, conn = 0x4682f0), line 189
> in "fe-misc.c"
>   [4] pqPacketSend(conn = 0x4682f0, pack_type = '\0', buf = 0x4709a0,
> buf_len = 103U), line 2439 in "fe-connect.c"
>   [5] PQconnectPoll(conn = 0x4682f0), line 1299 in "fe-connect.c"
>   [6] connectDBComplete(conn = 0x4682f0), line 936 in "fe-connect.c"
>   [7] PQsetdbLogin(pghost = (nil), pgport = (nil), pgoptions = (nil),
> pgtty = (nil), dbName = 0xfffffd7fffdffbeb "postgres", login = (nil),
> pwd = (nil)), line 660 in "fe-connect.c"
>   [8] main(argc = 3, argv = 0xfffffd7fffdff9b8), line 211 in "startup.c"
> 
> 
> ideas ?
> 
> 
> Stefan
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 7: You can help support the PostgreSQL project by donating at
> 
>                 http://www.postgresql.org/about/donate

--  Bruce Momjian  <bruce@momjian.us>          http://momjian.us EnterpriseDB
http://www.enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


Re: GSSAPI on Solaris - psql segfault

From
Zdenek Kotala
Date:
Stefan Kaltenbrunner wrote:
> I just took a look at adding gssapi build support on solaris (solaris
> 10/x86_64, sun studio 10, 64bit build) which seemed easy enough by
> educating configure to look for -lgss but while it compiles just fine
> the resulting tree will not be able to complete a make check due to
> psql(!) segfaulting as soon as it tries to connect to the backend.
> the backtrace looks similiar to:
> 
> 
> program terminated by signal SEGV (no mapping at the fault address)
> 0x00007fffffd3d401: _memcpy+0x00e1:     movq     %rax,(%rdi)
> Current function is pqPutMsgBytes
>   475           memcpy(conn->outBuffer + conn->outMsgEnd, buf, len);
> (dbx) where
>   [1] _memcpy(0x4, 0x4709a0, 0x67, 0x2, 0x646c697562677000,
> 0x7361626174616400), at 0x7fffffd3d401
> =>[2] pqPutMsgBytes(buf = 0x4709a0, len = 103U, conn = 0x4682f0), line
> 475 in "fe-misc.c"
>   [3] pqPutnchar(s = 0x4709a0 "", len = 103U, conn = 0x4682f0), line 189
> in "fe-misc.c"
>   [4] pqPacketSend(conn = 0x4682f0, pack_type = '\0', buf = 0x4709a0,
> buf_len = 103U), line 2439 in "fe-connect.c"
>   [5] PQconnectPoll(conn = 0x4682f0), line 1299 in "fe-connect.c"
>   [6] connectDBComplete(conn = 0x4682f0), line 936 in "fe-connect.c"
>   [7] PQsetdbLogin(pghost = (nil), pgport = (nil), pgoptions = (nil),
> pgtty = (nil), dbName = 0xfffffd7fffdffbeb "postgres", login = (nil),
> pwd = (nil)), line 660 in "fe-connect.c"
>   [8] main(argc = 3, argv = 0xfffffd7fffdff9b8), line 211 in "startup.c"
> 
> 
> ideas ?

Do you use also 64bit psql? Can you send me your ./configure setup? 
However, I see there potential integer overflow, because len is size_t 
and  conn->outMsgEnd is defined as int.
 Zdenek


Re: GSSAPI on Solaris - psql segfault

From
Stefan Kaltenbrunner
Date:
Zdenek Kotala wrote:
> Stefan Kaltenbrunner wrote:
>> I just took a look at adding gssapi build support on solaris (solaris
>> 10/x86_64, sun studio 10, 64bit build) which seemed easy enough by
>> educating configure to look for -lgss but while it compiles just fine
>> the resulting tree will not be able to complete a make check due to
>> psql(!) segfaulting as soon as it tries to connect to the backend.
>> the backtrace looks similiar to:
>>
>>
>> program terminated by signal SEGV (no mapping at the fault address)
>> 0x00007fffffd3d401: _memcpy+0x00e1:     movq     %rax,(%rdi)
>> Current function is pqPutMsgBytes
>>   475           memcpy(conn->outBuffer + conn->outMsgEnd, buf, len);
>> (dbx) where
>>   [1] _memcpy(0x4, 0x4709a0, 0x67, 0x2, 0x646c697562677000,
>> 0x7361626174616400), at 0x7fffffd3d401
>> =>[2] pqPutMsgBytes(buf = 0x4709a0, len = 103U, conn = 0x4682f0), line
>> 475 in "fe-misc.c"
>>   [3] pqPutnchar(s = 0x4709a0 "", len = 103U, conn = 0x4682f0), line 189
>> in "fe-misc.c"
>>   [4] pqPacketSend(conn = 0x4682f0, pack_type = '\0', buf = 0x4709a0,
>> buf_len = 103U), line 2439 in "fe-connect.c"
>>   [5] PQconnectPoll(conn = 0x4682f0), line 1299 in "fe-connect.c"
>>   [6] connectDBComplete(conn = 0x4682f0), line 936 in "fe-connect.c"
>>   [7] PQsetdbLogin(pghost = (nil), pgport = (nil), pgoptions = (nil),
>> pgtty = (nil), dbName = 0xfffffd7fffdffbeb "postgres", login = (nil),
>> pwd = (nil)), line 660 in "fe-connect.c"
>>   [8] main(argc = 3, argv = 0xfffffd7fffdff9b8), line 211 in "startup.c"
>>
>>
>> ideas ?
> 
> Do you use also 64bit psql? Can you send me your ./configure setup?
> However, I see there potential integer overflow, because len is size_t
> and  conn->outMsgEnd is defined as int.

yeah this is a full 64bit build - but I just did several fresh buildfarm
cycles and I'm unable to reproduce the issue again ...


Stefan