V2 [PATCH 3/5] i386: Add _CET_ENDBR to assembly files without ENTRY

Message ID 20200108161535.6141-4-hjl.tools@gmail.com
State New
Headers show
Series
  • V2 [PATCH 3/5] i386: Add _CET_ENDBR to assembly files without ENTRY
Related show

Commit Message

H.J. Lu Jan. 8, 2020, 4:15 p.m.
Add _CET_ENDBR to i386 assembly files which don't use ENTRY to add
ENDBR32 at function entries when CET is enabled.
---
 sysdeps/i386/i386-mcount.S              | 2 ++
 sysdeps/i386/nptl/pthread_spin_lock.S   | 2 ++
 sysdeps/i386/nptl/pthread_spin_unlock.S | 3 +++
 sysdeps/i386/pthread_spin_trylock.S     | 2 ++
 4 files changed, 9 insertions(+)

-- 
2.24.1

Comments

Adhemerval Zanella Jan. 9, 2020, 9:13 p.m. | #1
On 08/01/2020 13:15, H.J. Lu wrote:
> Add _CET_ENDBR to i386 assembly files which don't use ENTRY to add

> ENDBR32 at function entries when CET is enabled.

> ---

>  sysdeps/i386/i386-mcount.S              | 2 ++

>  sysdeps/i386/nptl/pthread_spin_lock.S   | 2 ++

>  sysdeps/i386/nptl/pthread_spin_unlock.S | 3 +++

>  sysdeps/i386/pthread_spin_trylock.S     | 2 ++

>  4 files changed, 9 insertions(+)

> 

> diff --git a/sysdeps/i386/i386-mcount.S b/sysdeps/i386/i386-mcount.S

> index 9516265bcb..8b60bd20fe 100644

> --- a/sysdeps/i386/i386-mcount.S

> +++ b/sysdeps/i386/i386-mcount.S

> @@ -30,6 +30,7 @@

>  	.type C_SYMBOL_NAME(_mcount), @function

>  	.align ALIGNARG(4)

>  C_LABEL(_mcount)

> +	_CET_ENDBR

>  	/* Save the caller-clobbered registers.  */

>  	pushl %eax

>  	pushl %ecx

> @@ -58,6 +59,7 @@ weak_alias (_mcount, mcount)

>  	.type C_SYMBOL_NAME(__fentry__), @function

>  	.align ALIGNARG(4)

>  C_LABEL(__fentry__)

> +	_CET_ENDBR

>  	/* Save the caller-clobbered registers.  */

>  	pushl %eax

>  	pushl %ecx


Ok, ENTRY will issue CALL_MCOUNT itself.

> diff --git a/sysdeps/i386/nptl/pthread_spin_lock.S b/sysdeps/i386/nptl/pthread_spin_lock.S

> index 5736c82078..7eb8f0e069 100644

> --- a/sysdeps/i386/nptl/pthread_spin_lock.S

> +++ b/sysdeps/i386/nptl/pthread_spin_lock.S

> @@ -15,12 +15,14 @@

>     License along with the GNU C Library; if not, see

>     <https://www.gnu.org/licenses/>.  */

>  

> +#include <sysdep.h>

>  #include <lowlevellock.h>

>  

>  	.globl	pthread_spin_lock

>  	.type	pthread_spin_lock,@function

>  	.align	16

>  pthread_spin_lock:

> +	_CET_ENDBR

>  	mov	4(%esp), %eax

>  1:	LOCK

>  	decl	0(%eax)


I think we can use ENTRY/END here instead.

> diff --git a/sysdeps/i386/nptl/pthread_spin_unlock.S b/sysdeps/i386/nptl/pthread_spin_unlock.S

> index e7757d0a03..dac730af1f 100644

> --- a/sysdeps/i386/nptl/pthread_spin_unlock.S

> +++ b/sysdeps/i386/nptl/pthread_spin_unlock.S

> @@ -16,10 +16,13 @@

>     License along with the GNU C Library; if not, see

>     <https://www.gnu.org/licenses/>.  */

>  

> +#include <sysdep.h>

> +

>  	.globl	pthread_spin_unlock

