[devel] dvblast-2.2-alt4: Sisyphus/x86_64 test rebuild failed

Alexei Takaseev alexei на taf.ru
Ср Окт 3 12:02:59 MSK 2012



----- Исходное сообщение -----
> От: "Ivan A. Melnikov" <iv на altlinux.org>
> Кому: devel на lists.altlinux.org
> Отправленные: Вторник, 2 Октябрь 2012 г 15:16:08
> Тема: Re: [devel] dvblast-2.2-alt4: Sisyphus/x86_64 test rebuild failed
> 
> 
> Посмотрел на код. По-моему, как-то так:
> 
> On Tue, 2 Oct 2012 14:13:46 +0900 (IRKT)
> Alexei Takaseev <alexei на taf.ru> wrote:
> [...]
> > >     inlined from 'TPDUSend.constprop.35' at en50221.c:318:19,
> 
> Тут выделяется буфер размером MAX_TPDU_SIZE (4096) байт, затем туда
> пишется заголовок (3 каких-то байта, хитро закодированная длинна
> данных i_lenght, ещё один байт) и данные размером i_length.
> 
> > >     inlined from 'SPDUSend' at en50221.c:500:26:
> 
> Тут в ту функцию выше передаются данные размером MAX_TPDU_DATA (4096
> - 4) байт.
> 
> > > /usr/include/bits/string3.h:51:3: error: call to
> > > __builtin___memcpy_chk will always overflow destination buffer
> 
> Тут компилятор справедливо замечает, что
> 
> 	3 + (длина поля size) + 1 + (4096 - 4) > 4096
> 
> на размер хитро	закодированной длины (в нашем случае 3 байта).
> 
> > > make: *** [en50221.o] Error 1
> > > make: Leaving directory `/usr/src/RPM/BUILD/dvblast-2.2'
> > > error: Bad exit status from /usr/src/tmp/rpm-tmp.33481 (%build)
> > 
> > Подскажите, пожалуйста, куда копать в данном случае? На i586 сборка
> > проходит нормально.
> 
> Нужно знать особенности формата. Можно рискнуть уменьшить
> MAX_TPDU_DATA
> ещё на 3 (откомпилироваться помогает), но не знаю, поймут ли это те,
> кто
> эти данные читает.

Спасибо! MAX_TPDU_DATA-7 помогло собраться. По ходу, автор упустил реальный
размер i_length в памяти. На реальных данных переполнения не происходило (там
оперируют блоками до 200 байт), но апстрим уже разбирается, откуда у них
3 лишних байта вылезло.


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