Non-executable stack in asm.
authorBen Laurie <ben@openssl.org>
Wed, 5 May 2010 15:50:13 +0000 (15:50 +0000)
committerBen Laurie <ben@openssl.org>
Wed, 5 May 2010 15:50:13 +0000 (15:50 +0000)
CHANGES
crypto/aes/asm/aes-x86_64.pl
crypto/bn/asm/x86_64-mont.pl
crypto/md5/asm/md5-x86_64.pl
crypto/rc4/asm/rc4-x86_64.pl
crypto/sha/asm/sha1-x86_64.pl
crypto/sha/asm/sha512-x86_64.pl
crypto/x86_64cpuid.pl

diff --git a/CHANGES b/CHANGES
index 6f713d9e874bfa27204100a699aa9795a928e17a..c9f22266008eee6c4fb917a67c9498ceffb9e0cb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,9 @@
 
  Changes between 1.0.0 and 1.1.0  [xx XXX xxxx]
 
+  *) Make generated asm have non-executable stack.
+     [Contributed by Google <agl@google.com>]
+
   *) New function OPENSSL_gmtime_diff to find the difference in days
      and seconds between two tm structures. This will be used to provide
      additional functionality for ASN1_TIME.
index a545e892aef00c6584c5bf31e1389ee3dc8bbeb1..a757b47146790bf1a675a508184c65d031f64550 100755 (executable)
@@ -42,7 +42,8 @@ $verticalspin=1;      # unlike 32-bit version $verticalspin performs
                        # ~15% better on both AMD and Intel cores
 $speed_limit=512;      # see aes-586.pl for details
 
-$code=".text\n";
+$code=".section .note.GNU-stack,\"\",\@progbits\n";
+$code.=".text\n";
 
 $s0="%eax";
 $s1="%ebx";
index 3b7a6f243f21e65882daa79e575c4a12ea6dce2c..b62373f567cb85a55703208a97f2f74c2ffb4a0f 100755 (executable)
@@ -45,6 +45,7 @@ $m0="%rbx";
 $m1="%rbp";
 
 $code=<<___;
+.section .note.GNU-stack,"",\@progbits
 .text
 
 .globl bn_mul_mont
index 867885435e2930d3de96664532f5403fadc059f2..b75cf3b7a48db879c59f9bed66c5c7843c7ceca3 100755 (executable)
@@ -123,6 +123,7 @@ no warnings qw(uninitialized);
 open STDOUT,"| $^X $xlate $flavour $output";
 
 $code .= <<EOF;
+.section .note.GNU-stack,"",\@progbits
 .text
 .align 16
 
index 677be5fe25badfe44a315855a827c65d71543e72..a134127e8c654adeb676eef37b9ea07ba5b6fe77 100755 (executable)
@@ -82,6 +82,7 @@ $YY="%r12";
 $TY="%r13";
 
 $code=<<___;
+.section .note.GNU-stack,"",\@progbits
 .text
 
 .globl RC4
index 35ab0e7e78508b42699609047c2a1a659a10f34d..a00f7c679974972edd5b74226af02e35e3a98cbf 100755 (executable)
@@ -178,6 +178,7 @@ unshift(@xi,pop(@xi));
 }
 
 $code.=<<___;
+.section .note.GNU-stack,"",\@progbits
 .text
 
 .globl sha1_block_data_order
index e6643f8cf613d2addb4591f60c0962bacd6c28db..aaf9c57875ed9b9d6ca778d1cfcedcdef94d6a02 100755 (executable)
@@ -178,6 +178,8 @@ ___
 }
 
 $code=<<___;
+.section .note.GNU-stack,"",\@progbits
+
 .text
 
 .globl $func
index c96821a3c811d55567f43caebce6f47a8308c790..72010c9cbe020c018ce1795158210184ca3f6e36 100644 (file)
@@ -16,6 +16,13 @@ print<<___;
 .section       .init
        call    OPENSSL_cpuid_setup
 
+___
+
+if ($flavour =~ /elf/) {
+  print ".section .note.GNU-stack,\"\",\@progbits\n"
+}
+
+print<<___;
 .text
 
 .globl OPENSSL_atomic_add