[devel] Ошибка выделения памяти в malloc в 32-х битной архитектуре

Dmitry V. Levin ldv на altlinux.org
Сб Июл 25 12:53:37 MSK 2015


On Sat, Jul 25, 2015 at 06:17:28AM +0300, Hihin Ruslan wrote:
> Здравствуйте !
> 
> Разбираясь с тем, почему происходит выпадение в core 32-битной 
> версии palemoon, пришёл к выводу, что падение происходит в 
> функции malloc, а именно на этом участке кода (файл malloc.c из 
> glibc-core):
> 
> Вызов из palemoon:
>  options = malloc (sizeof (cairo_font_options_t));
> 
> Код malloc.c:
> стр 3350
>   if (in_smallbin_range(nb)) {
>     idx = smallbin_index(nb);
>     bin = bin_at(av,idx);
> 
>     if ( (victim = last(bin)) != bin) {
>       if (victim == 0) /* initialization check */
> 	malloc_consolidate(av);
>       else {
> 	bck = victim->bk;
> ===> (стр 3359)	if (__builtin_expect (bck->fd != victim, 0))
> 	  {
> 	    errstr = "malloc(): smallbin double linked list corrupted";
> 	    goto errout;
> 	  }
> 	set_inuse_bit_at_offset(victim, nb);
> 	bin->bk = bck;
> 	bck->fd = bin;
> 
> 	if (av != &main_arena)
> 	  victim->size |= NON_MAIN_ARENA;
> 	check_malloced_chunk(av, victim, nb);
> 	void *p = chunk2mem(victim);
> 	if (__builtin_expect (perturb_byte, 0))
> 	  alloc_perturb (p, bytes);
> 	return p;
>       }
>     }
> 
> А именно, судя по всему в victim->bk находится 0, и bck->fd 
> превращается в null->fd.
> 
> Это глюк malloc, или неправильное обращение от palemoon?
> Мне всё-же кажется, что самого glibc.

Если у вас memory corruption, то glibc -- это последнее место,
которое стоит проверять.

Есть разные средства отладки, проверьте сперва ими.  Начните с valgrind.


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 181 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20150725/6fd02694/attachment.bin>


Подробная информация о списке рассылки Devel