http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51467

             Bug #: 51467
           Summary: Stack Smashing Protector: Canary is destroyed in RAX
                    partially only on x86_64
    Classification: Unclassified
           Product: gcc
           Version: 4.4.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: ogm256-fo...@yahoo.de


Created attachment 26023
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26023
Sample code vuln.c and its corresponding assembly code vuln-with-ssp.s

I compiled the attached vuln.c to assembly code with the following command on
CentOS 6.0 on a x86_64:

gcc -fstack-protector -S -o vuln-with-ssp.s vuln.c

In the assembly code the canary is put on the stack as follows:

    ...
    movq    %fs:40, %rax
    movq    %rax, -8(%rbp)
    xorl    %eax, %eax
    ...

The canary is a 64 bit value as %rax indicates.
Unfortunately only the lower 32 bit of the canary in %rax are destroyed because
the xor operation takes effect on %eax only.

In my opinion to leave no hint on the canary to an attacker the whole canary
should be destroyed in %rax.

Reply via email to