[cfe-dev] What do the different stack-protector levels protect in Clang?
Yaron Shragai via cfe-dev
cfe-dev at lists.llvm.org
Thu Apr 27 14:48:15 PDT 2017
A typo in my OP broke the link to the document on Google Docs. Here is the
link:
https://docs.google.com/document/d/1xXBH6rRZue4f296vGt9YQcuLVQHeE516stHwt8M9xyU/edit
Here is more specifically what I am looking for:
In GCC, it is published that the stack protector option levels do the
following things (this is in the linked document):
-fno-stack-protector: No protection.
-fstack-protector: Protection for functions in which either of the
following is true:
* The function uses alloca
* There is a char array that is bigger than 8 bytes (actually, bigger
than whatever SSP_BUFFER_SIZE is)
-fstack-protector-all: Protection for all functions - no heuristic.
-fstack-protector-strong: Protection for functions in which any of the
following is true:
* Any the address of any local variable used in the RHS of an assignment
* Any local variable is passed by reference to a function
* There is *any* array, regardless of array type or length
* There is a struct/union containing an array
* There are register local variables
(Also, the stack data is rearranged such that variables are at lower
addresses than buffers.)
What about on Clang? What specifically does -fstack-protector protect? What
specifically does -fstack-protector-strong protect? Is it exactly the same
definition as in GCC?
Thanks!
On Thu, Apr 27, 2017 at 4:14 PM, 陳韋任 <chenwj.cs97g at g2.nctu.edu.tw> wrote:
>
> Is this https://clang.llvm.org/docs/ClangCommandLineReference.html what
you are looking at?
> Under the Clang source directory, `grep -r "stack-protector" docs/*`
gives the following result:
>
> docs/ClangCommandLineReference.rst:.. option:: -fstack-protector,
-fno-stack-protector
> docs/ClangCommandLineReference.rst:.. option:: -fstack-protector-all
> docs/ClangCommandLineReference.rst:.. option:: -fstack-protector-strong
> docs/DiagnosticsReference.rst:-Wstack-protector
>
> Or you can goole with "stack protector site:
http://lists.llvm.org/pipermail/cfe-dev/" to find something
> on the cfe-dev mailing list. I think that's all you can find.
>
> Regards,
> chenwj
>
>
> 2017-04-28 1:20 GMT+08:00 Yaron Shragai via cfe-dev <
cfe-dev at lists.llvm.org>:
>>
>> Hello,
>>
>> I see documentation out there for the levels of stack-protector in GCC:
Regular protects functions that have buffers or that use alloca(), all
protects all functions, strong protects functions with the conditions
listed in para 3 in this doc:
https://docs.google.com/document/d/1xXBH6rRZue4f296vGt9YQcuLVQHeE516stHwt8M9xyU/editAlso,
in GCC, stack-protector puts variables below buffers on the stack (i.e.,
higher up the stack).
>>
>> I'm having trouble finding similar documentation for Clang. (Even if
it's just an official statement that "Clang does the same thing as GCC.")
>>
>> Thanks!
>>
>>
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>
>
>
> --
> Wei-Ren Chen (陳韋任)
> Homepage: https://people.cs.nctu.edu.tw/~chenwj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170427/85a4a177/attachment.html>
More information about the cfe-dev
mailing list