[3/4] i386: Add _CET_ENDBR to assembly files without ENTRY

Message ID 20191210204710.4832-4-hjl.tools@gmail.com
State Superseded
Headers

Commit Message

H.J. Lu Dec. 10, 2019, 8:47 p.m. UTC
  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 ++
 sysdeps/unix/sysv/linux/i386/_exit.S    | 1 +
 5 files changed, 10 insertions(+)
  

Comments

Adhemerval Zanella Jan. 7, 2020, 10:05 p.m. UTC | #1
On 10/12/2019 17:47, H.J. Lu wrote:
> diff --git a/sysdeps/unix/sysv/linux/i386/_exit.S b/sysdeps/unix/sysv/linux/i386/_exit.S
> index d59c127501..a21d5f69b3 100644
> --- a/sysdeps/unix/sysv/linux/i386/_exit.S
> +++ b/sysdeps/unix/sysv/linux/i386/_exit.S
> @@ -21,6 +21,7 @@
>  	.type	_exit,@function
>  	.global	_exit
>  _exit:
> +	_CET_ENDBR
>  	movl	4(%esp), %ebx
>  
>  	/* Try the new syscall first.  */
> 

Do we still need this for i386? I think the generic implementation
should suffice since __NR_exit_group is always support and
i386 does define ABORT_INSTRUCTION.
  
H.J. Lu Jan. 7, 2020, 11:38 p.m. UTC | #2
On Tue, Jan 7, 2020 at 2:05 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
>
>
> On 10/12/2019 17:47, H.J. Lu wrote:
> > diff --git a/sysdeps/unix/sysv/linux/i386/_exit.S b/sysdeps/unix/sysv/linux/i386/_exit.S
> > index d59c127501..a21d5f69b3 100644
> > --- a/sysdeps/unix/sysv/linux/i386/_exit.S
> > +++ b/sysdeps/unix/sysv/linux/i386/_exit.S
> > @@ -21,6 +21,7 @@
> >       .type   _exit,@function
> >       .global _exit
> >  _exit:
> > +     _CET_ENDBR
> >       movl    4(%esp), %ebx
> >
> >       /* Try the new syscall first.  */
> >
>
> Do we still need this for i386? I think the generic implementation
> should suffice since __NR_exit_group is always support and
> i386 does define ABORT_INSTRUCTION.

_exit.S can re removed.
  

Patch

diff --git a/sysdeps/i386/i386-mcount.S b/sysdeps/i386/i386-mcount.S
index 32b2a5f0bf..6575b84a1b 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 62c72b9063..2876a8b1cf 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 d190ca562d..dc412190ae 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 0ec09d8b64..c7f94375a7 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
diff --git a/sysdeps/unix/sysv/linux/i386/_exit.S b/sysdeps/unix/sysv/linux/i386/_exit.S
index d59c127501..a21d5f69b3 100644
--- a/sysdeps/unix/sysv/linux/i386/_exit.S
+++ b/sysdeps/unix/sysv/linux/i386/_exit.S
@@ -21,6 +21,7 @@ 
 	.type	_exit,@function
 	.global	_exit
 _exit:
+	_CET_ENDBR
 	movl	4(%esp), %ebx
 
 	/* Try the new syscall first.  */