LINUX.ORG.RU

[sparc] SIGBUS

 


0

1
> ::status
debugging core file of dif100c1 (64-bit) from localhost
file: /blah/file
initial argv: file 2 016 202
threading model: multi-threaded
status: process terminated by SIGBUS (Bus Error)
> ::stack
libc.so.1`realfree+0x70(ffffffff7fffddf8, 57, 1d9d08, 54, ffffffff7ef3c000, ffffffff7fffdde8)
libc.so.1`cleanfree+0x68(0, 1d939c, ffffffff7ef4cac8, 0, ffffffff7ef3c000, ffffffff7ef4cbc8)
libc.so.1`_malloc_unlocked+0x10c(10, 0, 0, ffffffff7ef3c000, 0, 0)
libc.so.1`malloc+0x5c(9, 2390, 1da460, 0, ffffffff7ef3c000, 2000)
get_response+0x74(10010fe28, 10010fe28, 0, 0, 0, 0)
send_to_sic+0x50(100174480, 7fffffff, 7ffffc00, 10010e672, 10010e676, 45)
main+0x1218(10010e68c, 10010e694, 10010e6a6, 10010e6ae, 10010e6b2, 10010e6b6)
_start+0x17c(0, 0, 0, 0, 0, 0)
>


int get_response( CONPARAM *at_conparamp)
{
  int  wi_bytes=0;
  char *sic_resp;
  char record_receive[2048];            /* Read the max by record */
  char wc_sic_resp_len[5]="";
  int  wi_siclen;
  int  wi_ind;

        sigset(SIGALRM,sighand);
        alarm(gi_sic_timeout);
        if ((sic_resp=(char *)malloc(9))==(char *)NULL)
        {
                sml_write_log("%s: ERROR: Failed to allocate memory for SCAM reply msg",IDSMLIFA);
                return 1;
        }

Но. malloc() же должен по идее всегда возвращать aligned память и сигбас возникать не должно? это баг в libc? //код не мой

★★★★★

malloc ничего не должен. Просто так сложилось, что большинство реализаций это делают. Юзай posix_memalign.

anonymous
()

7.20.3 Memory management functions

The pointer returned if the allocation succeeds is suitably aligned so that it may be assigned to a pointer to any type of object

ratvier ★★
()
Ответ на: комментарий от anonymous

попробую. но все равно не понятно, почему SIGBUS я получаю *внутри* malloc()a, а не при первом обращении к незаэлайненой памяти.

val-amart ★★★★★
() автор топика
Ответ на: комментарий от val-amart

> попробую

Бесполезняк, ИМХО. Там же в стектрейсе «_malloc_unlocked+0x10c(10», т.е. значение округлено (не до кратного 8, но реализации виднее).

Еслии учесть, что падает оно в функции с говорящим именем «realfree», скорее всего, тупо запорчена память.

незаэлайненой

«Невыровненной», епт.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

это происходит на двух системах в продакшн кластере, с одинаковыми крешдампами. не думаю, что дело в железе.

может быть все-таки баг libc? стоит создать тикет в Сан^wОракл?

val-amart ★★★★★
() автор топика
Ответ на: комментарий от val-amart

> может быть все-таки баг libc? стоит создать тикет в Сан^wОракл?

Всё может быть, но, если это баг в libc, он должен быть легко воспроизводим или должен уйти, если вместо 9 заказать 16 (например) байт. Я склоняюсь к мнению, что это баг в приложении.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

более чем возможно.

очень хотелось бы хинтов что именно это может быть, что искать, и каким образом это может вызывать сигбас в либц...

val-amart ★★★★★
() автор топика
Ответ на: комментарий от val-amart

> очень хотелось бы хинтов что именно это может быть, что искать

Здесь скорее вопрос «как». Есть какие-нибудь функции валидации кучи? Отладчики памяти?

каким образом это может вызывать сигбас в либц...

use after free переписывает, например, указатель на блок свободной памяти нечетным числом. Или банальный выход за грницу массива.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

если бы я знал. валидации кучи не выполняется; есть mdb но я все равно ничего путевого в нем сделать не смогу. чего-то типа валгринда под соляру нет афаик.

val-amart ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

тот, который от IBM? он слишком неразумно дорог увы

val-amart ★★★★★
() автор топика
Ответ на: комментарий от Yareg

ээ, нет. это самописный софт под соляру. непортируем.

val-amart ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.