NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

PR/59084 CVS commit: [netbsd-10] src



The following reply was made to PR kern/59084; it has been noted by GNATS.

From: "Martin Husemann" <martin%netbsd.org@localhost>
To: gnats-bugs%gnats.NetBSD.org@localhost
Cc: 
Subject: PR/59084 CVS commit: [netbsd-10] src
Date: Fri, 23 Oct 2026 15:41:49 +0000

 Module Name:	src
 Committed By:	martin
 Date:		Fri Oct 23 15:41:48 UTC 2026
 
 Modified Files:
 	src/distrib/sets/lists/debug [netbsd-10]: mi
 	src/distrib/sets/lists/tests [netbsd-10]: mi
 	src/sys/arch/alpha/alpha [netbsd-10]: machdep.c
 	src/sys/arch/amd64/amd64 [netbsd-10]: machdep.c
 	src/sys/arch/hppa/hppa [netbsd-10]: machdep.c
 	src/sys/arch/i386/i386 [netbsd-10]: machdep.c
 	src/sys/arch/ia64/ia64 [netbsd-10]: machdep.c
 	src/sys/arch/m68k/m68k [netbsd-10]: m68k_machdep.c
 	src/sys/arch/mips/mips [netbsd-10]: mips_machdep.c
 	src/sys/arch/sh3/sh3 [netbsd-10]: sh3_machdep.c
 	src/sys/arch/vax/vax [netbsd-10]: trap.c
 	src/tests/kernel [netbsd-10]: Makefile
 Added Files:
 	src/tests/kernel [netbsd-10]: h_execregs_unimpl.c t_execregs.c
 	src/tests/kernel/arch/aarch64 [netbsd-10]: execregs.c execregs.h
 	    h_execregs.S
 	src/tests/kernel/arch/hppa [netbsd-10]: execregs.c execregs.h
 	    h_execregs.S
 	src/tests/kernel/arch/i386 [netbsd-10]: execregs.c execregs.h
 	    h_execregs.S
 	src/tests/kernel/arch/sh3 [netbsd-10]: h_execregs.S
 	src/tests/kernel/arch/vax [netbsd-10]: execregs.c execregs.h
 	    h_execregs.S
 	src/tests/kernel/arch/x86_64 [netbsd-10]: execregs.c execregs.h
 	    h_execregs.S
 
 Log Message:
 Pull up following revision(s) (requested by riastradh in ticket #1376):
 
 	sys/arch/vax/vax/trap.c: revision 1.139
 	tests/kernel/arch/aarch64/execregs.c: revision 1.1
 	tests/kernel/Makefile: revision 1.85
 	tests/kernel/Makefile: revision 1.86
 	distrib/sets/lists/tests/mi: revision 1.1359
 	tests/kernel/Makefile: revision 1.87
 	sys/arch/alpha/alpha/machdep.c: revision 1.380
 	tests/kernel/arch/aarch64/execregs.h: revision 1.1
 	sys/arch/m68k/m68k/m68k_machdep.c: revision 1.12
 	sys/arch/i386/i386/machdep.c: revision 1.844
 	sys/arch/i386/i386/machdep.c: revision 1.845
 	sys/arch/hppa/hppa/machdep.c: revision 1.22
 	sys/arch/sh3/sh3/sh3_machdep.c: revision 1.114
 	tests/kernel/arch/x86_64/execregs.c: revision 1.1
 	tests/kernel/arch/aarch64/h_execregs.S: revision 1.1
 	sys/arch/mips/mips/mips_machdep.c: revision 1.307
 	tests/kernel/h_execregs_unimpl.c: revision 1.1
 	tests/kernel/arch/aarch64/h_execregs.S: revision 1.2
 	tests/kernel/arch/x86_64/execregs.h: revision 1.1
 	tests/kernel/arch/hppa/execregs.h: revision 1.1
 	tests/kernel/arch/hppa/execregs.h: revision 1.2
 	tests/kernel/arch/hppa/execregs.c: revision 1.1
 	tests/kernel/arch/hppa/h_execregs.S: revision 1.1
 	tests/kernel/arch/hppa/execregs.c: revision 1.2
 	tests/kernel/arch/i386/execregs.h: revision 1.1
 	tests/kernel/arch/hppa/h_execregs.S: revision 1.2
 	tests/kernel/arch/vax/h_execregs.S: revision 1.1
 	tests/kernel/arch/i386/execregs.c: revision 1.1
 	sys/arch/amd64/amd64/machdep.c: revision 1.372
 	sys/arch/vax/vax/trap.c: revision 1.141
 	sys/arch/amd64/amd64/machdep.c: revision 1.373
 	distrib/sets/lists/debug/mi: revision 1.466
 	tests/kernel/arch/x86_64/h_execregs.S: revision 1.1
 	tests/kernel/arch/vax/execregs.c: revision 1.1
 	tests/kernel/arch/i386/h_execregs.S: revision 1.1
 	tests/kernel/t_execregs.c: revision 1.1
 	tests/kernel/t_execregs.c: revision 1.2
 	tests/kernel/arch/vax/execregs.h: revision 1.1
 	sys/arch/ia64/ia64/machdep.c: revision 1.46
 	tests/kernel/t_execregs.c: revision 1.3
 	tests/kernel/t_execregs.c: revision 1.4
 	tests/kernel/t_execregs.c: revision 1.5
 	tests/kernel/arch/sh3/h_execregs.S: revision 1.1
 	(all via patch)
 
 Test whether exec/spawn will zero registers.
 
 Currently implemented only for a handful of architectures; should
 extend this to all the others, and extend as appropriate if we find
 more register content is worth testing (like maybe vector registers,
 but they are managed differently anyway and less likely to leak).
 VAX test contributed (and tested) by Kalvis Duckmanton, with some
 tweaks by me; the others written and tested by me.  IA64 skipped,
 even though I suspect it _would_ leak if the kernel code ran as is,
 because I have no way to test it.
 
 PR kern/59084: exec/spawn leaks register content
 
 t_execregs: Test some more registers on hppa.
 
 Looks like we're missing zeroing of floating-point registers too, as
 well as the carry/borrow and divide step correction bits in the
 semi-secret PSW register.
 
 Unfortunately, while investigating this, I discovered that qemu's
 hppa implementation doesn't implement fpu traps even if the fpu is
 disabled (relevant bits of CR 10 `CCR', Coprocessor Control Register,
 are cleared), which breaks fpu switching on NetBSD.  So I can't test
 properly this myself.  We should maybe just change NetBSD from lazy
 fpu switching to eager fpu switching anyway to thwart Spectre-class
 attacks if there's any hppa hardware out there that does speculative
 execution.
 
 PR kern/59084: exec/spawn leaks register content
 
 t_execregs: Make read failure nonfatal.
 
 This way, the test will report when the helper program h_execregs has
 crashed, which happens often during development because it's an
 assembly routine with the barest possible runtime support in order to
 get at registers immediately on startup before anything like libc
 constructors have clobbered them.
 
 PR kern/59084: exec/spawn leaks register content
 
 Clear trapframe on exec.
 
 Do this for all architectures, even if the trapframe is fully
 initialized -- makes it easier to audit and be confident it's
 correct, and most likely (with the exception of sh3 which has an
 intermediate call to ufetch_int in the middle) the compiler can
 eliminate redundant stores in these routines.
 
 PR kern/59084: exec/spawn leaks register content
 
 x86: Set tf_trapno = T_ASTFLT on exec.
 In most cases, the caller will already have tf_trapno=T_ASTFLT and
 tf_err=2 -- the latter being the size of the SYSCALL instruction for
 ERESTART handling.  ERESTART handling is not relevant after exec, but
 checking for AST on userret may be.
 
 Hoping this will fix the i386 test bed!  Aside from padding fields,
 these (tf_trapno and tf_err) are the only two members of trapframe
 that were newly zeroed on i386.  The corresponding amd64 changes --
 which zeroed many other registers -- worked in my testing, but
 evidently that wasn't enough testing.
 
 PR kern/59084: exec/spawn leaks register content
 
 vax: Set tf_psl to PSL_U|PSL_PREVU on exec.
 
 This was previously inherited from the caller, which was not clear
 from context, and the trapframe is now zeroed which broke exec on
 vax.
 
 PR kern/59084: exec/spawn leaks register content
 
 h_execregs: Properly request to statically link this.
 
 Adding -static to LDFLAGS doesn't work because we end up passing
 various other flags that cause it to come out as a dynamic executable
 anyway, which would crash on SIGSEGV early at startup -- except that
 the entry point exits before calling the normal start routine, so by
 accident it works.
 
 PR kern/59084: exec/spawn leaks register content
 
 t_execregs: On aarch64, make sure to align stack to 16 bytes.
 
 Should avoid SIGBUS with strict alignment (SCTLR_EL0.A bit).
 PR kern/59084: exec/spawn leaks register content
 
 t_execregs: Make failure of child a little more obvious.
 PR kern/59084: exec/spawn leaks register content
 
 t_execregs: implement sh3 h_execregs helper
 Just dumps mcontext __gregset_t for now.
 Not yet hooked into the build.
 
 
 To generate a diff of this commit:
 cvs rdiff -u -r1.394.2.20 -r1.394.2.21 src/distrib/sets/lists/debug/mi
 cvs rdiff -u -r1.1238.2.26 -r1.1238.2.27 src/distrib/sets/lists/tests/mi
 cvs rdiff -u -r1.375 -r1.375.10.1 src/sys/arch/alpha/alpha/machdep.c
 cvs rdiff -u -r1.366.2.1 -r1.366.2.2 src/sys/arch/amd64/amd64/machdep.c
 cvs rdiff -u -r1.18.4.2 -r1.18.4.3 src/sys/arch/hppa/hppa/machdep.c
 cvs rdiff -u -r1.839 -r1.839.2.1 src/sys/arch/i386/i386/machdep.c
 cvs rdiff -u -r1.43.30.1 -r1.43.30.2 src/sys/arch/ia64/ia64/machdep.c
 cvs rdiff -u -r1.10 -r1.10.30.1 src/sys/arch/m68k/m68k/m68k_machdep.c
 cvs rdiff -u -r1.304 -r1.304.2.1 src/sys/arch/mips/mips/mips_machdep.c
 cvs rdiff -u -r1.112 -r1.112.4.1 src/sys/arch/sh3/sh3/sh3_machdep.c
 cvs rdiff -u -r1.137.2.1 -r1.137.2.2 src/sys/arch/vax/vax/trap.c
 cvs rdiff -u -r1.70.2.2 -r1.70.2.3 src/tests/kernel/Makefile
 cvs rdiff -u -r0 -r1.1.6.2 src/tests/kernel/h_execregs_unimpl.c
 cvs rdiff -u -r0 -r1.7.6.2 src/tests/kernel/t_execregs.c
 cvs rdiff -u -r0 -r1.1.6.2 src/tests/kernel/arch/aarch64/execregs.c \
     src/tests/kernel/arch/aarch64/execregs.h
 cvs rdiff -u -r0 -r1.2.6.2 src/tests/kernel/arch/aarch64/h_execregs.S
 cvs rdiff -u -r0 -r1.2.4.2 src/tests/kernel/arch/hppa/execregs.c \
     src/tests/kernel/arch/hppa/execregs.h \
     src/tests/kernel/arch/hppa/h_execregs.S
 cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/i386/execregs.c \
     src/tests/kernel/arch/i386/execregs.h \
     src/tests/kernel/arch/i386/h_execregs.S
 cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/sh3/h_execregs.S
 cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/vax/execregs.c \
     src/tests/kernel/arch/vax/execregs.h \
     src/tests/kernel/arch/vax/h_execregs.S
 cvs rdiff -u -r0 -r1.1.4.2 src/tests/kernel/arch/x86_64/execregs.c \
     src/tests/kernel/arch/x86_64/execregs.h \
     src/tests/kernel/arch/x86_64/h_execregs.S
 
 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.
 



Home | Main Index | Thread Index | Old Index