Hello,
I have enabled the -Wstack-protector
flag when compiling the project I'm working on (a commercial multi-platform C++ game engine, compiling on Mac OS X 10.6 with GCC 4.2).
This flag warns about functions that will not be protected against stack smashing even though -fstack-protector
is enabled.
GCC emits some warnings when building the project:
not protecting function: no buffer at least 8 bytes long
not protecting local variables: variable length buffer
For the first warning, I found that it is possible to adjust the minimum size a buffer must have when used in a function, for this function to be protected against stack smashing: --param ssp-buffer-size=X
can be used, where X is 8 by default and can be as low as 1.
For the second warning, I can't suppress its occurrences unless I stop using -Wstack-protector
.
1/ When should -fstack-protector
be used? (as in, for instance, all the time during dev, or just when tracking bugs down?)
2/ When should -fstack-protector-all
be used?
3/ What is -Wstack-protector
telling me? Is it suggesting that I decrease the buffer minimum size?
4/ If so, are there any downsides to putting the size to 1?
5/ It appears that -Wstack-protector
is not the kind of flag you want enabled at all times if you want a warning-free build. Is this right?
Thanks!