Bug 27505 - Начал крашиться на многих avi файлах
: Начал крашиться на многих avi файлах
Status: CLOSED FIXED
: Branch t6
(All bugs in Branch t6/libxine)
: не указана
: all Linux
: P3 critical
Assigned To:
:
: https://bugs.xine-project.org/show_bu...
:
:
:
  Show dependency tree
 
Reported: 2012-06-26 22:43 by
Modified: 2013-03-11 18:06 (History)


Attachments
Падение при проигрывании Тачки.2.2011 (1.26 KB, text/plain)
2012-06-27 21:00, Roman Savochenko
no flags Details
Падение при проигрывании Kak.priruchit.drakona.2010 (1.17 KB, text/plain)
2012-06-27 21:01, Roman Savochenko
no flags Details
Обход проблемы доступа за границу выделенной памяти (765 bytes, patch)
2013-03-08 19:40, Roman Savochenko
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2012-06-26 22:43:44
Начиная с версии libxine-1.1.21 появились краши при проигрывании многих avi.
Замечено было на kaffeine, однако таким-же образом падения замечены и на
xine-ui, на тех-же файлах.
------- Comment #1 From 2012-06-27 14:44:44 -------
Для начала было бы неплохо ссылку на пример или журнал отладки падения.
------- Comment #2 From 2012-06-27 15:49:33 -------
(В ответ на комментарий №1)
> Для начала было бы неплохо ссылку на пример или журнал отладки падения.
Вчера как раз готовил отчёт glibc о проблемах с памятью при вызове xine, когда
предыдущая проблема с kernel-3.0.35 + nvidia_glx_295.59 (27506), после вызова
ufoai, привела даже к падению иксов (неполному, скорее дрова NVidia заклинило).

Сегодня половлю и выделю файл с наиболее ярким проявлением этой проблемы.
Заодно проверю на Сизифе.
------- Comment #3 From 2012-06-27 19:46:19 -------
Я отправли на сборку новый libxine. Как-минимум у меня 1 непоказывавшийся avi
стал показываться.
------- Comment #4 From 2012-06-27 21:00:04 -------
Created an attachment (id=5499) [details]
Падение при проигрывании Тачки.2.2011

Файлы выкладывать не буду иначе с моего сервера прийдётся его грузить долго.
------- Comment #5 From 2012-06-27 21:01:57 -------
Created an attachment (id=5500) [details]
Падение при проигрывании Kak.priruchit.drakona.2010
------- Comment #6 From 2012-06-27 21:04:55 -------
Падения похожи хотя из kaffeine падение может ещё происходить в момент закрытия
потока xine, причём и в TDE и в KDE4.

В Сизифе падения замечаются тоже, хотя достаточно редко.
------- Comment #7 From 2012-06-28 11:57:51 -------
(В ответ на комментарий №4)
> Файлы выкладывать не буду иначе с моего сервера прийдётся его грузить долго.
На торренты ссылку можно.

Из-под нового пользователя попробуйте на всякий.
------- Comment #8 From 2012-06-28 15:47:00 -------
(В ответ на комментарий №6)
> из kaffeine падение может ещё происходить в момент закрытия
C libxine > 1.1.21-alt2 ?
------- Comment #9 From 2012-06-28 19:52:52 -------
(В ответ на комментарий №8)
> (В ответ на комментарий №6)
> > из kaffeine падение может ещё происходить в момент закрытия
> C libxine > 1.1.21-alt2 ?
А он где? В T6 его нет.
------- Comment #10 From 2012-06-29 12:13:40 -------
(В ответ на комментарий №8)
> (В ответ на комментарий №6)
> > из kaffeine падение может ещё происходить в момент закрытия
> C libxine > 1.1.21-alt2 ?
Собрал 1.1.21-alt3 из Сизифа. Проблема осталась и воспроизводится у меня на
двух машинах с T6. Ещё немного отчётов с падениями:

