On 7/14/2022 3:55 PM, H.J. Lu via Gcc-patches wrote:
Check stack canary for noreturn function to catch stack corruption
before calling noreturn function.  For C++, check stack canary when
throwing exception or resuming stack unwind to avoid corrupted stack.

gcc/

        PR middle-end/58245
        * calls.cc (expand_call): Check stack canary for noreturn
        function.

gcc/testsuite/

        PR middle-end/58245
        * c-c++-common/pr58245-1.c: New test.
        * g++.dg/pr58245-1.C: Likewise.
        * g++.dg/fstack-protector-strong.C: Adjusted.
But is this really something we want?   I'd actually lean towards eliminating the useless load -- I don't necessarily think we should be treating non-returning paths specially here.

The whole point of the stack protector is to prevent the *return* path from going to an attacker controlled location.  I'm not sure checking the protector at this point actually does anything particularly useful.

jeff

Reply via email to