Incorrect _Kmax value

Aleksandr Platonov pam@oktetlabs.ru
Fri Feb 11 14:51:00 GMT 2011


On Thu, 2011-02-10 at 18:32 +0100, Corinna Vinschen wrote:
> On Feb 10 19:04, Aleksandr Platonov wrote:
> > Hi,
> > _Kmax is defined as (sizeof (size_t) << 3) and means the maximum
index
> > value of _REENT->_freelist array.
> > If the size of size_t is equal to 4 then Balloc(prt, _Kmax - 1) call
> > sets _maxwds to negative value. Balloc(ptr, _Kmax) call allocates
memory
> > for sizeof (_Bigint) - sizeof(rv->_x) bytes and sets _maxwds to 0.
> 
> When, where and why should this happen?
I do not know when Balloc() could be called with k parameter equal to 31
or 32. But if this should *not* happen then why do we allocate 33 (_Kmax
+ 1) _Bigint pointers for _REENT->_freelist array at the first Balloc()
call? In this case the last two elements of _REENT->_freelist will be
unused.
And if this could happen then Balloc() works incorrect as I described at
the first message.

> The definitions and the code in question is BSD code which is used,
> for instance, in NetBSD as well.  The definition of _Kmax is the
> same, too.
> 
> > So, it seems that _Kmax value is too big and should be (sizeof
(size_t)
> > << 3) - 2 or less.
> 
> Please provide a simple testcase which allows to reproduce the 
> problem.
> 
> 
> Thanks,
> Corinna
> 
-- 
Aleksandr Platonov



More information about the Newlib mailing list