From 1bba3887038aade137a808d751561cc02002f4bf Mon Sep 17 00:00:00 2001 From: Dan Mick Date: Fri, 14 Nov 2014 17:59:57 -0800 Subject: [PATCH 1/2] Add annotation to all assembly files to turn off stack-execute bit See discussion in http://tracker.ceph.com/issues/10114 Building with these changes allows output from readelf like this: $ readelf -lW src/.libs/librados.so.2 | grep GNU_STACK GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x8 (note the absence of 'X' in 'RW') Fixes: #10114 Signed-off-by: Dan Mick (cherry picked from commit 06a245a9845c0c126fb3106b41b2fd2bc4bc4df3) --- src/common/crc32c_intel_fast_asm.S | 2 ++ src/common/crc32c_intel_fast_zero_asm.S | 2 ++ src/erasure-code/isa/isa-l/erasure_code/ec_multibinary.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_2vect_dot_prod_avx.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_2vect_dot_prod_avx2.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_2vect_dot_prod_sse.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_3vect_dot_prod_avx.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_3vect_dot_prod_avx2.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_3vect_dot_prod_sse.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_4vect_dot_prod_avx.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_4vect_dot_prod_avx2.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_4vect_dot_prod_sse.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_5vect_dot_prod_avx.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_5vect_dot_prod_avx2.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_5vect_dot_prod_sse.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_6vect_dot_prod_avx.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_6vect_dot_prod_avx2.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_6vect_dot_prod_sse.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s | 4 ++++ .../isa/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm.s | 2 ++ .../isa/isa-l/erasure_code/gf_vect_dot_prod_sse.asm.s | 2 ++ src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_avx.asm.s | 2 ++ src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_sse.asm.s | 2 ++ 23 files changed, 48 insertions(+) diff --git a/src/common/crc32c_intel_fast_asm.S b/src/common/crc32c_intel_fast_asm.S index 4ca5d65032e29..2189684b4c75e 100644 --- a/src/common/crc32c_intel_fast_asm.S +++ b/src/common/crc32c_intel_fast_asm.S @@ -662,3 +662,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion crc32_iscsi_00, 00, 02, 0014 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/common/crc32c_intel_fast_zero_asm.S b/src/common/crc32c_intel_fast_zero_asm.S index b7246f26380d2..34b7f4890169f 100644 --- a/src/common/crc32c_intel_fast_zero_asm.S +++ b/src/common/crc32c_intel_fast_zero_asm.S @@ -644,3 +644,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion crc32_iscsi_zero_00, 00, 02, 0014 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/ec_multibinary.asm.s b/src/erasure-code/isa/isa-l/erasure_code/ec_multibinary.asm.s index b5655096544a0..54f7301181e7c 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/ec_multibinary.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/ec_multibinary.asm.s @@ -264,3 +264,5 @@ global %1_slver slversion ec_encode_data, 00, 02, 0133 slversion gf_vect_mul, 00, 02, 0134 slversion gf_vect_dot_prod, 00, 01, 0138 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx.asm.s index 7f8b34b79a430..db8064a39718a 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx.asm.s @@ -232,3 +232,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_2vect_dot_prod_avx, 02, 03, 0191 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx2.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx2.asm.s index ce9275fbb31ec..5d75d8109050b 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx2.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_avx2.asm.s @@ -244,3 +244,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_2vect_dot_prod_avx2, 04, 03, 0196 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_sse.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_sse.asm.s index 2520f9f73ff93..4f324aecc437f 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_sse.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_2vect_dot_prod_sse.asm.s @@ -234,3 +234,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_2vect_dot_prod_sse, 00, 02, 0062 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx.asm.s index 3c821605aabc5..6935cb19347bc 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx.asm.s @@ -255,4 +255,6 @@ global %1_slver db 0x%3, 0x%2 %endmacro ;;; func core, ver, snum +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits slversion gf_3vect_dot_prod_avx, 02, 03, 0192 diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx2.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx2.asm.s index bff6e755eb0c3..4ad01531712fd 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx2.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_avx2.asm.s @@ -269,3 +269,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_3vect_dot_prod_avx2, 04, 03, 0197 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_sse.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_sse.asm.s index 0436c11d2b333..925fd3414d624 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_sse.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_3vect_dot_prod_sse.asm.s @@ -257,3 +257,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_3vect_dot_prod_sse, 00, 03, 0063 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx.asm.s index c621d321cc68a..6197f017007d5 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx.asm.s @@ -294,3 +294,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_4vect_dot_prod_avx, 00, 02, 0064 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx2.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx2.asm.s index 3f29c7601c437..e4267e201f285 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx2.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_avx2.asm.s @@ -303,3 +303,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_4vect_dot_prod_avx2, 04, 03, 0064 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_sse.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_sse.asm.s index 3626e42c33c1f..920a8da71c87c 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_sse.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_4vect_dot_prod_sse.asm.s @@ -294,3 +294,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_4vect_dot_prod_sse, 00, 03, 0064 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx.asm.s index 8855a2fc8e02e..a562565971318 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx.asm.s @@ -309,3 +309,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_5vect_dot_prod_avx, 02, 03, 0194 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx2.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx2.asm.s index e932053e2dbda..7f25c1622bb28 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx2.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_avx2.asm.s @@ -321,3 +321,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_5vect_dot_prod_avx2, 04, 03, 0199 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_sse.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_sse.asm.s index b33bab0cc3219..003ad26142410 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_sse.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_5vect_dot_prod_sse.asm.s @@ -309,4 +309,6 @@ global %1_slver db 0x%3, 0x%2 %endmacro ;;; func core, ver, snum +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits slversion gf_5vect_dot_prod_sse, 00, 03, 0065 diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx.asm.s index 4e03e8e83ddb8..28ca861357a3b 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx.asm.s @@ -321,3 +321,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_6vect_dot_prod_avx, 02, 03, 0195 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx2.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx2.asm.s index 7826fb271ea37..a957c9ecc0c86 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx2.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_avx2.asm.s @@ -332,3 +332,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_6vect_dot_prod_avx2, 04, 03, 019a +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_sse.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_sse.asm.s index 23ef3d9e03216..4910ddd703a23 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_sse.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_6vect_dot_prod_sse.asm.s @@ -321,3 +321,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_6vect_dot_prod_sse, 00, 03, 0066 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s index ddc3042943ba9..593a731883f0a 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s @@ -196,3 +196,7 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_vect_dot_prod_avx, 02, 03, 0061 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm.s index 7eebd2792906d..f5f928748cd1d 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx2.asm.s @@ -201,3 +201,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_vect_dot_prod_avx2, 04, 03, 0190 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_sse.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_sse.asm.s index fd51ee52cfccd..2e13c186673a7 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_sse.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_sse.asm.s @@ -193,3 +193,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_vect_dot_prod_sse, 00, 03, 0060 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_avx.asm.s index b60a6ebf2c24b..0536ed7950aae 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_avx.asm.s @@ -170,3 +170,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_vect_mul_avx, 01, 02, 0036 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_sse.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_sse.asm.s index 3d5fb9405a024..c6d7d58696797 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_sse.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_mul_sse.asm.s @@ -176,3 +176,5 @@ global %1_slver %endmacro ;;; func core, ver, snum slversion gf_vect_mul_sse, 00, 02, 0034 +; inform linker that this doesn't require executable stack +section .note.GNU-stack noalloc noexec nowrite progbits From 46bd3441b00c22ba78f04617fd77f0231ccc698d Mon Sep 17 00:00:00 2001 From: Dan Mick Date: Tue, 18 Nov 2014 15:21:30 -0800 Subject: [PATCH 2/2] erasure-code isa-l: remove duplicated lines (fix warning) 06a245a added a section def to assembly files; I added it twice to this file. There's no damage, but a compiler warning (on machines with yasm installed) Signed-off-by: Dan Mick (cherry picked from commit 10f6ef185a9d09e396e94036ec90bfe8a0738ce9) --- .../isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s index 593a731883f0a..894783f6346bd 100644 --- a/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s +++ b/src/erasure-code/isa/isa-l/erasure_code/gf_vect_dot_prod_avx.asm.s @@ -198,5 +198,3 @@ global %1_slver slversion gf_vect_dot_prod_avx, 02, 03, 0061 ; inform linker that this doesn't require executable stack section .note.GNU-stack noalloc noexec nowrite progbits -; inform linker that this doesn't require executable stack -section .note.GNU-stack noalloc noexec nowrite progbits