aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-security/optee-imx/optee-os/0003-arm32-libutils-libutee-ta-add-.note.GNU-stack-sectio.patch
blob: 1c5753c7f40e4803ffaca8b648b3a69a3c32529a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
From 6f738803a59613ec4a683ddbc1747ebffd75a4e6 Mon Sep 17 00:00:00 2001
From: Jerome Forissier <jerome.forissier@linaro.org>
Date: Tue, 23 Aug 2022 12:31:46 +0000
Subject: [PATCH 3/4] arm32: libutils, libutee, ta: add .note.GNU-stack section
 to

 .S files

When building for arm32 with GNU binutils 2.39, the linker outputs
warnings when linking Trusted Applications:

 arm-unknown-linux-uclibcgnueabihf-ld.bfd: warning: utee_syscalls_a32.o: missing .note.GNU-stack section implies executable stack
 arm-unknown-linux-uclibcgnueabihf-ld.bfd: NOTE: This behaviour is deprecated and will be removed in a future version of the linker

We could silence the warning by adding the '-z execstack' option to the
TA link flags, like we did in the parent commit for the TEE core and
ldelf. Indeed, ldelf always allocates a non-executable piece of memory
for the TA to use as a stack.

However it seems preferable to comply with the common ELF practices in
this case. A better fix is therefore to add the missing .note.GNU-stack
sections in the assembler files.

Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>

Signed-off-by: Anton Antonov <Anton.Antonov@arm.com>
Upstream-Status: Backport [https://github.com/OP-TEE/optee_os/pull/5499]
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@foundries.io>
---

 lib/libutee/arch/arm/utee_syscalls_a32.S             | 2 ++
 lib/libutils/ext/arch/arm/atomic_a32.S               | 2 ++
 lib/libutils/ext/arch/arm/mcount_a32.S               | 2 ++
 lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S  | 2 ++
 lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S | 2 ++
 lib/libutils/isoc/arch/arm/setjmp_a32.S              | 2 ++
 ta/arch/arm/ta_entry_a32.S                           | 2 ++
 7 files changed, 14 insertions(+)

diff --git a/lib/libutee/arch/arm/utee_syscalls_a32.S b/lib/libutee/arch/arm/utee_syscalls_a32.S
index 2dea83ab8..668b65a86 100644
--- a/lib/libutee/arch/arm/utee_syscalls_a32.S
+++ b/lib/libutee/arch/arm/utee_syscalls_a32.S
@@ -9,6 +9,8 @@
 
 	.section .note.GNU-stack,"",%progbits
 
+	.section .note.GNU-stack,"",%progbits
+
         .section .text
         .balign 4
         .code 32
diff --git a/lib/libutils/ext/arch/arm/atomic_a32.S b/lib/libutils/ext/arch/arm/atomic_a32.S
index 2be73ffad..87ddf1065 100644
--- a/lib/libutils/ext/arch/arm/atomic_a32.S
+++ b/lib/libutils/ext/arch/arm/atomic_a32.S
@@ -7,6 +7,8 @@
 
 	.section .note.GNU-stack,"",%progbits
 
+	.section .note.GNU-stack,"",%progbits
+
 /* uint32_t atomic_inc32(uint32_t *v); */
 FUNC atomic_inc32 , :
 	ldrex	r1, [r0]
diff --git a/lib/libutils/ext/arch/arm/mcount_a32.S b/lib/libutils/ext/arch/arm/mcount_a32.S
index 54dc3c02d..2f24632b8 100644
--- a/lib/libutils/ext/arch/arm/mcount_a32.S
+++ b/lib/libutils/ext/arch/arm/mcount_a32.S
@@ -9,6 +9,8 @@
 
 	.section .note.GNU-stack,"",%progbits
 
+	.section .note.GNU-stack,"",%progbits
+
 /*
  * Convert return address to call site address by subtracting the size of the
  * mcount call instruction (blx __gnu_mcount_nc).
diff --git a/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S b/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S
index 37ae9ec6f..bc6c48b1a 100644
--- a/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S
+++ b/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S
@@ -7,6 +7,8 @@
 
 	.section .note.GNU-stack,"",%progbits
 
+	.section .note.GNU-stack,"",%progbits
+
 /*
  * signed ret_idivmod_values(signed quot, signed rem);
  * return quotient and remaining the EABI way (regs r0,r1)
diff --git a/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S b/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S
index 5c3353e2c..9fb5e0283 100644
--- a/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S
+++ b/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S
@@ -7,6 +7,8 @@
 
 	.section .note.GNU-stack,"",%progbits
 
+	.section .note.GNU-stack,"",%progbits
+
 /*
  * __value_in_regs lldiv_t __aeabi_ldivmod( long long n, long long d)
  */
diff --git a/lib/libutils/isoc/arch/arm/setjmp_a32.S b/lib/libutils/isoc/arch/arm/setjmp_a32.S
index f8a0b70df..37d7cb88e 100644
--- a/lib/libutils/isoc/arch/arm/setjmp_a32.S
+++ b/lib/libutils/isoc/arch/arm/setjmp_a32.S
@@ -53,6 +53,8 @@
 
 	.section .note.GNU-stack,"",%progbits
 
+	.section .note.GNU-stack,"",%progbits
+
 /* Arm/Thumb interworking support:
 
    The interworking scheme expects functions to use a BX instruction
diff --git a/ta/arch/arm/ta_entry_a32.S b/ta/arch/arm/ta_entry_a32.S
index cd9a12f9d..ccdc19928 100644
--- a/ta/arch/arm/ta_entry_a32.S
+++ b/ta/arch/arm/ta_entry_a32.S
@@ -7,6 +7,8 @@
 
 	.section .note.GNU-stack,"",%progbits
 
+	.section .note.GNU-stack,"",%progbits
+
 /*
  * This function is the bottom of the user call stack. Mark it as such so that
  * the unwinding code won't try to go further down.
-- 
2.43.2