************************************************************************
************ The.Legend.of.Korra.S01E07.www.alive-ua.com.avi ***********
[roman@roman ~]$ xine
This is xine (X11 gui) - a free video player v0.99.5.
(c) 2000-2007 The xine Team.
socket(): Address family not supported by protocol
No accelerated IMDCT transform found
[mpeg4 @ 0x8818ec0] header damaged
*** glibc has detected an error in xine: free(): invalid pointer: 0x0895eea0
***
======= Backtrace: =========
/lib/libc.so.6(+0x6b9da)[0xb73e79da]
/lib/libc.so.6(+0x6d313)[0xb73e9313]
/lib/libc.so.6(cfree+0x71)[0xb73ec591]
/usr/lib/libavutil.so.51(av_free+0x1b)[0xb58c715b]

************************************************************************
************ Тачки.2.2011.avi ******************************************
[roman@roman ~]$ xine
This is xine (X11 gui) - a free video player v0.99.5.
(c) 2000-2007 The xine Team.
socket(): Address family not supported by protocol
No accelerated IMDCT transform found
*** glibc has detected an error in xine: corrupted double-linked list:
0x081f1578 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6b9da)[0xb74169da]
/lib/libc.so.6(+0x6e99e)[0xb741999e]
/lib/libc.so.6(__libc_malloc+0x60)[0xb741b0c0]
/lib/libc.so.6(+0x1fff8)[0xb73caff8]
/lib/libc.so.6(+0x19025)[0xb73c4025]
/lib/libc.so.6(+0x17a24)[0xb73c2a24]
/lib/libc.so.6(iconv_open+0xcc)[0xb73c25dc]
/usr/lib/libxine.so.1(+0x2aca9)[0xb7749ca9]

************************************************************************
************ Kak.priruchit.drakona.2010.avi ****************************
[roman@roman ~]$ xine
This is xine (X11 gui) - a free video player v0.99.5.
(c) 2000-2007 The xine Team.
socket(): Address family not supported by protocol
No accelerated IMDCT transform found
*** glibc has detected an error in xine: free(): invalid pointer: 0xb0172938
***
======= Backtrace: =========
/lib/libc.so.6(+0x6b9da)[0xb738f9da]
/lib/libc.so.6(+0x6d313)[0xb7391313]
/lib/libc.so.6(cfree+0x71)[0xb7394591]
/usr/lib/libfreetype.so.6(+0x6c7d)[0xb7236c7d]
/usr/lib/libfreetype.so.6(+0xbd6a)[0xb723bd6a]
/usr/lib/libfreetype.so.6(FT_Remove_Module+0x10f)[0xb723f26f]
/usr/lib/libfreetype.so.6(FT_Done_Library+0x140)[0xb723f9a0]
/usr/lib/libfreetype.so.6(FT_Done_FreeType+0x28)[0xb72370a8]
/usr/lib/libxine.so.1(+0x2c752)[0xb76c4752]

В целом замечается два типа падения: почти сразу после запуска и при выходе.
Повторяемость процентов 50. Падение при запуске лучше всего воспроизводится
если открывать файл из меню xine, а не передавать в командной строке.

Из файлов на которых хорошо воспроизводятся падения есть
The.Legend.of.Korra.S01E07.www.alive-ua.com.avi, который имеет размер 300Мб,
загрузить его можно здесь:
http://alive-ua.com/cartoons/70867-avatar-legenda-o-korre-1-sezon-the-last-airbender-the-legend-of-korra-2012ruseng-hdtvrip.html
------- Comment #11 From 2012-06-29 14:15:29 -------
(В ответ на комментарий №9)
> > C libxine > 1.1.21-alt2 ?
> А он где? В T6 его нет.
Не доехал еще, значит. Из P6 можно пока взять.
------- Comment #12 From 2012-06-29 14:17:32 -------
(В ответ на комментарий №10)
> > > из kaffeine падение может ещё происходить в момент закрытия
> > C libxine > 1.1.21-alt2 ?
> Собрал 1.1.21-alt3 из Сизифа. Проблема осталась и воспроизводится у меня на
> двух машинах с T6. Ещё немного отчётов с падениями:
Это ж не kaffeine.

