ЭВМ/ Переполнение буфера в git

04.10.2010

Многие наверное уже видели это сообщение. Оказывается, есть еще убогие люди, использующие strcpy. Из-за них в 2010 году мы продолжаем получать примитивнейшие переполнения буфера в стеке как и 20 лет назад. К счастью, прогресс не стоит не месте, и специально для таких людей придумали особый костыль для компилятора. В OpenBSD он уже давно используется под именем ProPolice, в линуксах он появился относительно недавно под именем SSP и FORTIFY_SOURCE (точнее это два разных костыля, но суть от этого не меняется). В общем костыли успешно работают, ура.


$ perl -e 'print "gitdir: ".("A"x5000)."\n"' >.git
$ git log
*** buffer overflow detected ***: git terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x50)[0x1f2390]
/lib/tls/i686/cmov/libc.so.6(+0xe12ca)[0x1f12ca]
/lib/tls/i686/cmov/libc.so.6(__strcpy_chk+0x44)[0x1f0644]
git[0x80f198c]
git[0x80f1bfd]
git[0x80f1dc4]
git[0x80f2043]
git[0x804b525]
git[0x804b5ee]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x126bd6]
git[0x804ae31]
,