Porque usar -U_FORTIFY_SOURCE?

Porque usar -U_FORTIFY_SOURCE?

por Luciano Ramalho -
Número de respostas: 4
O enunciado pede que usemos a opção de compilação -U_FORTIFY_SOURCE, entre outras.

Eu não conhecia -FORTIFY_SOURCE e aprendi que é uma opção nova (desde 2004) que aumenta a segurança fazendo checagens de acessos inválidos a posições de memória (buffer overruns) em tempo de compilação e em tempo de execução. Isso me parece uma excelente idéia, então porque desabilitá-la escrevendo -U_FORTIFY_SOURCE?

http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html

http://fedoraproject.org/wiki/Security/Features#Compile_Time_Buffer_Checks_.28FORTIFY_SOURCE.29

[ ]s
Luciano

Em resposta à Luciano Ramalho

Re: Porque usar -U_FORTIFY_SOURCE?

por Natan Costa Lima -
Para desativar os warnings gerados quando não consideramos o retorno das funções.

Para não soltar esses warnings vocês teriam que fazer checagem nas funções scanf e printf por exemplo pois elas devolvem um inteiro (que significa quantos parâmetros a função conseguiu ler).
Em resposta à Luciano Ramalho

Re: Porque usar -U_FORTIFY_SOURCE?

por Francisco Reverbel -
Olá Luciano,

O motivo é exatamente o que o Natan escreveu acima.

Infelizmente o FORTIFY_SOURCE tem um efeito colateral negativo: a ativação de certos warnings que não são muito úteis e podem desviar a atenção do programador, a qual deveria estar concentrada em outros warnings mais importantes.

https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/305176

Muitos usuários do gcc (incluindo projetos importantes de software livre) reclamaram de que, a partir de uma certa versão do compilador, os resultados da compilação dos seus projetos começaram a ser poluídos por um grande número de warnings indesejáveis. Faça uma busca na Web por "gcc disable warn_unused_result" e veja o que aparece...

A opção -U_FORTIFY_SOURCE foi o único jeito que eu encontrei para desabilitar warn_unused_result. Se você conhecer outro, me conte. (Claro que não estou interessado na possibilidade de sair mudando o código para testar sempre o valor devolvido por scanf, nem nas várias "soluções" que têm também o efeito de desabilitar warnings úteis e que já eram emitidos antes de existir o FORTIFY_SOURCE.)

Acredito que lá pelas tantas será adicionada ao gcc alguma opção para desabilitar warn_unused_result sem desativar o FORTIFY_SOURCE. Mas enquanto não aparecer uma solução melhor, o jeito é desabilitar o FORTIFY_SOURCE mesmo.
Em resposta à Francisco Reverbel

Re: Porque usar -U_FORTIFY_SOURCE?

por Luciano Ramalho -
Grato pelas respostas esclarecedoras, Prof. Reverbel e Natan.

Podemos concluir que em alguns momentos específicos da depuração pode até valer a pena usar -FORTIFY_SOURCE, pois apesar dos warnings espúrios, podemos obter alguma informação útil, né?

Valeu!