P.S.
С xine воспроизвел. Новый xine-ui не лечит.
------- Comment #13 From 2012-06-29 16:34:01 -------
(В ответ на комментарий №12)
> > Собрал 1.1.21-alt3 из Сизифа. Проблема осталась и воспроизводится у меня на
> > двух машинах с T6. Ещё немного отчётов с падениями:
> Это ж не kaffeine.
> С xine воспроизвел. Новый xine-ui не лечит.
Не kaffeine, но в нём фактически то-же самое и воспроизводил на xine что-бы
оторвать связь с kaffeine, а выделить первоисточник.
------- Comment #14 From 2012-07-07 08:42:27 -------
Ещё один момент.
Повторяемость падений не 100% т.е раза с третьего-четвёртого проигрывание
запускается и играет до конца, хотя затем может упасть при выходе.
------- Comment #15 From 2012-11-10 15:30:39 -------
Проблема по прежнему актуальна и сейчас 100% воспроизводится на одном из avi.
Очередной подход к изучению проблемы показал:
- пересборка пакетов libav-0.8.4-alt1, libxine-1.1.21-alt3,
xine-ui-0.99.6-alt1.1 и kaffeine-0.8.8-alt8 проблемы не решает;
- замечена связь проблемы с архитектурой, а именно проблема воспроизводится на
x86_32, при этом на x86_64 в том-же окружении проблемы нет;
- от дистрибутива T6 или Sisyphus проблема похоже не зависит, На Sisyphus-x86
падения правда не проверял;
- проблема устойчиво связана с операциями на памяти, а именно двойное
выделение-освобождение в библиотеке libav, функций av_malloc() и av_free().

Возник из всего этого вопрос. Какая в libav может быть зависимость от
архитектуры, которая приводит к подобным проблемам на x86_32?
------- Comment #16 From 2012-11-10 15:51:27 -------
(В ответ на комментарий №15)
> Какая в libav может быть зависимость от архитектуры
Теоретически что угодно.
У меня p6 из подручных только x86_64.
Для начала попробуйте libav из ftp://devel.altlinux.ru/zerg/misc/M60P/p6_zerg/
Если воспроизведется, я еще обновлю там до
http://packages.altlinux.org/en/Sisyphus/srpms/libav
------- Comment #17 From 2012-11-10 18:16:51 -------
(В ответ на комментарий №16)
> У меня p6 из подручных только x86_64.
> Для начала попробуйте libav из ftp://devel.altlinux.ru/zerg/misc/M60P/p6_zerg/
Этот без изменений.

> Если воспроизведется, я еще обновлю там до
> http://packages.altlinux.org/en/Sisyphus/srpms/libav
До этого я и сам обновлял, см. комментарий №15

Попробовал --disable-memalign-hack и теперь не падает, хоть при запуске,
полностью играется, а затем падает при выходе.

Попробую жестко выбрать тип memalign или отключить его вообще.
------- Comment #18 From 2012-11-12 22:33:54 -------
(В ответ на комментарий №17)
> Попробовал --disable-memalign-hack и теперь не падает, хоть при запуске,
А в libav-0.8.4 он отключен по умолчанию. Погоняю его и в p6, наверное,
отправлю.
------- Comment #19 From 2012-11-12 23:15:13 -------
(В ответ на комментарий №18)
> (В ответ на комментарий №17)
> > Попробовал --disable-memalign-hack и теперь не падает, хоть при запуске,
> А в libav-0.8.4 он отключен по умолчанию. Погоняю его и в p6, наверное,
> отправлю.
Моя ошибка, как раз я включил этот параметр --enable-memalign-hack. Остальное
по простому там не проверишь.
------- Comment #20 From 2013-01-03 23:12:46 -------
Valgrind по этому поводу сообщает такое:

