Re: postgresql-server exiting abnormally after an OS upgrade

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: postgresql-server exiting abnormally after an OS upgrade
Дата
Msg-id 16513.1424120138@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: postgresql-server exiting abnormally after an OS upgrade  (Hugo Osvaldo Barrera <hugo@barrera.io>)
Ответы Re: postgresql-server exiting abnormally after an OS upgrade
Список pgsql-bugs
Hugo Osvaldo Barrera <hugo@barrera.io> writes:
> On 2015-02-13 15:29, Heikki Linnakangas wrote:
>> Can you get a core dump and a stack trace from it?

> It certainly took me a bit, but, with some help, I managed to get one:

>   (gdb) bt
>   #0  0x0000110a2815b92a in kill () at <stdin>:2
>   #1  0x0000110a28195119 in abort () at /usr/src/lib/libc/stdlib/abort.c:53
>   #2  0x0000110a2816a238 in memcpy (dst0=0xfb8d4, src0=0x6, length=0) at /usr/src/lib/libc/string/memcpy.c:65
>   #3  0x000011080cf8d1b1 in check_ip (raddr=0x110a899f7918, addr=0x110a899f9058, mask=0x110a899f9158) at hba.c:704
>   #4  0x000011080cf90a04 in check_hba (port=0x110a899f7800) at hba.c:1718

Huh.  You didn't say whether this is 9.3 or 9.4, but it doesn't matter
because that code is the same in both; the crash is happening here:

static bool
check_ip(SockAddr *raddr, struct sockaddr * addr, struct sockaddr * mask)
{
    ...
        /*
         * If we're connected on IPv6 but the file specifies an IPv4 address
         * to match against, promote the latter to an IPv6 address before
         * trying to match the client's address.
         */
        struct sockaddr_storage addrcopy,
                    maskcopy;

        memcpy(&addrcopy, &addr, sizeof(addrcopy));
--->    memcpy(&maskcopy, &mask, sizeof(maskcopy));

Looking at this, the code seems wrong on its face: the memcpy sources
should be "addr" and "mask", not "&addr" and "&mask".  Apparently, no one
has ever used or tested this case since it was put in :-(.  I find that
a bit astonishing given the steady creep of IPv6 support, but it's hard
to see how the code could possibly work correctly as-is.

Probably the reason why this was triggered by an OS upgrade is that your
system is now choosing to make the DB connection over IPv6 not IPv4.
Or maybe it was doing that right along but you now have a memcpy that is
doing more checking of its arguments than before (this is evidently an
argument sanity check and not a straight SIGSEGV).

Anyway you could work around it for now by being sure to list IPv6
equivalent addresses before IPv4 addresses in your pg_hba.conf.
We'll fix it properly in the next releases.

            regards, tom lane

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Hugo Osvaldo Barrera
Дата:
Сообщение: Re: postgresql-server exiting abnormally after an OS upgrade
Следующее
От: Hugo Osvaldo Barrera
Дата:
Сообщение: Re: postgresql-server exiting abnormally after an OS upgrade