Обсуждение: Bug Report with Postgres 7.4 on AIX 5.3
Dear Support,
We try to install Postgres 7.4 on AIX 5.3 (IBM,9111-520).
The compilation is good and we are able to start the postmaster.
When we try to start the psql we got the following error :
FATAL: unsupported frontend protocol 0.0: server supports 1.0 to 3.0
We run the psql under the AIX debugger dbx and our conclusions are the
following :
In the file fe-connect.c we try to copy a area of 1025 in the
conn->raddr.addr area but the size of that area is only 144.
The result is a corruption of the pg_conn structure
+1175 /* Remember current address
for possible error msg */
+1176 memcpy(&conn->raddr.addr,
addr_cur->ai_addr,
+1177
addr_cur->ai_addrlen);
The addr_cur->ai_addrlen is set with the sizeof(struct sockaddr_un) in the
file ip.c.
In the file libpq-int.h the structure pg_conn contains 2 fields SockAddr
* PGconn stores all the state data associated with a single connection
* to a backend.
*/
struct pg_conn
{
...
SockAddr laddr; /* Local address */
SockAddr raddr;
...
}
The structure SockAddr is defined in the file pqcomm.h
typedef struct
{
struct sockaddr_storage addr;
ACCEPT_TYPE_ARG3 salen;
} SockAddr;
On Our AIX 5.3 the sockaddr_un is defined in the file /usr/include/sys/un.h
#if defined(COMPAT_43) && !defined(_KERNEL)
struct sockaddr_un {
ushort_t sun_family; /* AF_UNIX */
char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
support long user names */
};
#else
struct sockaddr_un {
uchar_t sun_len; /* sockaddr len including null */
sa_family_t sun_family; /* AF_UNIX */
char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
support long user names */
};
#endif /* COMPAT_43 && !_KERNEL */
PATH_MAX is defined in the file /usr/include/sys/limits.h
#if _POSIX_C_SOURCE >= 200112L && !(defined _ALL_SOURCE) ||
defined(_PATHMAX_HAS_NULL)
#define PATH_MAX 1024 /* max number of bytes in a
pathname.
includes a terminating null */
#else
#define PATH_MAX 1023
#endif
In our platform the sizeof of struct sockaddr_un is 1025 and the sizeof of
SockAddr is 144.
In conclusion the instructions done in the function PQconnectPoll cause a
memory overflow !!!
+1175 /* Remember current address
for possible error msg */
+1176 memcpy(&conn->raddr.addr,
addr_cur->ai_addr,
+1177
addr_cur->ai_addrlen);
Are you aware about this problem ?
Could you give us a way to solve the problem ?
Kind Regards,
Vincent Vanwynsberghe
Vincent,
1) I am having the exact same problem: I cannot even do a CREATEDB in 8.0.2 on AIX5.3
2) You sent your mail to the PG lists, but not to IBM, possibly?
3) If you think it will help, I can call support as well.
If you get ANY word on this, whether a fix, a tweak, or a workaround, please Please PLEASE
post to the list rapidly.
We're dead in the water on this and the IT environment around here is such that if I can't
get PG working on AIX, it'll be marked for death. And I really wanted to start
using PG around here.
Thanks!!!!!
-- Ross Mohan
-----Original Message-----
From: pgsql-ports-owner@postgresql.org [mailto:pgsql-ports-owner@postgresql.org] On Behalf Of Vincent Vanwynsberghe
Sent: Tuesday, May 10, 2005 4:08 AM
To: pgsql-ports@postgresql.org; pgsql-bugs@postgresql.org
Subject: [PORTS] Bug Report with Postgres 7.4 on AIX 5.3
Dear Support,
We try to install Postgres 7.4 on AIX 5.3 (IBM,9111-520).
The compilation is good and we are able to start the postmaster. When we try to start the psql we got the following
error:
FATAL: unsupported frontend protocol 0.0: server supports 1.0 to 3.0
We run the psql under the AIX debugger dbx and our conclusions are the following :
In the file fe-connect.c we try to copy a area of 1025 in the
conn->raddr.addr area but the size of that area is only 144.
The result is a corruption of the pg_conn structure
+1175 /* Remember current address
for possible error msg */
+1176 memcpy(&conn->raddr.addr,
addr_cur->ai_addr,
+1177
addr_cur->ai_addrlen);
The addr_cur->ai_addrlen is set with the sizeof(struct sockaddr_un) in the file ip.c.
In the file libpq-int.h the structure pg_conn contains 2 fields SockAddr
* PGconn stores all the state data associated with a single connection
* to a backend.
*/
struct pg_conn
{
...
SockAddr laddr; /* Local address */
SockAddr raddr;
...
}
The structure SockAddr is defined in the file pqcomm.h
typedef struct
{
struct sockaddr_storage addr;
ACCEPT_TYPE_ARG3 salen;
} SockAddr;
On Our AIX 5.3 the sockaddr_un is defined in the file /usr/include/sys/un.h
#if defined(COMPAT_43) && !defined(_KERNEL)
struct sockaddr_un {
ushort_t sun_family; /* AF_UNIX */
char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
support long user names */
};
#else
struct sockaddr_un {
uchar_t sun_len; /* sockaddr len including null */
sa_family_t sun_family; /* AF_UNIX */
char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
support long user names */
};
#endif /* COMPAT_43 && !_KERNEL */
PATH_MAX is defined in the file /usr/include/sys/limits.h
#if _POSIX_C_SOURCE >= 200112L && !(defined _ALL_SOURCE) ||
defined(_PATHMAX_HAS_NULL)
#define PATH_MAX 1024 /* max number of bytes in a
pathname.
includes a terminating null */ #else
#define PATH_MAX 1023
#endif
In our platform the sizeof of struct sockaddr_un is 1025 and the sizeof of SockAddr is 144. In conclusion the
instructionsdone in the function PQconnectPoll cause a memory overflow !!!
+1175 /* Remember current address
for possible error msg */
+1176 memcpy(&conn->raddr.addr,
addr_cur->ai_addr,
+1177
addr_cur->ai_addrlen);
Are you aware about this problem ?
Could you give us a way to solve the problem ?
Kind Regards,
Vincent Vanwynsberghe
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings
Vincent,
Thanks for this, I'll run this by our SAs. Should
be funny to watch their reaction.
Meanwhile, I've requested that we file a bug w/IBM
as well.
Thanks again for sharing your information!
-- Ross Mohan
-----Original Message-----
From: Vincent Vanwynsberghe [mailto:vvanwynsberghe@ccncsi.net]
Sent: Thu 5/19/2005 8:49 AM
To: pgsql-ports@postgresql.org; pgsql-bugs@postgresql.org
Cc: Mohan, Ross
Subject: RE: [PORTS] Bug Report with Postgres 7.4 on AIX 5.3
Hi,
We opened a call to IBM also, but until now we didn't receive anything (see
the attached mail).
In order to take into account the RFC 3943, we find a way to fixed the
problem by modifying the file socket.h :
#define _SS_MAXSIZE 128 /* Implementation specific max size */
SHOULD BE REPLACED BY
#define _SS_MAXSIZE (sizeof(struct sockaddr_un)) /* Implementation
specific max size */
With this modification, Postgres 7.4 run on AIX5.3.
This is really an AIX problem.
An other's proposal done by Bull (our provider of the AIX system) is the
following :
Reduce the size of the field sun_path in the structure sockaddr_un (un.h)
and not increase the size of the structure sockaddr_storage.
char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to support
long user names */
SHOULD BE REPLACED BY
char sun_path[104]; /* changed from 104 to PATH_MAX to support long
user names */
With this modification, Postgres 7.4 run also on AIX5.3.
Both modification can have an impact on the AIX5.3 OS and IBM should be
confirm if a fixed is needed for that problem ?
Kind Regards,
Vincent Vanwynsberghe
> -----Original Message-----
> From: Mohan, Ross [mailto:RMohan@arbinet.com]
> Sent: jeudi 19 mai 2005 2:23
> To: vvanwynsberghe@ccncsi.net
> Subject: RE: [PORTS] Bug Report with Postgres 7.4 on AIX 5.3
>
>
> Vincent,
>
> 1) I am having the exact same problem: I cannot even do a
> CREATEDB in 8.0.2 on AIX5.3
>
> 2) You sent your mail to the PG lists, but not to IBM, possibly?
>
> 3) If you think it will help, I can call support as well.
>
>
>
> If you get ANY word on this, whether a fix, a tweak, or a
> workaround, please Please PLEASE
> post to the list rapidly.
>
> We're dead in the water on this and the IT environment around
> here is such that if I can't
> get PG working on AIX, it'll be marked for death. And I really
> wanted to start
> using PG around here.
>
> Thanks!!!!!
>
>
> -- Ross Mohan
>
>
>
> -----Original Message-----
> From: pgsql-ports-owner@postgresql.org
> [mailto:pgsql-ports-owner@postgresql.org] On Behalf Of Vincent
> Vanwynsberghe
> Sent: Tuesday, May 10, 2005 4:08 AM
> To: pgsql-ports@postgresql.org; pgsql-bugs@postgresql.org
> Subject: [PORTS] Bug Report with Postgres 7.4 on AIX 5.3
>
>
> Dear Support,
>
> We try to install Postgres 7.4 on AIX 5.3 (IBM,9111-520).
> The compilation is good and we are able to start the postmaster.
> When we try to start the psql we got the following error :
> FATAL: unsupported frontend protocol 0.0: server supports 1.0 to 3.0
>
> We run the psql under the AIX debugger dbx and our conclusions
> are the following :
>
> In the file fe-connect.c we try to copy a area of 1025 in the
> conn->raddr.addr area but the size of that area is only 144.
> The result is a corruption of the pg_conn structure
>
> +1175 /* Remember
> current address
> for possible error msg */
> +1176 memcpy(&conn->raddr.addr,
> addr_cur->ai_addr,
> +1177
> addr_cur->ai_addrlen);
>
>
> The addr_cur->ai_addrlen is set with the sizeof(struct
> sockaddr_un) in the file ip.c.
>
> In the file libpq-int.h the structure pg_conn contains 2 fields SockAddr
> * PGconn stores all the state data associated with a single connection
> * to a backend.
> */
> struct pg_conn
> {
> ...
> SockAddr laddr; /* Local address */
> SockAddr raddr;
> ...
> }
>
> The structure SockAddr is defined in the file pqcomm.h
>
> typedef struct
> {
> struct sockaddr_storage addr;
> ACCEPT_TYPE_ARG3 salen;
> } SockAddr;
>
>
> On Our AIX 5.3 the sockaddr_un is defined in the file
> /usr/include/sys/un.h
>
> #if defined(COMPAT_43) && !defined(_KERNEL)
> struct sockaddr_un {
> ushort_t sun_family; /* AF_UNIX */
> char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
> support long user names */
> };
> #else
> struct sockaddr_un {
> uchar_t sun_len; /* sockaddr len including null */
> sa_family_t sun_family; /* AF_UNIX */
> char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
> support long user names */
> };
> #endif /* COMPAT_43 && !_KERNEL */
>
> PATH_MAX is defined in the file /usr/include/sys/limits.h
>
> #if _POSIX_C_SOURCE >= 200112L && !(defined _ALL_SOURCE) ||
> defined(_PATHMAX_HAS_NULL)
> #define PATH_MAX 1024 /* max number of bytes in a
> pathname.
> includes a terminating
> null */ #else
> #define PATH_MAX 1023
> #endif
>
> In our platform the sizeof of struct sockaddr_un is 1025 and the
> sizeof of SockAddr is 144. In conclusion the instructions done in
> the function PQconnectPoll cause a memory overflow !!!
>
> +1175 /* Remember current address
> for possible error msg */
> +1176 memcpy(&conn->raddr.addr,
> addr_cur->ai_addr,
> +1177
> addr_cur->ai_addrlen);
>
> Are you aware about this problem ?
> Could you give us a way to solve the problem ?
>
> Kind Regards,
> Vincent Vanwynsberghe
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I've begun the escalation process for this issue with our IBM account
rep. I'll post the APAR number for this issue to the list when I have one.
- --
Andrew Hammond 416-673-4138 ahammond@ca.afilias.info
Database Administrator, Afilias Canada Corp.
CB83 2838 4B67 D40F D086 3568 81FC E7E5 27AF 4A9A
Mohan, Ross wrote:
> Vincent,
>
> Thanks for this, I'll run this by our SAs. Should
> be funny to watch their reaction.
>
> Meanwhile, I've requested that we file a bug w/IBM
> as well.
>
> Thanks again for sharing your information!
>
> -- Ross Mohan
>
>
> -----Original Message-----
> From: Vincent Vanwynsberghe [mailto:vvanwynsberghe@ccncsi.net]
> Sent: Thu 5/19/2005 8:49 AM
> To: pgsql-ports@postgresql.org; pgsql-bugs@postgresql.org
> Cc: Mohan, Ross
> Subject: RE: [PORTS] Bug Report with Postgres 7.4 on AIX 5.3
> Hi,
>
> We opened a call to IBM also, but until now we didn't receive anything (see
> the attached mail).
> In order to take into account the RFC 3943, we find a way to fixed the
> problem by modifying the file socket.h :
>
> #define _SS_MAXSIZE 128 /* Implementation specific max size */
>
> SHOULD BE REPLACED BY
>
> #define _SS_MAXSIZE (sizeof(struct sockaddr_un)) /* Implementation
> specific max size */
>
> With this modification, Postgres 7.4 run on AIX5.3.
> This is really an AIX problem.
>
> An other's proposal done by Bull (our provider of the AIX system) is the
> following :
> Reduce the size of the field sun_path in the structure sockaddr_un (un.h)
> and not increase the size of the structure sockaddr_storage.
>
> char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to support
> long user names */
>
> SHOULD BE REPLACED BY
>
> char sun_path[104]; /* changed from 104 to PATH_MAX to support long
> user names */
>
> With this modification, Postgres 7.4 run also on AIX5.3.
>
> Both modification can have an impact on the AIX5.3 OS and IBM should be
> confirm if a fixed is needed for that problem ?
>
> Kind Regards,
> Vincent Vanwynsberghe
>
>
>>-----Original Message-----
>>From: Mohan, Ross [mailto:RMohan@arbinet.com]
>>Sent: jeudi 19 mai 2005 2:23
>>To: vvanwynsberghe@ccncsi.net
>>Subject: RE: [PORTS] Bug Report with Postgres 7.4 on AIX 5.3
>>
>>
>>Vincent,
>>
>>1) I am having the exact same problem: I cannot even do a
>>CREATEDB in 8.0.2 on AIX5.3
>>
>>2) You sent your mail to the PG lists, but not to IBM, possibly?
>>
>>3) If you think it will help, I can call support as well.
>>
>>
>>
>>If you get ANY word on this, whether a fix, a tweak, or a
>>workaround, please Please PLEASE
>>post to the list rapidly.
>>
>>We're dead in the water on this and the IT environment around
>>here is such that if I can't
>>get PG working on AIX, it'll be marked for death. And I really
>>wanted to start
>>using PG around here.
>>
>>Thanks!!!!!
>>
>>
>>-- Ross Mohan
>>
>>
>>
>>-----Original Message-----
>>From: pgsql-ports-owner@postgresql.org
>>[mailto:pgsql-ports-owner@postgresql.org] On Behalf Of Vincent
>>Vanwynsberghe
>>Sent: Tuesday, May 10, 2005 4:08 AM
>>To: pgsql-ports@postgresql.org; pgsql-bugs@postgresql.org
>>Subject: [PORTS] Bug Report with Postgres 7.4 on AIX 5.3
>>
>>
>>Dear Support,
>>
>>We try to install Postgres 7.4 on AIX 5.3 (IBM,9111-520).
>>The compilation is good and we are able to start the postmaster.
>>When we try to start the psql we got the following error :
>>FATAL: unsupported frontend protocol 0.0: server supports 1.0 to 3.0
>>
>>We run the psql under the AIX debugger dbx and our conclusions
>>are the following :
>>
>>In the file fe-connect.c we try to copy a area of 1025 in the
>>conn->raddr.addr area but the size of that area is only 144.
>>The result is a corruption of the pg_conn structure
>>
>> +1175 /* Remember
>>current address
>>for possible error msg */
>> +1176 memcpy(&conn->raddr.addr,
>>addr_cur->ai_addr,
>> +1177
>>addr_cur->ai_addrlen);
>>
>>
>>The addr_cur->ai_addrlen is set with the sizeof(struct
>>sockaddr_un) in the file ip.c.
>>
>>In the file libpq-int.h the structure pg_conn contains 2 fields SockAddr
>> * PGconn stores all the state data associated with a single connection
>> * to a backend.
>> */
>>struct pg_conn
>>{
>>...
>> SockAddr laddr; /* Local address */
>> SockAddr raddr;
>>...
>>}
>>
>>The structure SockAddr is defined in the file pqcomm.h
>>
>>typedef struct
>>{
>> struct sockaddr_storage addr;
>> ACCEPT_TYPE_ARG3 salen;
>>} SockAddr;
>>
>>
>>On Our AIX 5.3 the sockaddr_un is defined in the file
>>/usr/include/sys/un.h
>>
>>#if defined(COMPAT_43) && !defined(_KERNEL)
>>struct sockaddr_un {
>> ushort_t sun_family; /* AF_UNIX */
>> char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
>>support long user names */
>>};
>>#else
>>struct sockaddr_un {
>> uchar_t sun_len; /* sockaddr len including null */
>> sa_family_t sun_family; /* AF_UNIX */
>> char sun_path[PATH_MAX]; /* changed from 104 to PATH_MAX to
>>support long user names */
>>};
>>#endif /* COMPAT_43 && !_KERNEL */
>>
>>PATH_MAX is defined in the file /usr/include/sys/limits.h
>>
>>#if _POSIX_C_SOURCE >= 200112L && !(defined _ALL_SOURCE) ||
>>defined(_PATHMAX_HAS_NULL)
>>#define PATH_MAX 1024 /* max number of bytes in a
>>pathname.
>> includes a terminating
>>null */ #else
>>#define PATH_MAX 1023
>>#endif
>>
>>In our platform the sizeof of struct sockaddr_un is 1025 and the
>>sizeof of SockAddr is 144. In conclusion the instructions done in
>>the function PQconnectPoll cause a memory overflow !!!
>>
>>+1175 /* Remember current address
>>for possible error msg */
>>+1176 memcpy(&conn->raddr.addr,
>>addr_cur->ai_addr,
>>+1177
>>addr_cur->ai_addrlen);
>>
>>Are you aware about this problem ?
>>Could you give us a way to solve the problem ?
>>
>>Kind Regards,
>>Vincent Vanwynsberghe
>>
>>
>>---------------------------(end of broadcast)---------------------------
>>TIP 7: don't forget to increase your free space map settings
>
>
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCk12ugfzn5SevSpoRAqpNAJ9OFKLh1NUR54GtiPYdm+mnWxUJpACfWd19
SQo+oU/CN/b4fi13hGqHovg=
=rg8x
-----END PGP SIGNATURE-----