Я включил предупреждение -Wstack-protector при компиляции проекта, над которым я работаю (коммерческий многоплатформенный движок С++, который компилируется в Mac OS X 10.6 с GCC 4.2).
Этот флаг предупреждает о функциях, которые не будут защищены от разбития стека, даже если -fstack-protector включен.
GCC генерирует некоторые предупреждения при создании проекта:
не защищающая функция: без буфера длиной не менее 8 байтов
не защищая локальные переменные: буфер переменной длины
Для первого предупреждения я обнаружил, что можно настроить минимальный размер, который должен иметь буфер при использовании в функции, чтобы эта функция была защищена от разбиения стека: --param ssp-buffer-size=X можно использовать, где X равно 8 по умолчанию и может быть как 1.
Во втором предупреждении я не могу подавить его вхождения, если я не остановлю использование -Wstack-protector.
-  Когда следует использовать 
-fstack-protector? (как, например, во время dev или просто при отслеживании ошибок?) -  Когда следует использовать 
-fstack-protector-all? -  Что мне говорит 
-Wstack-protector? Является ли это предположением, что я уменьшаю минимальный размер буфера? - Если да, есть ли какие-либо недостатки, чтобы положить размер в 1?
 -  Похоже, что 
-Wstack-protector- это не тот флаг, который вы хотите включить всегда, если вы хотите построить без предупреждения. Правильно ли это?