Re: MemoryContextAlloc: invalid request size 1934906735 - Mailing list pgsql-hackers

From D'Arcy J.M. Cain
Subject Re: MemoryContextAlloc: invalid request size 1934906735
Date
Msg-id 20020829024004.BD4561BB4@druid.net
Whole thread Raw
In response to Re: MemoryContextAlloc: invalid request size 1934906735  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: MemoryContextAlloc: invalid request size 1934906735
List pgsql-hackers
On August 28, 2002 09:23 am, Tom Lane wrote:
> The behavior looks a lot like a memory clobber, so perhaps the key
> variable is some difference in malloc's allocation strategy, causing
> two items to be adjacent in NetBSD where they are not on the other
> platforms we've tried.

Here's some other wackiness.  The following is various encrypted passwords 
split for convenience of analyzing them along with the hex version of the big 
number in the error.  The OK ones were ones that didn't trigger the error.  
The first line following that is the last byte in the number in hex and 
binary.  The next is the first character of the second chunk of the password. Note how the integer basically is the 4
bytesof the second chunk except for 
 
the first byte which differs in a somewhat regular way.  Looks like some sort 
of bit mask operation somewhere.

wvx8 42kQ 34jyY (OK)
0x34 00110100

Q/Jz mdRb HSwE. 0x62526471
0x71 01110001
0x6d 01101101

ccIx mriB VsviU 0x42697271
0x71 01110001
0x6d 01101101

wsnr TAub uIelw 0x62754158
0x58 01011000
0x54 01010100

tGep W3d5 EX5pU 0x3564335b
0x5b 01011011
0x57 01010111

gJTk uYzh fb3LM 0x687a5979
0x79 01111001
0x75 01110101

EfFt qWDL RgVjY 0x4c445775
0x75 01110101
0x71 01110001

My2J GCTv 8A3GI 0x7654434b
0x4b 01001011
0x47 01000111

uWPk 7xcQ ZpTi. 0x5163783b
0x3b 00111011
0x37 00110111

AlD5 naNP oDKdc (OK)
0x6e 01101110

>
> I eyeballed the chkpass code and didn't see any sign of buffer overruns,
> but maybe it needs a harder look.

Hmm.  I did give it a harder look and look what jumped out.  Both chkpass_out 
and chkpass_rout return PG_RETURN_CSTRING but chkpass_out builds a standard c 
string while chkpass_rout builds a variable text structure.  That can't be 
right.  It's odd that this always worked before.  It seems to me that 
chkpass_rout should be changed to build a c string like chkpass_out given the 
name of the return macro.  I tried that and it made no difference.  I'm not 
entirely surprised since I never used the chkpass_rout function in any of the 
tests.

Is it possible that my thinking is wrong and I should be creating a text type 
for both?

Still doesn't explain why no one else sees this though.

Oh, one more datapoint - the error only happens on vacuum analyze, not just 
vacuum.  Not sure what that means exactly.

-- 
D'Arcy J.M. Cain <darcy@{druid|vex}.net>   |  Democracy is three wolves
http://www.druid.net/darcy/                |  and a sheep voting on
+1 416 425 1212     (DoD#0082)    (eNTP)   |  what's for dinner.


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Serious problem with my postgres
Next
From: "Christopher Kings-Lynne"
Date:
Subject: Postgres problems