git: e0c92dd2b7e6 - main - amd64: initialize td_frame stack area for init(8) main thread

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Tue, 26 Mar 2024 02:09:27 UTC
The branch main has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=e0c92dd2b7e62e4f8281c9ad1d31465bb32f9e3b

commit e0c92dd2b7e62e4f8281c9ad1d31465bb32f9e3b
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-03-25 12:10:43 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-03-26 02:01:38 +0000

    amd64: initialize td_frame stack area for init(8) main thread
    
    Unitialized td_frame mostly does not matter since all registers are
    overwritten on exec to activate init(8).  Except PSL_T bit from the
    %rflags which might leak into fresh init as garbage, causing spurious
    SIGTRAPs delivered to init until first syscall is executed.
    
    Reviewed by:    emaste, jhb, jhibbits
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D44498
---
 sys/kern/init_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 3df4b1edf4a2..3e4f19d655e6 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -784,6 +784,7 @@ start_init(void *dummy)
 		 */
 		KASSERT((td->td_pflags & TDP_EXECVMSPC) == 0,
 		    ("nested execve"));
+		memset(td->td_frame, 0, sizeof(*td->td_frame));
 		oldvmspace = p->p_vmspace;
 		error = kern_execve(td, &args, NULL, oldvmspace);
 		KASSERT(error != 0,