Re: [PATCH] Fix crash in int8_avg_combine().

From: Andres Freund <andres(at)citusdata(dot)com>
To: Hadi Moshayedi <hadi(at)moshayedi(dot)net>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Ozgun Erdogan <ozgun(at)citusdata(dot)com>, Sumedh Pathak <sumedh(at)citusdata(dot)com>
Subject: Re: [PATCH] Fix crash in int8_avg_combine().
Date: 2017-11-26 03:47:08
Message-ID: 20171126034708.g7kzc3gddmppljuo@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi Hadi,

On 2017-11-25 22:43:49 -0500, Hadi Moshayedi wrote:
> While doing some tests on REL_10_STABLE, I was getting run-time exceptions
> at int8_avg_combine() at the following line:
>
> state1->sumX = state2->sumX;
>
> After some debugging, I noticed that palloc()’s alignment is 8-bytes, while
> this statement (which moves a __int128 from one memory location to another
> memory location) expects 16-byte memory alignments. So when either state1
> or state2 is not 16-byte aligned, this crashes.
>
> When I disassemble the code, the above statement is translated to a pair of
> movdqa and movaps assignments when compiled with -O2:
>
> movdqa c(%rdx), %xmm0
> movaps %xmm0, c(%rcx)
>
> Looking at “Intel 64 and IA-32 Architectures Software Developer’s Manual,
> Volume 2”, both of these instructions expect 16-byte aligned memory
> locations, or a general-protection exception will be generated.

Nicely analyzed. [Un]fortunately the bug has already been found and
fixed:
https://git.postgresql.org/pg/commitdiff/619a8c47da7279c186bb57cc16b26ad011366b73

Will be included in the next set of back branch releases.

> diff --git a/src/include/utils/memutils.h b/src/include/utils/memutils.h
> index 869c59dc85..2dc59e89cd 100644
> --- a/src/include/utils/memutils.h
> +++ b/src/include/utils/memutils.h
> @@ -189,7 +189,7 @@ extern MemoryContext SlabContextCreate(MemoryContext parent,
> * Few callers should be interested in this, but tuplesort/tuplestore need
> * to know it.
> */
> -#define ALLOCSET_SEPARATE_THRESHOLD 8192
> +#define ALLOCSET_SEPARATE_THRESHOLD 16384

Huh, what's that about in this context?

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2017-11-26 03:55:00 Re: [PATCH] Fix crash in int8_avg_combine().
Previous Message Hadi Moshayedi 2017-11-26 03:43:49 [PATCH] Fix crash in int8_avg_combine().