Crash in accounting code: encode_long(), due to bad rusage data?

Dan Nelson dnelson at allantgroup.com
Sun Aug 19 19:47:07 PDT 2007


In the last episode (Aug 19), Jeff Roberson said:
> On Sun, 19 Aug 2007, Robert Watson wrote:
>> Diomidis, Jeff, Attilio,
>> 
>> I recently upgraded two servers from FreeBSD 6-STABLE to FreeBSD
>> 7-CURRENT in anticipation of the forthcoming release.  Both of them
>> run with accounting enabled at all times.  When a large pine session
>> was exiting on one of the two boxes, I ran into the following panic:
>> 
>> panic: encode_long: -ve value -32749
[..]
>> (kgdb) up
>> #10 0xc0719dc2 in acct_process (td=0xc4a76400)
>>    at /usr/src/sys/kern/kern_acct.c:391
>> 391                     acct.ac_mem = encode_long((ru.ru_ixrss + 
>> ru.ru_idrss
> 
>      ru_idrss     an integral value of the amount of unshared memory
>                   residing in the data segment of a process
>                   (expressed in units of kilobytes *
>                   ticks-of-execution).
> 
> That seems like it's pretty prone to overflow given that this is a 32bit 
> machine.  This may just be an improper assert.  I'm shocked that noone has 
> run into this so far.

You'll also hit this any time you get a "calcru: runtime went
backwards" which on some machines is very frequent.  I disabled the
panic as doon as I upgraded to 7  :)

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-current mailing list