==11648== Thread 6:
==11648== Invalid read of size 4
==11648==    at 0xAA299A1: pp_postprocess (in /usr/lib/libpostproc.so.52.0.0)
==11648==  Address 0x72dc2c5 is 965 bytes inside a block of size 967 alloc'd
==11648==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==11648==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==11648==    by 0x80290EC: av_malloc (in /usr/lib/libavutil.so.51.22.1)
==11648==
==11648== Invalid read of size 4
==11648==    at 0xAA29990: pp_postprocess (in /usr/lib/libpostproc.so.52.0.0)
==11648==  Address 0x72dc2c9 is 2 bytes after a block of size 967 alloc'd
==11648==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==11648==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==11648==    by 0x80290EC: av_malloc (in /usr/lib/libavutil.so.51.22.1)
==11648==
==11648== Invalid write of size 4
==11648==    at 0xAA29999: pp_postprocess (in /usr/lib/libpostproc.so.52.0.0)
==11648==  Address 0x7b5143c is 892 bytes inside a block of size 893 alloc'd
==11648==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==11648==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==11648==    by 0x80290EC: av_malloc (in /usr/lib/libavutil.so.51.22.1)
==11648==
==11648== Invalid read of size 1
==11648==    at 0xAA0F768: ??? (in /usr/lib/libpostproc.so.52.0.0)
==11648==  Address 0x72dc2c7 is 0 bytes after a block of size 967 alloc'd
==11648==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==11648==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==11648==    by 0x80290EC: av_malloc (in /usr/lib/libavutil.so.51.22.1)
==11648==
==11648== Invalid read of size 1
==11648==    at 0xAA0F75C: ??? (in /usr/lib/libpostproc.so.52.0.0)
==11648==  Address 0x7b5143d is 0 bytes after a block of size 893 alloc'd
==11648==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==11648==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==11648==    by 0x80290EC: av_malloc (in /usr/lib/libavutil.so.51.22.1)
==11648==
==11648== Invalid read of size 1
==11648==    at 0xAA0ECEE: ??? (in /usr/lib/libpostproc.so.52.0.0)
==11648==  Address 0x72dc2c7 is 0 bytes after a block of size 967 alloc'd
==11648==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==11648==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==11648==    by 0x80290EC: av_malloc (in /usr/lib/libavutil.so.51.22.1)
==11648==
==11648== Invalid read of size 1
==11648==    at 0xAA0ECEA: ??? (in /usr/lib/libpostproc.so.52.0.0)
==11648==  Address 0x7b5143d is 0 bytes after a block of size 893 alloc'd
==11648==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==11648==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==11648==    by 0x80290EC: av_malloc (in /usr/lib/libavutil.so.51.22.1)
==11648==

Что при определённых обстоятельствах и разбивке памяти вполне может вызывать
проблемы.
Я вот только не пойму. Это pp_postprocess() лезет за границу выделенной памяти
или memalign() некорректно выделяет.
Кстати это объясняет почему --enable-memalign-hack несколько смягчает проблему,
покольку образ выделения памяти меняется и вылезание за её границы не сразу
вызывает падение.
------- Comment #21 From 2013-01-06 00:06:07 -------
(В ответ на комментарий №20)
> Valgrind по этому поводу сообщает такое:
Детализировал, установив пакеты с отладочной информацией. В целом замечены два
типа ошибки обращения к памяти:

==27561== Invalid write of size 4
==27561==    at 0xAA29999: pp_postprocess (postprocess.c:1031)
==27561==    by 0x7FEB511: ff_decode_data (ff_video_decoder.c:1598)
==27561==    by 0x7DA14FA: video_decoder_loop (video_decoder.c:414)
==27561==    by 0x4CC894F: start_thread (pthread_create.c:297)
==27561==    by 0x59B753D: clone (clone.S:130)
==27561==  Address 0x7b51ffc is 892 bytes inside a block of size 893 alloc'd
==27561==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==27561==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==27561==    by 0x80290EC: av_malloc (mem.c:83)
==27561==    by 0x80291C5: av_mallocz (mem.c:156)
==27561==    by 0xAA099A7: reallocBuffers (postprocess.c:893)
==27561==    by 0xAA29606: pp_get_context (postprocess.c:945)
==27561==    by 0x7FEA5D9: pp_change_quality (ff_video_decoder.c:508)
==27561==    by 0x7FEBB60: ff_decode_data (ff_video_decoder.c:560)
==27561==    by 0x7DA14FA: video_decoder_loop (video_decoder.c:414)
==27561==    by 0x4CC894F: start_thread (pthread_create.c:297)
==27561==    by 0x59B753D: clone (clone.S:130)

