git: 20845a6994c5 - main - linux(4): Validate exec_setregs on arm64
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 05 Sep 2023 18:19:51 UTC
The branch main has been updated by dchagin:
URL: https://cgit.FreeBSD.org/src/commit/?id=20845a6994c548977874d1f413044d43c8474f0a
commit 20845a6994c548977874d1f413044d43c8474f0a
Author: Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2023-09-05 18:19:08 +0000
Commit: Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2023-09-05 18:19:08 +0000
linux(4): Validate exec_setregs on arm64
The lr register is cleared at the beginning of the _dl_start and _start,
so there is no need to initialize it.
Gnu libc _start takes an rtld_fini pointer in x0 which is set by ld.so
for __libc_start_main, the kernel does not register any atexit pointers.
While here fix whitespaces.
MFC after: 1 week
---
sys/arm64/linux/linux_sysvec.c | 21 ++-------------------
1 file changed, 2 insertions(+), 19 deletions(-)
diff --git a/sys/arm64/linux/linux_sysvec.c b/sys/arm64/linux/linux_sysvec.c
index 885ac4657380..3072732de768 100644
--- a/sys/arm64/linux/linux_sysvec.c
+++ b/sys/arm64/linux/linux_sysvec.c
@@ -51,7 +51,6 @@
#include <arm64/linux/linux.h>
#include <arm64/linux/linux_proto.h>
-#include <compat/linux/linux_dtrace.h>
#include <compat/linux/linux_elf.h>
#include <compat/linux/linux_emul.h>
#include <compat/linux/linux_fork.h>
@@ -107,12 +106,6 @@ static void linux_exec_sysvec_init(void *param);
static int linux_on_exec_vmspace(struct proc *p,
struct image_params *imgp);
-/* DTrace init */
-LIN_SDT_PROVIDER_DECLARE(LINUX_DTRACE);
-
-/* DTrace probes */
-LIN_SDT_PROBE_DEFINE0(sysvec, linux_exec_setregs, todo);
-
LINUX_VDSO_SYM_CHAR(linux_platform);
LINUX_VDSO_SYM_INTPTR(kern_timekeep_base);
LINUX_VDSO_SYM_INTPTR(__user_rt_sigreturn);
@@ -178,19 +171,9 @@ linux_exec_setregs(struct thread *td, struct image_params *imgp,
struct trapframe *regs = td->td_frame;
struct pcb *pcb = td->td_pcb;
- /* LINUXTODO: validate */
- LIN_SDT_PROBE0(sysvec, linux_exec_setregs, todo);
-
memset(regs, 0, sizeof(*regs));
- /* glibc start.S registers function pointer in x0 with atexit. */
- regs->tf_sp = stack;
-#if 0 /* LINUXTODO: See if this is used. */
- regs->tf_lr = imgp->entry_addr;
-#else
- regs->tf_lr = 0xffffffffffffffff;
-#endif
- regs->tf_elr = imgp->entry_addr;
-
+ regs->tf_sp = stack;
+ regs->tf_elr = imgp->entry_addr;
pcb->pcb_tpidr_el0 = 0;
pcb->pcb_tpidrro_el0 = 0;
WRITE_SPECIALREG(tpidrro_el0, 0);