hash_create(nelem = 0) does invalid memory accesses

Поиск
Список
Период
Сортировка
От Andres Freund
Тема hash_create(nelem = 0) does invalid memory accesses
Дата
Msg-id 20160927232449.m4xm4kvkgyiqmx53@alap3.anarazel.de
обсуждение исходный текст
Ответы Re: hash_create(nelem = 0) does invalid memory accesses  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Hi,

debugging a citus valgrind bleat I noticed that hash_create() accesses
the result of palloc(0) as an hash element:
HTAB *
hash_create(const char *tabname, long nelem, HASHCTL *info, int flags)
{
...if ((flags & HASH_SHARED_MEM) ||    nelem < hctl->nelem_alloc){    if (!element_alloc(hashp, (int) nelem))
ereport(ERROR,               (errcode(ERRCODE_OUT_OF_MEMORY),                 errmsg("out of memory")));}
 
...}

I.e. e call element_alloc with nelem = 0. There we then do:
static bool
element_alloc(HTAB *hashp, int nelem)
{
...firstElement = (HASHELEMENT *) hashp->alloc(nelem * elementSize);
...firstElement->link = hctlv->freeList;
}

which means we'll write to the result of palloc(0).

Do we consider this an API usage error that we want to fix?

Greetings,

Andres Freund



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

Предыдущее
От: Greg Stark
Дата:
Сообщение: Re: LLVM Address Sanitizer (ASAN) and valgrind support
Следующее
От: Andres Freund
Дата:
Сообщение: Re: LLVM Address Sanitizer (ASAN) and valgrind support