>  	.type	pthread_spin_unlock,@function

>  	.align	16

>  pthread_spin_unlock:

> +	_CET_ENDBR

>  	movl	4(%esp), %eax

>  	movl	$1, (%eax)

>  	xorl	%eax, %eax


Ditto.

> diff --git a/sysdeps/i386/pthread_spin_trylock.S b/sysdeps/i386/pthread_spin_trylock.S

> index dd08d38f8d..b3965a150f 100644

> --- a/sysdeps/i386/pthread_spin_trylock.S

> +++ b/sysdeps/i386/pthread_spin_trylock.S

> @@ -16,6 +16,7 @@

>     License along with the GNU C Library; if not, see

>     <https://www.gnu.org/licenses/>.  */

>  

> +#include <sysdep.h>

>  #include <pthread-errnos.h>

>  

>  

> @@ -29,6 +30,7 @@

>  	.type	pthread_spin_trylock,@function

>  	.align	16

>  pthread_spin_trylock:

> +	_CET_ENDBR

>  	movl	4(%esp), %edx

>  	movl	$1, %eax

>  	xorl	%ecx, %ecx

> 


Ditto.

Patch

diff --git a/sysdeps/i386/i386-mcount.S b/sysdeps/i386/i386-mcount.S
index 9516265bcb..8b60bd20fe 100644
--- a/sysdeps/i386/i386-mcount.S
+++ b/sysdeps/i386/i386-mcount.S
@@ -30,6 +30,7 @@ 
 	.type C_SYMBOL_NAME(_mcount), @function
 	.align ALIGNARG(4)
 C_LABEL(_mcount)
+	_CET_ENDBR
 	/* Save the caller-clobbered registers.  */
 	pushl %eax
 	pushl %ecx
@@ -58,6 +59,7 @@  weak_alias (_mcount, mcount)
 	.type C_SYMBOL_NAME(__fentry__), @function
 	.align ALIGNARG(4)
 C_LABEL(__fentry__)
+	_CET_ENDBR
 	/* Save the caller-clobbered registers.  */
 	pushl %eax
 	pushl %ecx
diff --git a/sysdeps/i386/nptl/pthread_spin_lock.S b/sysdeps/i386/nptl/pthread_spin_lock.S
index 5736c82078..7eb8f0e069 100644
--- a/sysdeps/i386/nptl/pthread_spin_lock.S
+++ b/sysdeps/i386/nptl/pthread_spin_lock.S
@@ -15,12 +15,14 @@ 
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
 #include <lowlevellock.h>
 
 	.globl	pthread_spin_lock
 	.type	pthread_spin_lock,@function
 	.align	16
 pthread_spin_lock:
+	_CET_ENDBR
 	mov	4(%esp), %eax
 1:	LOCK
 	decl	0(%eax)
diff --git a/sysdeps/i386/nptl/pthread_spin_unlock.S b/sysdeps/i386/nptl/pthread_spin_unlock.S
index e7757d0a03..dac730af1f 100644
--- a/sysdeps/i386/nptl/pthread_spin_unlock.S
+++ b/sysdeps/i386/nptl/pthread_spin_unlock.S
@@ -16,10 +16,13 @@ 
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
+
 	.globl	pthread_spin_unlock
 	.type	pthread_spin_unlock,@function
 	.align	16
 pthread_spin_unlock:
+	_CET_ENDBR
 	movl	4(%esp), %eax
 	movl	$1, (%eax)
 	xorl	%eax, %eax
diff --git a/sysdeps/i386/pthread_spin_trylock.S b/sysdeps/i386/pthread_spin_trylock.S
index dd08d38f8d..b3965a150f 100644
--- a/sysdeps/i386/pthread_spin_trylock.S
+++ b/sysdeps/i386/pthread_spin_trylock.S
@@ -16,6 +16,7 @@ 
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
 #include <pthread-errnos.h>
 
 
@@ -29,6 +30,7 @@ 
 	.type	pthread_spin_trylock,@function
 	.align	16
 pthread_spin_trylock:
+	_CET_ENDBR
 	movl	4(%esp), %edx
 	movl	$1, %eax
 	xorl	%ecx, %ecx