==27561== Invalid read of size 1
==27561==    at 0xAA0F768: postProcess_MMX2 (postprocess_template.c:3403)
==27561==    by 0xAA29F85: pp_postprocess (postprocess.c:632)
==27561==    by 0x7FEB511: ff_decode_data (ff_video_decoder.c:1598)
==27561==    by 0x7DA14FA: video_decoder_loop (video_decoder.c:414)
==27561==    by 0x4CC894F: start_thread (pthread_create.c:297)
==27561==    by 0x59B753D: clone (clone.S:130)
==27561==  Address 0x72dce87 is 0 bytes after a block of size 967 alloc'd
==27561==    at 0x4027440: memalign (vg_replace_malloc.c:581)
==27561==    by 0x40274FE: posix_memalign (vg_replace_malloc.c:709)
==27561==    by 0x80290EC: av_malloc (mem.c:83)
==27561==    by 0x80291C5: av_mallocz (mem.c:156)
==27561==    by 0xA195E71: ff_alloc_picture (mpegvideo.c:333)
==27561==    by 0xA198090: MPV_frame_start (mpegvideo.c:1221)
==27561==    by 0x9FA21D1: ff_h263_decode_frame (h263dec.c:628)
==27561==    by 0xA269018: avcodec_decode_video2 (utils.c:1152)
==27561==    by 0x7FEB264: ff_decode_data (ff_video_decoder.c:1474)
==27561==    by 0x7DA14FA: video_decoder_loop (video_decoder.c:414)
==27561==    by 0x4CC894F: start_thread (pthread_create.c:297)
==27561==    by 0x59B753D: clone (clone.S:130)

Однако оба типа характеризуются вычислением размера участка памяти в
ff_alloc_picture (mpegvideo.c:333) или изменением размера pp_change_quality
(ff_video_decoder.c:508) с последующим общим выходом за размер буфера в
ff_decode_data (ff_video_decoder.c:1598)
------- Comment #22 From 2013-01-06 00:08:30 -------
И кстати, это всё в libxine!
------- Comment #23 From 2013-01-06 00:35:51 -------
Открыл багу на xine-project.org:
https://bugs.xine-project.org/show_bug.cgi?id=491
------- Comment #24 From 2013-03-08 19:40:04 -------
Created an attachment (id=5767) [details]
Обход проблемы доступа за границу выделенной памяти

Данный патч обходит проблему доступа за границу выделенной памяти в ffmpeg,
путём выделения на 10% больше памяти, указанием большего размера изображения.

С этим патчем у меня падений нет нигде, хотя там есть ещё одно место обращения
за границу памяти, но это только чтение и таким-же образом это не обходится.
------- Comment #25 From 2013-03-11 15:42:37 -------
Приложу его тогда.
------- Comment #26 From 2013-03-11 17:44:19 -------
(В ответ на комментарий №25)
> Приложу его тогда.
Можно за одно обновить из репозитория, для ветки 1.1. Там ещё были некоторые
исправления, после релиза 1.1.21, которые однако этой проблемы не исправляли.
------- Comment #27 From 2013-03-11 18:01:57 -------
(В ответ на комментарий №26)
> Можно за одно обновить из репозитория, для ветки 1.1
Ок, только уже следующим таском. Уже собирается.
------- Comment #28 From 2013-03-11 18:06:01 -------
libxine-1.1.21-alt5 -> sisyphus:

* Mon Mar 11 2013 Sergey V Turchin <zerg@altlinux> 1.1.21-alt5
- add woraround against crash; thanks rom_as@alt (ALT#27505)